A tiny biped robot that moves using reinforcement learning policies.
Get yours here · Cheat sheet · Training the policies · How it works · Contributing
This repo is the duck's brain. About 25 cm and 800 g of robot, run by a handful of daemons on a Rockchip RK3566: a 50 Hz control loop driving fifteen servos from neural policies, the radios and the camera, and the update machinery that gets new software onto a robot without bricking it.
Everything you need to run a Microduck is here. If you want one, get yours here.
The policies it runs are trained next door, in microduck_rl — MuJoCo and PPO, the sim2real recipe, and the export to ONNX that this repo loads.
walk.MP4 |
roller_cut.mp4 |
| It walks. Pick up a gamepad and drive. | It rolls. Put wheels on, hold D-pad up, and it loads the other brain. |
grasp.MP4 |
standup.MP4 |
| It picks things up. Beak to the floor, one button. | It gets back up. Knock it over and it stands itself up. |
It also sits, kicks a ball, rolls forward on command, and quacks in a voice that is its own.
| Cheat sheet | Every robotctl command: drive, configure, voice, chorale, theremin, wifi, updates, logs. Start here. |
| Gamepad | The full button mapping, and pairing a pad — once per pad, plus what to do when it will not bond. |
duckctl |
The robot from a laptop over Bluetooth, with no network and no ssh. |
| Updates | Install, roll back, pin. Every update is verified, health-gated and reversible. |
| microduck_rl | Where the policies come from: MuJoCo, PPO, domain randomisation, and the ONNX export this repo loads. |
| How it works | The whole system on one page — the daemons, the bus, how an update reaches a robot — then a page per part. |
| Set up a dev board | From a blank board to a robot that takes branch builds. |
| Dev cheat sheet | Branch builds, release candidates, driving from a laptop, and the restart traps after an update. |
| Push your branch | Build on your machine, install over ssh, about a minute. |
| CONTRIBUTING.md | Building, testing, layout, conventions, releasing. |
| Docs index | Everything, including the design pages and the open problems. |
Rust, no framework, one workspace. robotd owns the control loop and the motor bus; updaterd
installs signed releases and rolls them back when a robot comes up unhealthy; configd owns wifi
and identity; btd is the Bluetooth path a phone uses; padd reads the gamepad; mediad streams
the camera over WebRTC; tofd serves the depth sensor. They talk over one JSON-RPC contract on
Unix sockets, and every client — the app, the console, the gamepad, your script — sends exactly the
same calls.
The interesting decisions are written down: docs/design/ is why things are the
way they are, and docs/project/ is what has gone wrong and what would close it.
No duck was harmed in the making of this robot. Several were consulted.
