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 module witcheer_velocity_hop2_env_cfg.py, registered with one import line in the maker's tasks/__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
Video Preview
loading

Collection including witcheer/microduck-hop