microduck-stilts
Eight MicroDuck forward-walking policies specialized to blend-0.50 stilts from 10 cm to 2.0 m. Every row has its own complete silent 10-second video, ONNX deployment graph, and continuation checkpoint.
The root policy.onnx, manifest.json, and replay.mp4 are convenient
aliases for the 10 cm default variant. The height-specific directories
remain the authoritative files for all eight variants.
Stilt hardware gallery
All videos show alternating stilt support for the full horizon without reset or auxiliary body contact. These are simulation experiments, not hardware-validated policies. The 50 cm–2.0 m variants are extreme controller research results, not recommendations for monolithic printed hardware.
The simulation mass law is 12 g + 1 g/cm per stilt. The 10 cm policy was trained at 22 g per stilt; the prototype slicer estimate is about 29 g per stilt. The unchanged actor survived an initial 64-environment, 10-second simulation battery at 29 g, but broader mass-randomized continuation and tethered hardware testing are still required. See the exact mass audit.
Matching geometry and source
Training code, the executed curriculum, and left/right/paired STLs for every
released height are in
Vottivott/microduck-playground
at commit
c5fcc50.
Run one policy
git clone https://github.com/Vottivott/microduck-playground.git
cd microduck-playground
git checkout c5fcc50219fef01ac9931d0079c583ccbb29b689
uv sync
hf download HannesVonEssen/microduck-stilts 25cm/policy.onnx config.json \
--local-dir policies/stilts
MICRODUCK_STILT_HEIGHT_CM=25 MICRODUCK_STILT_BLEND=0.5 \
uv run python scripts/infer_policy.py \
--walking policies/stilts/25cm/policy.onnx \
--new-cmd-obs --lin-vel-x 0.15
Continue training
Each checkpoint.pt preserves the exact released actor and normalizer. Because
the original stilt critic and optimizer snapshots were not retained, it uses a
fresh compatible critic scaffold, empty optimizer moments, 1e-5 learning
rate, and 0.1 exploration standard deviation. It is an actor-exact warm
start, not the original full PPO state.
mkdir -p logs/rsl_rl/stilt_locomotion/release-25cm
cp policies/stilts/25cm/checkpoint.pt \
logs/rsl_rl/stilt_locomotion/release-25cm/model_2800.pt
MICRODUCK_STILT_HEIGHT_CM=25 MICRODUCK_STILT_BLEND=0.5 \
uv run train Mjlab-Stilt-Flat-MicroDuck \
--agent.resume True \
--agent.load-run release-25cm \
--agent.load-checkpoint model_2800.pt \
--agent.max-iterations 100
See TRAINING.md for the full lineage, checkpoint caveat, and
promotion procedure. PyTorch checkpoints use pickle internally; load them only
from a repository and revision you trust.
Runtime contract
- input:
obs, float32[1, 61] - output:
actions, float32[1, 14] - control rate: 50 Hz
- action scale: 1.0 rad around MicroDuck HOME joint pose
- observation normalizer: baked into each ONNX
- command:
twist=[0.15, 0, 0], zero head/body commands - morphology: matching height, blend 0.50, 17 × 22 mm rounded tips
The 3.0 m demonstration is intentionally absent: it was a zero-shot failure of the unchanged 2.0 m policy, not a separately trained model.