Instructions to use witcheer/microduck-walk-mixslope with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use witcheer/microduck-walk-mixslope with Microduck:
sudo robotctl policy load walk witcheer/microduck-walk-mixslope
- Notebooks
- Google Colab
- Kaggle
walk-mixslope
walk-mix with hills added, with +-1 deg of gear play in every servo: walk-mix v1 plus 3,000 iterations (13,000 to 16,000) on a floor where each 4 m tile is either a single 10-25 mm step or a pyramid hill of slope 0.05-0.15, foot friction from 0.2 to 1.3 and the training shove doubled to +-0.6 m/s every 3-6 s (our fork Mjlab-Velocity-Flat-Backlash-MixSlope-MicroDuck), 4096 envs, 120 min on one RTX 5090. Trained in simulation only. Result: no measurable gain over walk-mix. On the test picked before training (0.15 hill + 25 mm step + friction 0.2 + doubled shoves, walking straight ahead at 0.3 m/s) it stayed on its feet for 20 s in 5 of 15 takes against 3 of 15 for walk-mix (one-sided Fisher p 0.34). No loss elsewhere: 0.15 hill without shoves 15 of 15, same as walk-slope; walk-mix's own mixed floor 7 of 15 vs walk-mix 5 of 15 (p 0.71). Not yet tested on a real Microduck.
A perpetual policy for the microduck (61-D observation, 14 actions, 50 Hz). Runs until told otherwise — a gait for the walk slot.
Run it on a robot
sudo robotctl policy load walk witcheer/microduck-walk-mixslope
The observation normalizer is baked into policy.onnx; feed raw observations.
manifest.json follows schema 2 of the microduck policy manifest (docs/policy-manifest.md in the daemon repo).
Training
- repo:
pollen-robotics/microduck_rl - branch:
develop - commit:
53b8971b6 - exported from a checkout with uncommitted changes
Results in simulation (v1, 2026-10-22)
Simulation only. Not yet tested on a real Microduck.
Headline first, on the condition we picked in advance as the test of this run: on a floor with a 0.15 hill, a 25 mm step, foot friction 0.2 and doubled shoves every 3 to 6 s, walk-mixslope stayed on its feet for the whole 20 s in 5 of 15 takes against 3 of 15 for walk-mix (one-sided Fisher exact p = 0.34). That is no measurable gain, so by the rule we set before training this run does not replace walk-mix. On the two other conditions there is no loss: on a 0.15 hill without shoves it held 15 of 15, the same as walk-slope, and on walk-mix's own mixed floor without hills it held 7 of 15 against walk-mix's 5 of 15 (two-sided p = 0.71). We publish it anyway, with the numbers as they came out: it is one policy file that carries both the hills and the mixed floor.
Why it exists: walk-mix carries a single step, a slippery floor and harder shoves in one policy, and walk-slope carries gentle hills. A real owner installs one walk, so this run asks whether one policy can carry all of it.
What changed against Pollen's Mjlab-Velocity-Flat-Backlash-MicroDuck, in our fork Mjlab-Velocity-Flat-Backlash-MixSlope-MicroDuck (task file witcheer_velocity_mixslope_env_cfg.py, which imports the step, slope, slip and push task files rather than copying them):
- floor: one generated grid of 4 m tiles, half of them a single 10 to 25 mm step (
witcheer_velocity_step_env_cfg.py), half a pyramid hill with a slope between 0.05 and 0.15 (witcheer_velocity_slope_env_cfg.py); - foot friction drawn per env between 0.2 and 1.3 instead of 0.7 to 1.3 (
witcheer_velocity_slip_env_cfg.py); - the training shove doubled from ±0.3 to ±0.6 m/s, still every 3 to 6 s (
witcheer_velocity_push_env_cfg.py).
Rewards, terminations, the gear-play robot, the curricula and the observations are the maker's; the policy has no terrain scan and meets the step and the hill blind. The checkout also carries our local patch that measures height terms from the ground under the feet instead of the tile origin (ground_height_patch.py). Those, the import line that registers the fork in tasks/__init__.py and the Hub card metadata patch are why the manifest says the checkout had uncommitted changes.
Training: warm start from walk-mix v1 (model_13000), 3,000 more iterations (13,000 to 16,000), 4096 envs, 120 min on one RTX 5090 (about 2.41 s per iteration; the hill heightfield costs about twice as much per iteration as the step floor), one uncut block. Over 100-iteration windows, mean reward went 56.0, 57.2 and 56.5 at 14,000, 15,000 and 16,000 (42.4 at 13,100, the resume ramp), fell_over 2.44, 2.32 and 2.41, and the velocity tracking error 0.394, 0.400 and 0.399: flat over the last 2,000 iterations. These are under the combined floor, so they do not compare with walk-mix's training numbers.
Proof takes with headless_play, 20 s each, standing start, walking command fixed straight ahead at 0.3 m/s, samples every 0.1 s, 15 takes per policy per condition, every tile forced to one hill slope and one step height, both policies of a pair under identical settings. A take counts as held when it has no tilt fall and no mid-episode reset (the task's fell_over termination fires at 70 degrees of tilt). The takes drop mjlab's out-of-terrain-bounds timeout, which on a generated floor otherwise ends a take that starts in an edge tile with the duck still upright.
- 0.15 hill + 25 mm step + friction 0.2 + doubled shoves every 3 to 6 s, in the mixslope task, against walk-mix (the condition picked in advance): 5 of 15 held against 3 of 15 (one-sided p = 0.34). Mid-episode resets over the 15 takes: 14 each.
- 0.15 hill, normal grip, no shoves, in the slope task, against walk-slope: 15 of 15 against 15 of 15. No loss.
- Walk-mix's own test (25 mm step, friction 0.2, doubled shoves, no hills) in the mix task, against walk-mix: 7 of 15 against 5 of 15 (two-sided p = 0.71). No loss. walk-mix held 9 of 15 on this condition in its own proof batch, so 5 of 15 here is within the same noise band, and so is this policy's two-take lead.
- Not pre-registered, a hint only: the two mixed-floor conditions together give 12 of 30 against 8 of 30 (one-sided p = 0.21).
Reading the take logs: trunk height is measured from the spawn point, so on a hill-top start it goes below zero once the duck walks down off the hill. That is the descent, not a fall.
Not tested: hills steeper than 0.15, steps above 25 mm, friction below 0.2, shoves above ±0.6 m/s, rough ground, any command other than straight ahead at 0.3 m/s, more than 20 s in the scored takes, a second simulator, and a real robot. Not yet tested on a real Microduck.
Run log: the microduck-skill-tree dataset carries the reward curves, queue items, fork files and take logs. Sibling policies: witcheer/microduck-*. walk-flat stays the default walk and walk-mix stays the mixed-floor walk; walk-mixslope is the variant to try where the floor also has hills.
Simulation only.
- Downloads last month
- 8