standup

v2: the v1 get-up policy fine-tuned with +-1 deg of gear play in every servo (Mjlab-StandUp-Flat-Backlash-MicroDuck), simulation only: v1's 25,000 iterations plus 3,000 with the slop, 4096 envs, 63 min on one RTX 5090. With the slop it stood from face down (3 of 3, still leaning forward about 35 deg) and from sitting (3 of 3) and held a standing start (3 of 3), the same as v1 in the same sim; from flat on its back it still freezes half-rolled (0 of 3). 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 standup witcheer/microduck-standup
robotctl robot do standup

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-10-02)

Proof takes with headless_play in Mjlab-StandUp-Flat-Backlash-MicroDuck (±1° of gear play in every servo), 12 s each, spawn pose forced, trunk height and body-frame gravity sampled every 0.1 s. A get-up counts when the trunk reaches 105 mm, holds it for 1 s and is still there at the end of the take.

  • From face down: 3 of 3 for v2 and 3 of 3 for v1 in the same gear-play sim. Both end standing at 108 to 118 mm but leaning forward 31 to 37°, the same hunch v1 always had.
  • From sitting: 3 of 3 for both, standing by 0.3 s.
  • From standing: 3 of 3 for both, no falls over the 12 s.
  • From flat on its back: 0 of 3 for both. It rolls half way and stays there, trunk at 59 to 60 mm.
  • v1 in its own sim without gear play: 2 of 2 face down, 2 of 2 sitting, 2 of 2 standing, 0 of 2 on its back.
  • Training: 3,000 iterations on top of v1's 25,000, 63 min at 1.28 s/it, 4096 envs. Mean reward was back above 33 by iteration 25,007 and stayed between 30.4 and 39.2 per iteration from 25,100 to the end (35.07 at 28,000): flat.

So ±1° of gear play costs this get-up nothing in simulation, and the extra 3,000 iterations with it made no difference I can measure. It still does not get up from its back. The training checkout had local changes (other tasks' patches and a fork task registration); the backlash StandUp task itself is unmodified at the commit above.

Take logs, reward curve and the queue item: witcheer/microduck-skill-tree, folder level-02b-standup-gear-play. Trained in simulation only. Not yet tested on a real Microduck.

v1

The first release: 25,000 iterations on Mjlab-StandUp-Flat-MicroDuck, no gear play (407 min on one RTX 5090). Still installable:

sudo robotctl policy add standup witcheer/microduck-standup@v1
Downloads last month
37
Video Preview
loading

Collection including witcheer/microduck-standup