← Back to archive

Repo of the Day

pollen-robotics/microduck

Published: Oct 21, 2026

Open repository ↗

A Tiny biped duck robot 🦆

Summary

Microduck is the onboard software for a tiny biped robot (~25 cm, 800 g), written in Rust and meant to run on a Rockchip RK3566. It drives 15 servos from neural-network policies at 50 Hz and ships with the daemons, update machinery, and user tooling needed to operate one. The policies themselves are trained in a sibling repo, microduck_rl, using MuJoCo and PPO, then exported to ONNX and loaded here.

What it is useful for

Microduck is a worked example of running sim2real reinforcement learning on a small, resource-constrained Linux board, with the production policy code, control loop, and I/O all living in the same workspace. The architecture is deliberately split: robotd owns the control loop and motor bus, updaterd installs signed releases and rolls back when post-update health checks fail, configd manages Wi-Fi and identity, padd reads a Bluetooth gamepad, btd exposes a Bluetooth control path, mediad streams the camera over WebRTC, and tofd serves the depth sensor. Everything talks over one JSON-RPC contract on Unix sockets, so the phone app, the console, the gamepad, and user scripts all send the same calls.

It is also a reference for robot software that prioritises recovery over features: updates are verified, health-gated, and reversible, and detachable wheels load a separate "roller mode" policy. Engineers studying daemon-based real-time control, OTA pipelines, or ROS-free Linux robotics stacks will find concrete patterns here without the abstraction layer of a framework.

How engineers can use it

Without hardware, scripts/duck-sim runs the real daemons against a MuJoCo body in a window, or as four networked instances for multi-robot work. With a board, docs/robot/install-dev.md walks through turning a blank Rockchip into a robot that accepts branch builds, and docs/robot/dev-push.md describes building locally and installing over SSH in roughly a minute. Day-to-day control uses the robotctl command, documented in docs/robot/cheatsheet.md; duckctl drives the same robot over Bluetooth from a laptop. The system-level write-up is docs/design/architecture.md, conventions live in CONTRIBUTING.md, and docs/README.md is the full index. The README does not list prerequisites, build commands, or supported host OSes, so developers should treat that docs index as the starting point for platform-specific setup.