开源的不只是源码
很多人对 Microduck「开源」的理解,就是 GitHub 上放着两个仓库。真把机器拿在手上你会发现开放的远不止源码:机器上跑的代码都能读,出厂带的每个动作本身就是一条策略,这条策略你能拿到、能在仿真里重新训练,练好了还能发布出去,别人一条命令就能装回自己的机器。官方发布机器时就把 7 个出厂策略全部放出来了,每一条都可以重训。
中文资料大多停在「哪几个仓库开源」这一层,再往下就不多了:哪些东西是官方发的,哪些是玩家自己搭的,哪些文件看着在仓库里、其实不能拿去商用。这一页把整条链路串一遍,按「机器上跑什么、策略从哪来、策略怎么发出去又装回来」的顺序讲,最后集中列一次边界。
四个入口,各管一段
官方放出的一共四类东西。先分清谁管什么,再进仓库翻,会省不少时间。
| 对象 | 管什么 | 玩家能做什么 | 关键入口 |
|---|---|---|---|
| 主仓库 pollen-robotics/microduck | 机器鸭的大脑:运行时与 SDK | 读实现、写自定义行为、管理更新、没有硬件也能跑仿真 | robotctl 命令族、scripts/duck-sim、docs/design 与 docs/project |
| 训练仓库 pollen-robotics/microduck_rl | 策略产地:仿真训练与 ONNX 导出 | 训练新步态、导出策略、发布给社区 | uv run train、scripts/export.py、uv run publish、--hf-jobs |
| 官方策略集 pollen-robotics/microduck-policies | 7 个出厂策略与阶段驱动动作 | 装机、换策略、当自己训练的基线 | robotctl policy add / load、manifest schema 2 |
| Hugging Face Hub 上的社区策略 | 玩家上传的 policy.onnx | 下载别人练好的动作,或发布自己的 | uv run publish、robotctl robot do |
主仓库:机器的大脑
主仓库 README 开头第一句就是「This repo is the duck's brain」。机器约 25 厘米高、800 克重,大脑是一块 Rockchip RK3566,上面跑一组 Rust 写的 daemon:robotd 以 50 Hz 的频率跑控制回路,用神经策略驱动 15 个舵机;updaterd 管签名版本的安装和出问题时的回滚;configd、btd、padd、mediad、tofd 分别管 WiFi、蓝牙、手柄、摄像头和深度传感器。daemon 之间走同一份 Unix socket 上的 JSON-RPC 契约。
平时真正会敲的是 robotctl 这一族命令:configure、update、monitor 管日常,policy add 和 policy load 换动作,robot do 让它当场做一个动作。手头没有机器也能玩软件这半边:scripts/duck-sim 用真实的 daemon 去控制 MuJoCo 里的身体,开一只可以,开四只当四台机器登录也可以;cheat sheet 把命令列全了,duckctl 支持从笔记本走蓝牙直连,不依赖网络和 ssh。
训练仓库:策略怎么练出来
训练仓库的全名是「RL training environments for Microduck (mjlab)」,技术栈是 mjlab(MuJoCo Warp)加 PPO,别笼统记成「MuJoCo 训练」。它对 sim2real 下的功夫比较认真:BAM 执行器模型照着 Dynamixel XL330 的电压控制律、反电动势和随负载变化的摩擦建模,再叠加域随机化,每个主任务还配了一个带 ±1° 齿轮游隙的 Backlash 孪生任务。README 里有一句话说得很实在:在 800 克这个量级,执行器建模的保真度基本决定了 sim2real 的差距,所以官方没有用理想 PD 应付过去。
所有策略共用 61 维观测、14 维动作的契约,运行时靠它在走路、恢复、特技几条策略之间热切换;导出时观测归一化会被烘焙进 ONNX 图。所以部署只用 scripts/export.py 的产物,别自己转 checkpoint——手工转出来的图没有归一化,运行时喂进去的观测就是错的。发布前 uv run publish 还会做一遍检查:图必须 61 维进、14 维出,跑一遍合理输入,出现 NaN 或输出恒定会直接拒收。
官方策略集和社区发布
官方产品页把玩法概括成四步:仿真里训练、部署到真机、精调后重新训练、把新行为分享给社区。训练仓库把这四步都做成了能敲的命令。有一个限制要先知道:uv run publish 只能发布 constant-command 类策略;地面拾取这种阶段驱动的动作,以及靠姿态标志位切换的坐站策略,是 daemon 自己驱动的,只存在于官方策略集里,个人发布复现不了。发布出去的东西包括带观测归一化的 policy.onnx、一份按主仓库 policy-manifest schema 2 写的 manifest.json 和一份说明 README,仓库默认建成私有。
代码是 Apache-2.0,不等于整个仓库都能商用。训练仓库的 3D .stl 网格按 CC BY-NC-SA 4.0 授权,社区 ROS 2 / Isaac 集成仓库也明说「A distribution containing both is not Apache-only」。再分发或商用之前,先把各自的 LICENSE-MODELS.md 和 NOTICE-MICRODUCK.md 读一遍。
从训练到发布的四步命令
下面这张表把官方的四步和训练仓库 README 里的命令对上。流程是按官方文档整理的,不是本站真机实测;命令参数以你手头仓库的版本为准。
| 步骤 | 官方表述 | 可核验入口 | 预期结果 |
|---|---|---|---|
| 01 训练 | Train in simulation,本机或 Hugging Face Jobs | uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096;没有 GPU 就加 --hf-jobs | 约 1–2 小时得到一条可用步态,可以用 uv run play 在 viewer 里回看 |
| 02 导出 | 一步从仿真到真机 | uv run scripts/export.py 导出 ONNX;uv run scripts/infer_policy.py 在 CPU MuJoCo 里用键盘驱动验证 | 得到带归一化、图结构合规的 ONNX,键盘能驱动动作 |
| 03 精调 | Tune、re-train、re-deploy | 从 checkpoint 续训,重复导出和回放 | 新版本策略可以和基线步态对比,不满意就退回上一版 |
| 04 发布 | Publish the policy,分享给社区 | uv run publish --onnx output.onnx --repo 你的仓库 --kind episodic --duration-s 4.0;装机用 sudo robotctl policy add 或 robotctl policy load | Hub 上生成别人一条命令就能装的策略,机器人上能触发 |
Quickstart 里还有两条现实条件:训练需要 CUDA GPU,依赖用 uv 管理;在 DGX Spark、GB10、Jetson 这类 ARM 设备上,第一次 uv sync 要拉大约 2 GB 的 CUDA wheel,先设 UV_HTTP_TIMEOUT=600,不然默认 30 秒超时会在下载中途断掉。本地没有显卡,就用 --hf-jobs 把训练丢到 Hugging Face Jobs 上跑。官方和 NVIDIA 还公布过另一条路:用 Isaac Lab 在 Linux 加 NVIDIA GPU 上训练新步态再导出。
几个容易踩的边界
这一页最容易踩坑的地方不在命令,在边界。下面逐条列出来,看任何第三方教程之前先对一遍。
| 边界项 | 可核实的事实 | 玩家要做的核对 |
|---|---|---|
| 许可证混合 | 代码 Apache-2.0;训练仓库 3D .stl 网格 CC BY-NC-SA 4.0;社区集成仓库原创代码 Apache-2.0、上游 STL 与转换网格 CC BY-NC-SA 4.0 | 再分发、商用或打包之前读 LICENSE 与 NOTICE,不能按「全站 Apache」处理 |
| 导出路径只有一条 | 观测归一化烘焙进 ONNX,publish 校验 61 维进 14 维出,拒收 NaN 和常量输出 | 只用 scripts/export.py 的产物部署,不手工转 checkpoint |
| 发布能力有上限 | uv run publish 只支持 constant-command 策略;ground pick、sit 与 stand 由 daemon 驱动,只在官方策略集里 | 想复现这两类动作去看官方集,个人发布做不出来 |
| 社区集成不是官方发布物 | osrbot/microduck-ros2-isaac 自述 independent、未获 Pollen Robotics 背书,不含物理驱动或 ros2_control,Isaac 任务也明确不是 sim-to-real 声明 | 拿它的中文教程学 RViz 和 Isaac Sim 没问题,别当成官方硬件方案或真机能力证明 |
| 版本对齐 | 该社区仓库 2026-10-10 起按官方 Hugging Face v7 不可变策略集做 SHA-256 校验下载;随附的 Isaac USD 和原生训练输入还是历史基线,等新的转换和 GPU 回放验证 | 先读 upstream-alignment 说明确认版本,历史基线的结果不代表当期官方表现 |
| 硬件没有开源 | 官方明确未开放 BOM、3D 打印结构件和接线图;主仓库里没有 BOM 与 CAD,也没有舵机型号清单 | 社区复刻的物料和图纸以各自仓库为准,别拿官方规格去要求复刻机 |
硬件不开源还带出一个容易被忽略的后果:官方后续放出的新动作,走的是官方策略集和 daemon 的更新通道;自己量化导出的策略停在导出那天,不会跟着升级。这是复刻路线自带的代价,调参解决不了。
没有硬件、没有显卡,分别先走哪条
- 没有机器:主仓库的 scripts/duck-sim 用真实 daemon 跑 MuJoCo 里的身体,训练仓库的 infer_policy.py 在 CPU 上用键盘驱动已导出的 ONNX,都不需要真机。
- 没有显卡:给任意 train 命令加 --hf-jobs,训练放到 Hugging Face Jobs 上跑;本地只有 ARM 小盒子的话,先处理 uv 的超时和 CUDA wheel 体积。
- 只想换动作、不想训练:用 robotctl policy add 装一条社区策略,或者把官方 7 个出厂策略挨个试一遍当基线,再决定要不要自己训。
- 只想先读懂:主仓库的 docs/design 讲「为什么这样设计」,docs/project 讲「哪里出过错」,比翻提交记录快。
下一步
生态和边界弄清楚之后:花钱买机器或复刻件之前,看《Microduck 复刻版与官方渠道怎么分》;想直接上手改动作,走《Microduck 强化学习训练与真机部署》和《Microduck 编程:Python 与 JavaScript 自定义动作》;想找现成策略互换,看《Microduck 玩法扩展与社区资源》。