今天 GitHub 日榜上有一只鸭子。从 GitHub API 读回来:pollen-robotics/microduck 10,672★、1,384 个 fork、57 个未关 issue,主语言 Rust,Apache-2.0,建仓 2026 年 7 月 29 日,最近一次推送就在今天上午 09:37(UTC)。仓库 469 个文件、约 29 MB,没有 SDK 里的那种空壳目录——打开就是七个守护进程的完整源码。
做它的是 Pollen Robotics,Hugging Face 在波尔多的机器人团队。Microduck 是他们第二台消费级机器人,上一台是桌面上的 Reachy Mini。所以这不是某个爱好者周末拼出来的开源项目,而是一家有量产经验的公司,把一台在售机器人的运行时整个放在了 GitHub 上。
一句话定位:399 美元买的是"能改",不是"能卖萌"
- 它是一台 25 cm 高、800 g 以下的双足机器人,14 cm 宽,15 个自由度分布在腿、头和脖子上。官方产品页把它叫"开箱即玩,也随时可以重新训练"。
- 硬件不算玩具配置:Rockchip RK3566 加 AI 加速器、1 GB 内存、32 GB 存储,前置摄像头、两个 IMU(身体一个、头一个)、一个 8×8 的 ToF 深度矩阵、会抓东西的喙、麦克风和扬声器,每台还会生成自己的嗓音,外加两个 NFC 天线、Wi-Fi 和蓝牙。
- 电池是一块可拆的 NP-F550,2600 mAh,官方给的续航是"大约一小时,看怎么用"。这个数字很关键,后面判断部分会用到。
- 价格 399 美元,官方标注为预售优惠价,税前、不含运费,8 月 27 日开放预订,目标是在 2026 年圣诞前发出第一批,首发只覆盖北美和欧洲。配件三档:充电器包 39 美元(双充 + 两块电池)、开发包 119 美元(3 个备用电机、5 根电机线、2 块电池、双充、10 张 NFC 标签、Hugging Face 额度、螺丝刀和螺丝)、玩配件包 39 美元(激光笔、NFC 拍立得、两副轮滑、球、10 张标签)。
- “开源"的边界是官方自己划的,而且划得很干脆。press kit 里有一句原话:开源声明只覆盖软件栈,机械与电子设计文件不在其中,请不要把这台机器人描述成开源硬件。我在仓库里核对了一遍:文件树里没有任何 STEP、STL、KiCad 或 BOM;隔壁训练仓库里确实有用于仿真的网格,但那是 CC BY-NC-SA 4.0,署名、非商业、相同方式共享。
这条要先说清楚,因为它决定了这台机器人对两类人的价值完全不同:想改"它怎么动、怎么想"的人,能拿到全部;想拿图纸做二次开发、小批量复制的人,拿不到。
核心一:七个动作落在七个策略槽上,每条策略都有硬契约
官方卖点之一是"开箱七个训练好的动作”。产品页点名的是:走路、坐下与站起、踢球、低头用喙把地上的东西叼起来、穿上轮滑鞋滑行、自己从摔倒中爬起来。
往代码里看,策略槽也正好是七个:walk、stand、sitstand、ground_pick、kick_left、kick_right、roulade。两边不必一一对应——槽是软件位置,动作是演示效果——但槽的机制值得单独讲,因为它体现了这个项目的工程口味。
- 槽写在
/etc/robot/robotd.toml里,所以重启不丢、更新也不丢:一次发布换的是二进制和它自带的策略,不会覆盖你那一行指向别处的配置。 - 每个模型都有硬契约:
obs[1,61] -> actions[1,14],控制频率 50 Hz,舵机型号 xl330,硬件版本 1。文件在机器人还跑着旧策略的时候就被打开检查,不满足就拒,旧策略继续跑——试一条新步态不会让你把能走的弄丢。 - 加载失败不牵连整机:如果文件到下次开机时已经不在了,损失的是那个槽,
robotctl health会报 degraded 并点名文件,policy reset <slot>清掉即可。反过来,官方策略加载失败算 unhealthy,那是发布坏了,由更新器回滚。 - 策略分三类:
episodic跑固定时长后自己回到安全姿态;perpetual一直跑,是步态;scripted也是有限时长,但允许守护进程中途改命令。只有"常量命令的 episodic"能当通用一次性技能;需要按相位喂命令的地面拾取、坐站,必须待在守护进程专门驱动的槽里。 - 社区发布一条新技能是四步,不用等官方发版:把
.onnx传到pollen-robotics/microduck-policies→ 在manifest.json里加一行{"file": "...", "kind": "episodic", "duration_s": 4.0}→ 打一个新 tag → 在机器人上robotctl policy update。官方策略集是 schema 2、十个文件的规模,新的一条只要这三个字段就能被robot do和手柄按键叫到。 - 手柄有六个键可绑:
a/b/x/y/lb/rb,X 和 Y 出厂是空的,官方建议留给新技能,X 还支持按住连发,适合前滚翻那种连续技能。Start 固定负责站起来和切换策略,长按 Select 切力矩并关机——“能停机器人的那个键"被故意设成不可改,也不进配置。
这套设计的味道很明确:把"能不能动"和"动了会不会回不来"分开。你可以随便试策略,但停止、回滚、恢复这几条路,不交给配置文件和社区模型。
核心二:七个守护进程,只有一个能碰电机
整台机器人是 Rust 写的,没有框架,一个 workspace,七个守护进程跑在同一块板子上,彼此用 Unix socket 上的 JSON-RPC 2.0 通信,一行一个对象。App、手柄、控制台、你自己的脚本,发的都是同一套调用。
| 守护进程 | 管什么 | 关键细节 |
|---|---|---|
robotd | 控制循环与电机总线 | 50 Hz 循环独占 15 个舵机与 IMU 共享的那条串口;客户端只能发意图,安全层决定哪些能执行 |
updaterd | 更新 | 装签名发布,起不健康就回滚,支持钉住版本;仓库里带三个发布公钥 |
configd | 网络与身份 | Wi-Fi、机器人名字、手柄配对、电源、指示灯、日志 |
btd | 蓝牙 | 手机走的那条路,把 API 的一个子集转发到对应的 socket |
padd | 手柄 | 读手柄,发出和 App 一样的意图;另有一个走 UDP 的 netpadd |
mediad | 摄像头 | 通过 WebRTC 推 H.264,也能走 WebSocket 单向推帧 |
tofd | 深度 | 只发布头部那块 8×8 的 ToF 矩阵,不听任何人的命令 |
robotd是系统里唯一碰机器人的进程。别的进程不能命令电机,只能描述"我想让它往前 0.15 m/s”;能不能执行、执行到什么程度,由robotd里的安全层决定。这一层隔离,比"大家都能发 PWM"的玩具架构高一个量级。configd、updaterd、btd三个故意不依赖robotd。架构文档写得很直白:控制循环起不来的机器人,恰恰是最需要改配置、更新、回滚的那台。所以恢复路径被单独拆出去,不跟主循环共生。- 传输层不拥有状态。
btd、padd、mediad都是把同一套调用换一种方式送进来,自己不存机器人的状态;tofd更是只发布、不响应。这种"谁能改状态"分得清的设计,出了问题时能少猜很多。 - 更新是签名 + 健康门 + 可回滚。
updaterd从 GitHub release 取包,验签,换目录,重启,再问robotd的健康状态;不健康就退回上一个版本。开发路径也留了:scripts/dev-push.sh大约一分钟能把本机编的二进制推上机器人。
核心三:模拟器跑的是同一套守护进程,不是演示动画
这一块是我认为整篇文章里最值得抄的部分。很多机器人项目的"模拟"是另写一套简化逻辑,真机一套、仿真一套,两边的 bug 互相看不见。Microduck 的做法是:让真正的守护进程以为自己在跟一台机器人说话。
robotd --sim host:port用duck_control::sim::RemoteIo顶替舵机总线。每个 tick,关节位置、速度、IMU 从 TCP 那头进来,策略的目标值再发回去。上面那一整层——控制循环、策略、安全、跌倒检测、运动学、里程计、IPC 接口——一行不改,而且分辨不出区别。tofd --sim从同一个模拟器拿 8×8 深度帧,mediad --sim-camera拿渲染出来的头部画面,还刻意按真机那样转了四分之一圈。configd和updaterd也照常跑,所以模拟出来的鸭子有序列号、有名字、能用一个 Hugging Face 账号从外网访问到。- 两个入口,对应两类工作:
scripts/duck-sim是"普通进程 + pidfile",秒级启动,适合调控制循环、策略、IPC 和客户端;scripts/duck-sim boot 4会在四个systemd-nspawn容器里各起一只,用真实的 unit 文件,每只一个 machine-id、一个嗓音、一个 socket,中间还有duck-ether互通,适合调 systemd、更新器、供给和多机通信。文档里提到,模拟器抓到过两个 bug,都是"守护进程的用户不存在,unit 根本没起来"——这一类up模式完全看不见。 - 它明确承认自己测不到什么:Dynamixel 总线、BLE 射频、摄像头 ISP、NPU、硬件编码器都不在模型里,那些地方的 bug 只能在真机上暴露。这句话能写进文档,比"仿真即真机"的宣传可信得多。
下面这些命令都是文档里的原样,不买机器人也能跑:
| |
几个容易踩的点:模拟器需要隔壁 microduck_rl 的 venv(它提供 libonnxruntime,笔记本自己通常没有),路径用 DUCK_SIM_RL 指过去;macOS 上要 brew install gstreamer libnice-gstreamer,少了第二个,鸭子照样起来,但浏览器一要视频就失败;socket 在 ~/.cache/duck-sim/duck-a.sock,MuJoCo 的身体在 TCP 7801 端口。
核心四:训练栈在隔壁仓库,1-2 小时能训出一条能走的步态
microduck_rl 是另一半,目前 2,593★,Apache-2.0(3D 网格除外,见上)。它不提供运行时,提供的是"这些策略是怎么来的":
- 训练环境建在 mjlab(MuJoCo Warp)上,算法是 PPO,策略以 50 Hz 训练,导出 ONNX 给机器人加载。仓库里写进了完整的 sim2real 配方:BAM 执行器物理模型、域随机化、背隙模拟,以及那些让训练最终跑通的奖励设计教训。
- 算力门槛写得清楚:需要 NVIDIA CUDA 显卡。官方给的量级是 4096 个并行环境、约 1-2 小时训出一条能用的步态。没有卡就加
--hf-jobs,把训练丢到 Hugging Face Jobs 上跑。 - 任务注册表是一张能直接读的表:速度跟踪(平地/崎岖)、走+摔倒恢复、从趴着/躺着/坐着站起来、坐站切换、低头触地拾取、踢一个 70 mm/15 g 的球(策略本身看不见球)、前滚翻、穿轮滑鞋的速度跟踪、对称滑行、轮滑下坡、轮滑站起。想验证"这套栈真能训出新东西",挑一个任务跑一遍比读十页文档快。
- 一条命令到部署:
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096训练,scripts/export.py导 ONNX,uv run publish推到 Hub,机器人上robotctl policy load或policy add。官方还留了一个纯 CPU 的推理脚本,可以先用键盘在 MuJoCo 里驱动导出的策略,不占显卡。 - ARM 机器有个坑:首次
uv sync会拉大约 2 GB 的 CUDA wheel,uv 默认 30 秒的 HTTP 超时容易中途失败,先export UV_HTTP_TIMEOUT=600。
怎么用起来:三条路,按钱包排序
| 路线 | 花多少钱 | 需要什么 | 你能得到什么 |
|---|---|---|---|
| 买一台 | 399 美元 + 税 + 运费(配件包另算) | 北美或欧洲的收货地址 | 开箱七个动作,手柄直接玩,robotctl 全功能 |
| 只跑模拟 | 0 元 | 两个仓库、Rust 工具链、一块跑得动 MuJoCo 的机器 | 同一套守护进程、robotctl、控制台;能调策略和 IPC,验证不了驱动 |
| 自己训一条 | 电费,或 HF Jobs 的算力费 | NVIDIA 显卡 + uv;或一个 HF 账号 | 4096 环境 1-2 小时一条步态,导出 ONNX,发布或本地加载 |
如果只是想判断"这东西值不值得我花 399 美元",第二条路就够:零成本把它的软件跑起来,看 robotctl monitor 里的关节、IMU、ToF 数据,看策略在 MuJoCo 里站起来、走两步、被推倒再爬起来。这比看一百条演示视频有用,也是这个项目最诚实的地方——它把"先验证再付钱"做成了默认路径。
和同类比:399 美元站在什么位置
| Microduck | 同厂 Reachy Mini Wireless | 几百元档玩具机器狗 | |
|---|---|---|---|
| 价格 | 399 美元(预售) | 499 美元 | 更低 |
| 形态 | 25 cm 双足,会走会摔会自己起 | 桌面陪伴型,不走动 | 四足,遥控为主 |
| 能不能自己训新动作 | 能,训练栈和策略格式都公开 | 能,跟着它自己的 SDK 与 app 生态走 | 多数不能,固件不开放 |
| 能不能改底层 | 能,七个守护进程的整机运行时都在仓库里 | 仓库主体是 SDK(Apache-2.0),不是整机运行时 | 不能 |
同一家公司把两台机器放在两个价位上,其实回答了"399 买什么"这个问题:Reachy Mini 卖的是桌面上的表达与交互,Microduck 卖的是"会动"这件事本身,以及把"怎么动"交给你。多出来的一百美元差价不是重点,重点是形态和可训练性。
我的判断:三种人,三种结论
- 该上的人:想把 sim2real 完整走一遍的工程师、研究生、机器人课的老师。你有 NVIDIA 卡,或者愿意为几次训练付 HF Jobs 的钱;你需要一台能摆在桌上、能当场演示"这个动作是训出来的,不是写死的"的教具。399 美元换 15 个自由度、双 IMU、ToF、摄像头、壳和手柄,单看物料不算贵。
- 该再等等的人(第一类):现在就想下单的国内买家。首发只覆盖北美和欧洲,官方规格表自己标着"未最终确定"——相机分辨率与视场、LiDAR 量程、无线版本、SDK 语言、年龄建议都还是 provisional;发货目标也只是"圣诞前"。转运、保修、配件补给,每一项都要自己扛。
- 该再等等的人(第二类):想让它干活的人。1 GB 内存加一个小 NPU,官方 FAQ 直接说了,更大的模型要放到机器人外面,通过 WebRTC 把摄像头送出去;中继按 Hugging Face 账号每月 10 GB 的免费额度计,720p 连续推流大约 1 GB 一小时,看一天就见底。它是一台会走路的开发板,不是能看家护院的设备。
- 别碰的人(第一类):要拿它做二次开发、小批量产品的团队。机械与电子设计文件不开放,仿真网格是 CC BY-NC-SA 禁商用。你能改软件,不能复制硬件。
- 别碰的人(第二类):想要陪伴机器人的人。一小时续航、七个动作、机上没有大模型,这三条加起来,它更像一台姿态很可爱的机器人实验平台。
一句话收尾:399 美元买的不是机器宠物,是一张 sim2real 的门票,附赠一只鸭子。 软件全在 GitHub 上,先跑模拟、再决定要不要付钱,这条路径本身就设计得挺诚实——在硬件产品里,零成本先验证这件事,并不常见。想继续看"把同一套代码同时用在仿真和真机上"这类工程口味,可以读我们写过的 context-mode 怎么把 102KB 压成 530B,以及 photocraft 用纯 Rust 重写一个 Photoshop。
本文由拾光札记编辑部整理,勘误请联系我们