walk

Velocity-commanded walking gait for the microduck (twist + head/body pose command), trained 50k iterations with PPO in mjlab.

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 Nbz-Bread/microduck-walk

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

  • task_id: Mjlab-Velocity-Flat-MicroDuck
  • repo: pollen-robotics/microduck_rl
  • branch: develop
  • commit: b02fdea49
  • checkpoint: 49999

Demo

10 s rollout of the final checkpoint in simulation, random velocity commands (replay.mp4).

Performance

Numbers are from the training log: 4096 parallel envs, domain randomization on, 50,000 iterations. They are simulation numbers, not hardware benchmarks. Each column is the average over a 500-iteration window.

Metric iter 1.0-1.5k iter 10.0-10.5k iter 25.0-25.5k final 50.0k
Mean reward 117.4 123.2 127.9 135.9
Mean episode length (steps, cap 1000) 955 971 977 989
Linear velocity error error_vel_xy 0.452 0.418 0.423 0.417
Yaw rate error error_vel_yaw 1.377 0.996 0.912 0.806
Foot slip velocity 0.028 0.020 0.020 0.019
Falls per step (fell_over) 0.40 0.25 0.20 0.10
Timeouts per step (time_out) 3.92 4.01 4.03 4.10

Fall share = fell_over / (fell_over + time_out), summed over each window; an episode that does not fall runs to the 1000-step limit. It dropped from 74% in the first 500 iterations to 9.8% by iteration 2.5k, 4.4% by 20k and 2.3% over the last 500 iterations.

Fall share over training

Notes on the metrics:

  • error_vel_xy and error_vel_yaw are mjlab's velocity-command tracking errors (body-frame m/s and rad/s, accumulated per step and divided by the longest command duration), so read them as approximate mean errors. Linear tracking error was flat after the first ~1.5k iterations; yaw error kept improving.
  • fell_over and time_out are counts of episode endings per env step across the 4096 envs, which is why they are not fractions on their own.
  • Not measured here: a per-command breakdown (which velocities or turns cause the remaining falls) and real-robot performance.
Downloads last month
7
Video Preview
loading

Model tree for Nbz-Bread/microduck-walk

Finetunes
1 model