microduck
pollen-robotics/microduck加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

想象一个普通的周六下午。你在桌面上放着一只不到 25 厘米高、体重 780 克的机器人——它有 15 个电机、两只可开合的鸭嘴、一个小摄像头、一块 8×8 的 ToF 深度传感器、两个 IMU,还有一个可以发出独特叫声的扬声器。它看起来像一只桌面上的橡皮鸭。
但当你插上手柄,它站起来了。
它迈出两步、转身、蹲下去用嘴尖够地面上的东西、被推倒后自己爬起来;给它装上轮子,它会切换成"轮滑模式"用另一套大脑跑起来;你甚至可以让它踢球、坐下、用它自己合成的声音唱歌。
这只鸭子叫 Microduck,来自法国的 Pollen Robotics。而你刚才看到的所有动作,没有一个字节是用传统逆运动学写出来的——它们全部由强化学习训练出的神经网络策略驱动,而这个策略、这个机器人、以及把它从仿真搬到真机的整套工具链,全部开源。
先把背景补齐。Pollen Robotics 是一家法国机器人公司,过去做的是 Reachy 2 这类桌面级别的移动机械臂和配套的移动应用生态(Reachy Mini)。他们的产品逻辑一直是"让更多人能在桌上摆弄一台真正的机器人",而不是把机器人送进工厂。
Reachy Mini 的设计重心是交互:它会看、会听、会说,用头和身体做表达。Microduck 明确选了另一条路——动作(Action)。官方博客里有一句话点得很清楚:"Microduck 从实体 AI 的另一侧出发:动作。"
它要回答的问题是:你怎么教会一台机器人走路? 具体来说,是怎么在物理仿真里训练一个行为、把它迁移到真机、看出哪里出了问题、然后再试一次。这正是"具身智能"(Embodied AI)最核心、也最难的闭环。
为什么要做得这么小(25cm、780g)?这是工程上的必然选择:小型双足机器人的惯量小、跌倒代价低,可以在桌面上反复试错;同时小尺寸又让舵机功率、电池续航、算力都被压到极紧——板载只有 1GB 内存和 RK3566 这种没有 GPU 的 ARM 主控。这套约束反而成就了它的教学价值:没有地方可以藏拙,所有决策都被逼到明面上。
如果非要把强化学习做机器人的过程比作现实生活,最贴切的是驾校。
传统方式写机器人走路,就像你手把手教一个学员踩离合、换挡、看后视镜——每一步都是人写死的规则。规则一多,遇到没覆盖的情况就摔。
Microduck 的做法更像让学员在模拟器里自己练。你在 MuJoCo 这套物理仿真里建一个"鸭子模拟体",设定奖励(走稳了给分、摔倒了扣分),让 PPO 算法自己练几百万步,练出一个"走路的手感"。练好之后,把这个策略导出成 ONNX,扔到真机上跑。
难点在于:仿真里的鸭子永远比真鸭子听话。所以项目在训练里做了大量域随机化(Domain Randomization)——随机化电池电压、负载下的电压跌落、指令延迟、摩擦系数,还专门给 14 个舵机关节各加了 ±1° 的**齿轮回差(backlash)**模型,甚至用了一个叫 BAM M6 的电机物理模型(电压控制律、反电动势、库仑摩擦、Stribeck 摩擦)来替代理想 PD 控制器。
这就像驾校模拟器会故意让学员开的车方向盘有点旷、离合有点涩——不是为了折磨人,而是为了让学员毕业后真上车时不会被这些细节晃一下。
Microduck 的开源仓库是机器人的大脑,不是外形。核心代码跑在一块瑞芯微 RK3566 上,用 Rust 编写,一个 Cargo 工作区,26 个 crate,没有任何框架。
整个系统由一批"小守护进程"(daemon)分工协作:
| 组件 | 职责 |
|---|---|
robotd | 控制中枢:50 Hz 控制循环、舵机总线、策略推理、安全钳制、语音合成 |
updaterd | OTA 更新引擎:签名校验、原子替换、健康门控、失败自动回滚 |
configd | Wi-Fi、机器人身份、蓝牙配对 PIN、重启管理 |
btd | 蓝牙入口,手机 App 通过它和机器人对话 |
padd | 手柄输入 → 运动意图(普通 socket 客户端,无特权) |
mediad | 摄像头、麦克风、WebRTC 推流、远程网关 |
tofd | 头部 8×8 ToF 深度传感器服务 |
nfcd | NFC 读卡器,碰一下标签即可绑定手柄 |
duckctl | 桌面客户端:笔记本通过蓝牙操作机器人,无需网络和 ssh |
它们之间通过 Unix socket 上的 JSON-RPC 2.0(一行一个对象)通信,并且所有客户端——手机 App、终端、手柄、你的脚本——发送的是完全相同的调用。这种"单一契约"的设计在开源机器人项目里并不常见,绝大多数项目是 App 一个协议、CLI 另一个协议。
策略热切换是这套架构的另一亮点。观测空间被统一成 61 维(48 维本体感知 + 3 维 twist + 4 维 head_pose + 6 维 body_pose),使得行走、起身、翻滚、轮滑等策略可以在任意时刻互相接管,不需要重启任何进程。仓库里的 scripts/duck-sim 更狠:它能让真实的 daemon 跑在一个 MuJoCo 里的虚拟鸭身上——一个鸭子开一个窗口,或者四只鸭子各自跑在容器里像登录进不同的机器。
更新机制是另一个值得单独说的工程细节。项目做了"健康门控"(health gate)更新:签名验证 → 原子替换 → 健康检查 → 不健康自动回滚。同时保留一个 "golden" 兜底镜像,即使新版本连 daemon 都起不来也能退回已知良好状态。updater/tests/apply.rs 里用真实引擎注入故障来测试这些路径,而不是 mock。
没有实体机器人,一切从零开始。
cargo zigbuild 或 Docker 交叉编译到 aarch64。scripts/setup-board.sh 从空白板子开始配置网络、ONNX Runtime(≥1.23,实装 1.28.0)、Rockchip NPU Runtime、预编译 GStreamer 插件、策略权重。uv + MuJoCo Warp,4096 并行环境跑一个可用步态约 1-2 小时;无 GPU 可用 Hugging Face Jobs 跑训练。scripts/duck-sim 可以在 MuJoCo 里仿真整只鸭子,包括全部 daemon;microduck_rl 里的 scripts/infer_policy.py 可以用键盘驱动导出的 ONNX 策略,纯 CPU 就能玩。命令行入口非常清晰:robotctl version / health / monitor / configure / update。robotctl monitor 是最惊艳的一个——它不仅输出关节表、IMU 投影重力、跌倒判定、实际循环频率("unhealthy: control loop at 43.9 Hz"),还在终端右侧用实测关节角实时画出站立的鸭子,ToF 数据也叠进同一幅画面。
docs/design/ 下有大量"为什么这么写"的设计决策,docs/project/ 还有专门记录"什么出了问题"的复盘文档——这是极好的工程文化,但 600+ 文件、26 个 crate 对新人并不友好。文档甚至专门写了一条元规则:"当两份文档互相矛盾时,不拥有该机制的那份文档才是错的"。docs/project/ 里记录了这类问题)。Microduck 的意义不在于它能踢多大的球,而在于它把**"训练 → 部署 → 观察 → 修正"这条闭环的成本压到了一个普通开发者的信用卡范围内**。
回看近两年的开源具身智能浪潮:Unitree 的 Go 系列把四足的价格打下来,LeRobot 让 Hugging Face 生态的机器人数据集标准化,而 Microduck 补上的是桌面级双足 + 完整 RL 训练栈 + sim2real 全流程这一格。它的策略权重直接发布在 Hugging Face Hub(pollen-robotics/microduck-policies),用户可以下载、retrain、再 publish 回社区——"每一个行为都是一份可以重训的策略"。
它甚至贡献回了 PyTorch RL 生态:官方 PyTorch RL 文档里有一整个 MicroDuck 教程章节,主题是"任务即数据、奖励即注册表、一个策略通吃所有任务"。这对一个机器人公司来说,是相当少见的开源回馈姿态。
从组织行为看,13378 star 在项目发布仅三个月后达成,且项目主页同时提供硬件购买、软件开源、仿真器和 RL 训练栈——这构成了一个完整的"物理 AI 开发者入口"。可以预期,随着桌面机器人这一品类继续升温,这类"低价 + 全栈开源 + 自带教学"的组合会成为 AI 爱好者进入具身智能领域的主要入口。

项目仓库中的像素风鸭头形象,位于 spaces/vetbook/ 目录。
Microduck 用 780 克的重量、26 个 Rust crate 和 942 个通过的测试,回答了具身智能领域里一个具体而困难的问题:如何让一个普通人也能训出自己机器人的行为。
它的架构克制(无框架、单工作区、单一 JSON-RPC 契约)、它的更新机制严谨(签名 + 原子替换 + 健康门控 + 回滚)、它的训练链路完整(MuJoCo Warp + PPO + 域随机化 + 齿轮回差 + ONNX 导出 + 61 维统一观测),这些叠加起来构成了 2026 年开源具身智能领域最有参考价值的一个工程样本。
如果你有台 Jetson 或 4090,又对"怎么让机器人在物理世界里动起来"有好奇心,Microduck 的 microduck_rl 训练栈是目前最值得一读的公开代码。