Getting started with Microduck
Last updated
This section follows the order you actually do things in: what to check before touching anything, how to power the joints, how to pair a pad, and what to look at when nothing moves.
Three things worth knowing first
It walks on trained policies, not gait code
Microduck is about 25 cm and 800 g, built around a Rockchip RK3566. A handful of Rust daemons run it, and robotd drives fifteen servos from a 50 Hz control loop fed by neural policies — .onnx files — rather than hand-written gait code.
That one fact redirects every diagnosis:
“The robot will not move” is most often a policy that did not load, not a motor that failed.
The bottom border of robotctl monitor names the .onnx currently loaded. A robot with no policy says so; one whose policy would not load says something else. The state stream’s held cannot tell those apart.
Nothing moves until Start is pressed
The gamepad’s Start button toggles the policy. With it off the robot stands powered and ignores the sticks completely.
This is the single most common “it is broken” misdiagnosis. Powering the joints (robot init) and enabling the policy (Start) are separate steps.
Function is split by daemon
Knowing who owns a symptom saves most of the search:
| Symptom | Owner |
|---|---|
| Motors, gait, safety clamps, fall verdict | robotd |
| Reading the gamepad | padd |
| Pairing a gamepad | configd — bonding needs root, and padd is deliberately unprivileged |
| Wifi, identity, power | configd |
| Camera, WebRTC, the web console | mediad |
| Updates and rollback | updaterd |
| The head’s ToF depth sensor | tofd |
| The BLE path a phone uses | btd |
The reasoning behind each split is in System architecture (Chinese).
Three commands cover most of it
robotctl version # running vs installed, per daemon — always run this first
robotctl health # hardware and software in one report, non-zero when unhealthy
robotctl monitor # requested vs applied, with the reason when they differ
version is first for a specific reason: a daemon still serving old code after an update looks exactly like the fix you just shipped not working.
Starting without hardware
- The online simulator runs in a browser.
scripts/infer_policy.pydrives an exported policy in CPU MuJoCo from the keyboard, no robot needed.
In this section
- What Microduck is
A 25 cm, 800 g open-source biped that walks on reinforcement learning policies. What it does, and how it differs from a robot toy.
- First run
Four steps from a powered board to driving the robot with a gamepad, and what to check when nothing moves.
- Pair a gamepad
Pairing an Xbox or DualSense pad, and what to try in order when it will not bond.
- Gamepad controls
Every button and hold, the three stick modes, and why there is no stop button.
- Setting up a dev board
From a blank board to one that takes branch builds, plus the table that tells you which Bluetooth configuration it needs.