walk-flat
v2: the v1 flat-ground walk fine-tuned with +-1 deg of gear play in every servo (Mjlab-Velocity-Flat-Backlash-MicroDuck), simulation only: v1's 4,000 iterations plus 3,000 with the slop, 4096 envs, 57 min on one RTX 5090. With the slop it stayed on its feet for 20 s in 4 of 5 takes; v1 did 2 of 5 in the same sim (small sample, the training fall rate did not improve). 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-flat
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 (v2, 2026-09-26)
Proof takes with headless_play in Mjlab-Velocity-Flat-Backlash-MicroDuck (±1° of gear play in every servo), 20 s each, standing start, trunk height and tilt sampled every 0.1 s. A fall is a mid-episode environment termination (the robot tipping over).
- v2: 4 of 5 takes with no fall; the fall-free takes kept the trunk between 104 and 135 mm. One take tipped sideways at 5.8 s.
- v1 in the same gear-play sim: 2 of 5 takes with no fall.
- v1 in its original sim without gear play: 1 of 3.
- Training, last 100 iterations: fell_over 0.496 for v2 against 0.453 for v1, so the take gap is a small-sample hint, not a measured gain.
The training checkout had one local change (the task registration for an unrelated get-up task in tasks/__init__.py); the backlash task itself is unmodified at the commit above.
v1
The first release: 4,000 iterations on Mjlab-Velocity-Flat-MicroDuck, no gear play. Still installable:
sudo robotctl policy load walk witcheer/microduck-walk-flat@v1