Instructions to use witcheer/microduck-walk-gale with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use witcheer/microduck-walk-gale with Microduck:
sudo robotctl policy load walk witcheer/microduck-walk-gale
- Notebooks
- Google Colab
- Kaggle
walk-gale
Microduck walk trained to keep going into a steady headwind: a constant push on the trunk from the front, ramped from 0 to 3.0 N over 12 s. Task Mjlab-Velocity-Flat-Backlash-Gale-MicroDuck, warm-started from walk-flat v2 at 7,000 iterations and trained to 10,000 with 4,096 envs in 57 min on one RTX 5090. In the proof, 11 of 15 tries stayed up and walked forward at 3.0 N against 0 of 15 for the walk it started from. It stays up by changing its steps, not by leaning. Trained in simulation only: the wind is a force on the body, not aerodynamics, and the policy never observes it. 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-gale
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
Trained in simulation only. Not yet tested on a real Microduck.
Training
- Task
Mjlab-Velocity-Flat-Backlash-Gale-MicroDuck(our modulewitcheer_velocity_gale_env_cfg.py, registered with one import line in the maker'stasks/__init__.py; that local change is why the manifest saysdirty: true). It is the backlash walk with a forward command only (vx 0.15 to 0.30 m/s), the usual shoves, plus a wind. - The wind is a constant force on the trunk at the centre of mass, pointing against the direction the duck faces. It ramps linearly over 12 s and is then held. During training the peak is drawn per episode, uniformly from 1.0 to 4.0 N. The duck weighs about 7.8 N, so the 3.0 N test peak is about 38% of its weight. The policy does not observe the wind: observation and action sizes are unchanged (61 and 14).
- Warm start from walk-flat v2 (iteration 7,000), trained to iteration 10,000 with 4,096 environments: 57 minutes on one RTX 5090 (1.16 s per iteration), 2026-10-29.
Proof takes (frozen rules, written before training)
- Condition A, the headline: wind from 0 to 3.0 N over 12 s, then held, 14 s takes, no shoves, 15 takes per policy. A take counts when the duck never falls (no reset, trunk tilt at most 60 degrees at every step), stays at standing height (median trunk height at least 90% of the 119.7 mm stand, at most 10% of steps under 80%), and ends at least 0.25 m further forward than it started.
- This policy: 11 of 15. The walk it started from: 0 of 15. One-sided Fisher exact p = 2.5e-5.
- The starting walk fell in all 15 takes, at a median wind of 2.42 N.
- This policy: 13 of 15 did not fall. 2 fell (at 10.1 s and 13.0 s). 2 more stayed up but ended under the height floor (median trunk 110.5 mm and 109.3 mm). Median forward progress +0.81 m against +0.24 m for the starting walk.
- How it holds on: median lean +0.5 degrees (starting walk -1.7 degrees). It does not lean into the wind; it changes its steps.
- Condition B, reported only: the same wind plus random shoves, 10 takes each. 4 of 10 against 0 of 10 (one-sided p = 0.043).
- Condition C, no-loss check: the stock walk with shoves and no wind, 10 takes each. Held 8 of 10 against 5 of 10 (two-sided p = 0.35): no loss, and too few takes to call it a gain.
Not tested
- Any real robot.
- Real air: the wind is a force on the body, not aerodynamics.
- Wind from the side or from behind, gusts, or peaks above 3.0 N in the proof.
Sibling policies from the same sim-only ladder live under witcheer/microduck-*, with every level's run log in the dataset witcheer/microduck-skill-tree.
- Downloads last month
- 15