The 61-dimensional observation contract
Last updated
All of Microduck’s policies share a 61-dimensional observation contract — walking, fall recovery and the forward roll all take exactly the same input.
What it buys
Because the format is shared, any policy can take over the robot at any moment. The runtime does no state translation and no reshuffling; switching is loading a different .onnx.
Two consequences follow directly:
Fall recovery does not wait for a handover. The recovery policy can step in the instant the robot goes down; it need not wait for the walking policy to yield.
Policies can be shared like models. Someone trains a better walking policy, you download their .onnx and swap it in — because the observation format is agreed. This is the direction the product took after Hugging Face acquired Pollen Robotics.
Rehearsing the switch in simulation
uv run scripts/infer_policy.py --walking walk.onnx --standing stand.onnx \
--sitstand sitstand.onnx --roulade roulade.onnx --new-cmd-obs
This script rehearses exactly the hot-swap the runtime performs.
The constraint
A shared contract cannot be changed casually. Adding a new observation — a ball’s position, a camera feature — means retraining every policy. That is part of why the ball kicker is ball-blind.