Instructions to use reachjalil/microduck-nimble-walk with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use reachjalil/microduck-nimble-walk 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 reachjalil/microduck-nimble-walk
- Notebooks
- Google Colab
- Kaggle
Nimble walk (NottyDuck)
A perpetual walking policy for the MicroDuck (61-D observation, 14 actions, 50 Hz). It follows slow, backward and turning velocity commands that the stock alpha walker ignores in simulation, and it is the default walker of the NottyDuck browser game.
Simulation only. It has never run on a physical MicroDuck.
The observation normalizer is baked into policy.onnx; feed raw
observations. Input obs [1, 61], output actions [1, 14], action
scale 1.0, no action filter.
Command contract
twist=[vx, vy, wz]in m/s and rad/s. Trained ranges: vx ±0.4, vy ±0.3, wz ±1.0. Sideways tracking is weak; NottyDuck sends vy = 0 and caps forward at 0.25 m/s, backward at 0.2 m/s and turning at 1.0 rad/s.head_pose(4) andbody_pose(6) follow the shared 61-D layout.
Training
- Task
Mjlab-VelocityTracking-Flat-MicroDuckfrom the NottyDuck repository: the MicroDuck velocity recipe plus a penalty on the time-averaged velocity error, ramped in from iteration 600. - 1024 environments, seed 73, one NVIDIA L4 on RunPod, 2026-10-16.
- Checkpoint 1800 of a 3000-iteration run (
model_1800.pt, SHA-256602844506a2672160ebdcce364e9161b849fbb88df0f0a6ba7bcf6a377fabc77), exported with the repository'sscripts/export.py. Training source snapshot SHA-256682103d61b89b40b57de4c39b26216f0dbf5b5e04ca98ec9e970716d946dc590. - Chosen by scoring every 100th checkpoint: later checkpoints stop answering slow, backward and gentle-turn commands, and earlier ones turn slowly when idle.
Measured in simulation (2026-10-16)
Steady speed divided by the command, native MuJoCo, nominal physics:
| Command | Browser position PD | BAM XL330 servo model |
|---|---|---|
| Forward 0.15 m/s | 0.64 | 0.52 |
| Forward 0.25 m/s | 0.61 | 0.52 |
| Forward 0.40 m/s | 0.60 | 0.52 |
| Backward 0.20 m/s | 0.61 | 0.49 |
| Turn 0.5 rad/s | 1.22 | 0.96 |
| Turn 1.0 rad/s | 1.22 | 1.02 |
| Shoves survived (0.2–0.4 N·s while walking) | 12 of 12 | 12 of 12 |
In the NottyDuck browser game (headless Chrome), against the stock alpha walker:
| Test | Nimble walk | Alpha walk |
|---|---|---|
| Forward key (0.25 m/s command) | 0.144 m/s | 0.114 m/s |
| Forward at 0.40 m/s command | 0.242 m/s | 0.180 m/s |
| Turn key (1.0 rad/s command) | 1.09 rad/s | 0.50 rad/s |
| Backward key (0.20 m/s command) | 0.076 m/s back | stands still |
| Slow walk (0.12 m/s command) | 0.065 m/s | stands still |
| Idle drift | 0.03 rad/s | 0.006 rad/s |
| Falls in these tests | none | none |
Known limitations
- Turns overshoot the command by about 20% under the browser's actuators.
- A slight idle turn of about 0.03 rad/s in the browser game.
- No hardware validation; nominal-physics measurements only.