Instructions to use witcheer/microduck-hop with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use witcheer/microduck-hop with Microduck:
# Replace SLOT with the slot specified in the model card (walk, stand, sitstand, ground_pick, kick_left, kick_right, roulade). sudo robotctl policy load SLOT witcheer/microduck-hop
- Notebooks
- Google Colab
- Kaggle
hop
Microduck hopping in place: the whole robot leaves the floor (no body touching it, trunk above standing height), lands upright and goes again. Task Mjlab-Velocity-Flat-Backlash-Hop2-MicroDuck, warm-started from walk-flat v2 at 7,000 iterations, picked at 9,750 (about 60 min at 4096 envs on one RTX 5090). 14 of 15 six-second takes succeed in simulation, against 0 of 15 for the walk it started from. Every take uses the simulator's full actuator torque (0.641 N m), above the real XL330 stall (0.60 N m at 6 V), so a real Microduck cannot do this as trained. Trained in simulation only. Not yet tested on a real Microduck.
A episodic policy for the microduck (61-D observation, 14 actions, 50 Hz). Runs 6.0 s and returns itself to a standing pose.
Run it on a robot
sudo robotctl policy add hop witcheer/microduck-hop
robotctl robot do hop
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-Hop2-MicroDuck(our modulewitcheer_velocity_hop2_env_cfg.py, registered with one import line in the maker'stasks/__init__.py; that local change is why the card says the checkout had uncommitted changes). It is the backlash walk environment with a zero walk command, no shoves and 8 s episodes. Observation and action sizes are unchanged (61 and 14). - What the reward pays for: a step where no part of the robot touches the floor and the trunk is at least 10 mm above standing height while upright (+12), trunk height above standing while a foot is off the floor (+6), upward trunk speed (+6). It costs every non-foot body part on the floor (-5 per part per step) and hard landings (-0.1 per newton above 20 N). Nothing in it describes a jump; the hop emerged.
- Why the contact rule covers the whole body: a first version (rewarding both soles off the floor) found a shortcut. The duck crouched, rested its head shell on the floor in 96% of steps and kicked both feet up. It scored perfectly on that rule and never left the floor. This version uses a contact sensor over every robot body.
- Warm start from walk-flat v2 (iteration 7,000, action noise raised from 0.19 to 0.6), trained to iteration 10,000 with 4,096 environments and entropy coefficient 0.02: 66 minutes on one RTX 5090 (1.33 s per iteration), 2026-11-05. Checkpoints every 250 iterations.
How this checkpoint was picked (rule fixed before training)
4 takes of every saved checkpoint; most successes, ties broken by median trunk peak, then the earliest. Iteration 9,750 won (4 of 4, median peak 169.2 mm). Every checkpoint from 8,000 on scored 3 or 4 of 4; 7,250 scored 0, 7,500 scored 2, 7,750 scored 1.
Proof takes (frozen rule, written before training)
- 15 new takes of this policy and 15 of the walk it started from, 6 s each, zero command, no shoves. A take succeeds when the duck makes at least 3 flights (no robot body on the floor for at least 80 ms, trunk at least 10 mm above standing), never falls, and ends upright at standing height.
- This policy: 14 of 15. The walk it started from: 0 of 15. One-sided Fisher exact p = 1.0e-7.
- 372 flights over the 15 takes (18 to 30 per take). Longest flight 140 ms. Trunk peak: median 168.8 mm, highest 175.1 mm, against 116.1 mm standing (up to 59.0 mm above). The one failed take fell.
- The starting walk never left the floor (0 flights, trunk peak 116.2 mm median).
Not tested, and why this is simulation only
- Every take reaches the simulator's actuator torque ceiling (0.641 N m). The real XL330 servo stalls at 0.60 N m at 6 V. A real Microduck could not produce these hops as trained.
- One training seed. No real robot. Hops in place only: no forward command, no shoves, flat floor.
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.
License
Apache-2.0, the same licence as Pollen Robotics' microduck and microduck_rl, which this policy was trained against.
- Downloads last month
- 24