Microduck 是什么?800 克的机器鸭,脑子是 RK3566 上 7 个守护进程,国内复刻整机两千四

Microduck 是什么?800 克的机器鸭,脑子是 RK3566 上 7 个守护进程,国内复刻整机两千四

大厂发人形机器人,参数一年比一年吓人,价格一栏永远写“面议”。Hugging Face 旗下的 Pollen Robotics 反着来:做了一只 25 厘米、800 克的鸭子,两条腿走路,摔倒了能自己爬起来,会踢球、会低头叼东西,叫起来还是它自己那套嗓音。整只鸭子的固件、训练环境、仿真器全在 GitHub 上,主仓 11.8K 星,专门管训练的那个仓库 2.6K 星。

更能说明问题的是国内:有人用飞特舵机把它复刻出来了,10 月 24 日实机跑通了站立、行走、前滚翻之后重新起身。一只开源鸭子,两个月内就有人从 BOM 一路做到会走路,这比星数有意思。

一、它的脑子不是一个程序

鸭子身上是 RK3566——对,就是 Radxa Zero 3W 那颗芯片。15 颗舵机加一块 IMU 挂在同一条 UART 总线上,控制环跑 50 Hz。固件是 Rust,一个 workspace,不用框架,拆成七个守护进程:robotd、configd、updaterd、btd、padd、mediad、tofd。它们之间不是互相调函数,而是每个服务一个 unix socket,JSON-RPC 2.0,一行一个对象。

有三个设计细节,我觉得比“强化学习”三个字值钱:

只有 robotd 碰电机。 客户端发的是意图——走多快、看哪里、站起来——由 robotd 里的安全层决定哪条能执行。系统里没有第二个进程能给电机下命令。

三个进程专门为“robotd 已经死了”准备。 configd、updaterd、btd 不依赖 robotd,也不挂 ML 运行时和媒体栈。官方文档把理由写得很直白:控制环起不来的那只鸭子,正是需要改 WiFi、重新配对、刷固件、回滚的那只。反过来 mediad 和 padd 允许依赖 robotd,因为少个摄像头少个手柄,它还是只能刷机的鸭子。

更新换的是整个目录,不是打补丁。 新版本落在 /opt/robot/daemon/releases/<ver>/,updaterd 验签、把 current 符号链接指过去、重启单元,然后回头问 robotd 要 robot.health。不健康,它自己把旧版本放回去;崩溃循环还有启动计数器兜底。配置和那本“病历”(vetbook.json)都在 releases 外面,所以更新和回滚都抹不掉它们。

还有个细节挺见功力:mediad 一帧原始画面约 1.8 MiB,于是它故意不走 WebRTC 控制通道——控制通道只说“给我来一帧”,画面从别的路取。知道自己带宽多窄,比堆功能难。

Microduck 固件架构:客户端、守护进程、舵机总线与整目录回滚的更新链路
鸭子脑子里的七个守护进程:只有 robotd 碰电机,更新是换目录加健康闸门

二、AI 在这套东西里只是一个文件

步态策略是隔壁 microduck_rl 训出来的:mjlab(MuJoCo Warp)加 PPO,训练频率和机器人控制频率对齐在 50 Hz。4096 个并行环境,一块 CUDA 卡跑 1 到 2 小时,能出一个“能走”的策略。仓库里 13 个任务:走路、摔倒起身、坐站、低头触地、踢一颗 70 毫米 15 克的球、前滚翻、穿轮滑鞋滑行、原地快速旋转,等等。

部署时最聪明的一点是所有策略共享一个 61 维观测契约,运行时可以热切换。走路、起身、翻滚是三个网络,谁接管都行,观测格式不变,导出成 ONNX 丢给 robotd 加载。

另一个细节是背隙版本:每个主任务都有个孪生版本,在 14 个关节上串 ±1° 的齿轮间隙一起训。肯做这个版本,本身就说明他们被实机的舵机间隙咬过。没显卡的人可以加 --hf-jobs,把训练丢到 Hugging Face Jobs 上跑。

所以看下来,AI 只是这堆工程里的一个 ONNX 文件,剩下九成是“怎么让它在真实硬件上别出事”。这一点,跟把模型塞进单片机的路子是一样的——14MB 的 needle 做边缘记忆也是同一个道理:模型不是难点,让它在烂硬件上不出错才是。

三、实话

1 到 2 小时出的是“能用”,不是“走得好看”。 奖励函数调不好,鸭子会一直抖,视频里那种干脆的步子得反复磨。

sim2real 的真坑不是模型,是间隙和打滑。 官方干脆把 ±1° 背隙做成训练变体,这比任何 benchmark 数字都诚实。

钱得算清楚。 国内飞特版 BOM:23 项外购件 2303.88 元,其中 15 颗飞特 HD1901M 舵机占 1425 元,Radxa Zero 3W 309 元,两块自制电路板 200 元;33 项打印件整套 139 元。合计两千四百四十三,不含运费和你的时间。原厂 Dynamixel 舵机版本更贵,别拿“开源等于零成本”骗自己。

这些数字是别人跑出来的,不是我。 实机视频是 10 月 24 日的,复刻仓库自己放的;我手上没有这只鸭子,只做了两件事:读代码、按 BOM 算账。

真要动手,顺序别搞反:先读 docs/design/architecture.md,再看 microduck_rl 里的 CLAUDE.md(他们调奖励的教训都在里面),最后才决定买不买舵机。买之前照 BOM 逐项核一遍,别只看鸭子视频就下单。

这只鸭子最值得学的,不是“强化学习能走路”,而是它把“机器人是一台会坏的设备”当成设计前提:控制环挂了还能改配置,更新失败能自己退回去,配置和病历永远不在被替换的目录里。这个前提搬到你的 OpenWrt 路由器上、搬到我那台 A7Z Agent 主机上,一样成立。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注