Instructions to use witcheer/microduck-walk-slip with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use witcheer/microduck-walk-slip with Microduck:
sudo robotctl policy load walk witcheer/microduck-walk-slip
- Notebooks
- Google Colab
- Kaggle
walk-slip
Walk on flat ground with +-1 deg of gear play in every servo, fine-tuned for slippery floors: walk-flat v2 plus 3,000 iterations (7,000 to 10,000) with foot friction randomised over 0.2-1.3 instead of the maker's 0.7-1.3 (our one-change fork Mjlab-Velocity-Flat-Backlash-Slip-MicroDuck), 4096 envs, 58 min on one RTX 5090. Trained in simulation only. In 20 s takes at foot friction 0.2 with a shove every 0.5-1 s it stayed on its feet in 8 of 15 takes against 1 of 15 for walk-flat v2; at normal friction with shoves 9 of 15 against 8 of 15, no difference. 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-slip
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-13)
What changed: one parameter. Pollen's Mjlab-Velocity-Flat-Backlash-MicroDuck randomises the foot friction at startup over 0.7 to 1.3. Our fork Mjlab-Velocity-Flat-Backlash-Slip-MicroDuck widens that to 0.2 to 1.3. The foot collision geoms carry priority=1, so MuJoCo uses the foot value for every foot contact and a low value models a slippery floor. Rewards, terminations, pushes, the gear-play robot and the curricula are the maker's. The fork is a separate task file registered by one import line in tasks/__init__.py; nothing else in the task changes.
Training: warm start from walk-flat v2 (model_7000), 3,000 more iterations (7,000 to 10,000), 4096 envs, 58 min on one RTX 5090 (about 1.15 s per iteration), one uncut block. Mean reward over 100-iteration windows: 100.4 at 8,000, 104.6 at 9,000, 102.4 at 10,000 (flat from 9,000); fell_over 0.656, 0.518, 0.645 over the same windows.
Proof takes with headless_play in the slip task, walk-slip against walk-flat v2 under identical settings, 20 s each, standing start, samples every 0.1 s. The friction override was checked in the play env first (foot geoms read 0.200 at the slippery setting, 1.000 at normal). 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).
- Foot friction 0.2 with play pushes every 0.5 to 1 s: 8 of 15 held against 1 of 15 for walk-flat v2 (one-sided Fisher exact p = 0.0071).
- Foot friction 0.2, no pushes: 12 of 13 against 8 of 13 (p = 0.080, a lean, not a result on its own).
- Foot friction 1.0 with pushes: 9 of 15 against 8 of 15 (two-sided p = 1.0, no difference).
- Both slippery conditions pooled: 20 of 28 against 9 of 28 (p = 0.0035).
- In the held slippery push takes the trunk stayed between 85 and 136 mm.
The gain is in the push condition on a slippery floor. A first set of 5 takes per case read as no gain (3 of 5 against 4 of 5 at normal grip); the 10-take extension reversed that call, so both sets are pooled above.
Not tested: one simulator only, 20 s episodes, a flat floor (no slopes or steps), friction values between the two forced settings, and no real robot. Not yet tested on a real Microduck.
Clip and run log: the microduck-skill-tree dataset carries the reward curve, the queue item, the fork file and every take log. Sibling policies: witcheer/microduck-*.
Simulation only.
- Downloads last month
- 21