microduck_rl
pollen-robotics/microduck_rl加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你面前是一台只有 25 厘米高、800 克重的小型双足机器人,它叫 Microduck,由法国初创公司 Pollen Robotics 打造。它有 15 个电机、摄像头、深度传感器和两个 IMU,外形像一只塑料鸭子(duck),售价 399 美元。
现在让时间来倒回 2025 年 12 月之前——那时候它还不会走路。你在电脑上按下一个命令,屏幕里那只鸭子开始跌跌撞撞;你把训练好的模型烧进机器人,它当场摔个嘴啃泥。这就是物理 AI 里最著名的难题 sim2real(仿真到现实):仿真里跑得再好的策略,换到真机上往往立刻失效。
而这个仓库 pollen-robotics/microduck_rl(2620★ / 609 fork)就是 Pollen 公开出来的答案:一套完整的 sim2real 训练配方。它不只是一个"能跑起来的 demo",而是把一个 800 克级别的微型机器人从走路、跌倒爬起、坐下站立、翻跟头、踢小皮球,一直训练到穿轮滑鞋滑下坡,还能在真机上无缝热切换。

Microduck RL 仓库封面图:训练环境 + 真实机器人的 sim2real 闭环
Pollen Robotics 在发布博客里写得很直白:Microduck 选择了从另一侧进入物理 AI——从"动作"开始。市面上大多数机器人教程从"感知"起步:识别物体、规划路径、然后想办法动。但对一台桌面级小机器人来说,反过来做更有意思:先教会它一个动作(走路),再观察它在现实中哪里摔了,反过来改进仿真模型。
这个仓库由 PGP(原 INRIA 团队,有名的开源强化学习框架 PyTorch Brax 作者团队)背景的 Pollen 团队维护,核心技术栈是:
GitHub 上还有一个姊妹仓库 pollen-robotics/microduck(机器人 SDK 与机载运行时)和 PyTorch 官方文档里的 MicroDuck 教程页面,说明这个项目已经进入主流 RL 教学视野。
如果把强化学习训练比作厨艺,普通的 sim2real 项目只教了"盐放多少"(理想 PD 关节 + 简单随机化),而 Microduck RL 教的是完整的菜谱:
| 菜谱要素 | 本项目的对应技术 |
|---|---|
| 食材要新鲜(真实食材的不完美) | 电池电压、负载压降、指令延迟、摩擦系数的域随机化 |
| 刀具的弹性(真实刀刃会变形) | Backlash 齿隙仿真:14 个关节各加 ±1° 齿轮间隙 |
| 灶台的真实火候(BAM 舵机模型) | 电压控制律、反电动势、Coulomb/Stribeck/负载相关摩擦 |
| 出锅前的试菜(仿真先验证) | AGENTS.md 强制要求训练前先跑 5 轮 64 env 冒烟测试 |
最精妙的是齿隙(backlash)建模:真实舵机输出端和编码器之间有机械间隙,编码器读的是"经过间隙之后"的位置。而代码里通过给每个关节串一个无驱动的 passive_<joint>_backlash 铰链,并让观测 qpos[servo] + qpos[backlash] 穿过间隙读取,且观测维度、动作维度完全不变——所以 ONNX 导出和运行时一行都不用改。这是"教科书级"的 sim2real 细节。
仓库注册了 13 类任务(Mjlab-Velocity-Flat-MicroDuck、Mjlab-VelStand-*、Mjlab-StandUp-*、Mjlab-SitStand-*、Mjlab-GroundPick-*、Mjlab-BallKick-*、Mjlab-Roulade-*、轮滑系列 Rollers/Swizzle/RollerSlope/RollerStandUp/Spin 等),几乎每个任务还有一个 -Backlash- 孪生版本用于 A/B 对照。
技术上最关键的设计是 61 维统一 actor 观测(48 维本体感知 + 13 维命令块 [twist(3), head_pose(4), body_pose(6)])。正因如此,部署时运行时可以在"走路 / 爬起 / 花招"这些策略之间热切换,任意一个都能在任意时刻接管机器人。scripts/infer_policy.py 就是这个热切换流程的仿真预演,支持键盘驱动(速度指令、G 触地拾取、Y 坐立、R 翻跟头、K/L 踢球)。
其他亮点:
onshape-to-robot 工具 + 每个模型一份 config_mjcf_*.json,CAD 改动可回流仿真uv run publish 把 ONNX + schema-2 manifest.json + README 打包上传 Hugging Face Hub,机器人守护进程通过 robotctl policy add 一条命令安装,无需升级固件--hf-jobs 参数把训练任务提交到 Hugging Face Jobs 云端 GPUduck-body 命令可以让 MuJoCo 里的仿真身体驱动真实机载守护进程,用于 sim2real 逐帧对比
Pollen Robotics 组织头像——Microduck 的开源开发方
前置条件:Python 3.12(严格 <3.13,因为 BAM 的依赖约束)、uv、CUDA GPU。
基本流程:
git clone https://github.com/pollen-robotics/microduck_rl && cd microduck_rl
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096 # 训练,约 1-2 小时出可用步态
uv run play Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <entity/project/run_id>
uv run scripts/export.py Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <...> # 导出 ONNX(normalizer 已烘焙)
uv run scripts/infer_policy.py --walking output.onnx # CPU MuJoCo 键盘预演
uv run --with pytest pytest tests/ # 23 个 CPU 回归测试
Web UI:无。本项目没有 Gradio / Streamlit / Flask 之类的 Web 界面,交互方式是 CLI + MuJoCo 3D viewer + Weights & Biases 在线看板。
硬件要求:CUDA GPU 是硬门槛——mjlab 走 MuJoCo Warp,在 CPU 上无法训练(只有 infer_policy.py 推理预演和 pytest 走 CPU)。4096 并行环境的步行策略约需 1-2 小时训练、显存占用可观。ARM 机器(DGX Spark、Jetson)需额外处理 uv 超时和 PyTorch CUDA 索引问题。
requires-python <3.13 这种硬上界也暗示了依赖生态的脆弱性——README 里甚至有专门段落解释为什么不能放开上界。override-dependencies(protobuf、onnx、zmq)和多段注释解释"为什么不能覆盖 mujoco"——这是真实项目踩坑留下的疤,但对新用户而言是极高的理解成本。microduck 运行时、robotctl 工具链和本仓库。Microduck RL 的意义不在于它解决了通用机器人难题——它解决的是一个具体但关键的问题:让小规模、低成本、完全开源的机器人也能跑通 sim2real 闭环。
它把此前散落在各论文里的 sim2real 技巧(BAM 舵机物理、齿隙仿真、域随机化不累积、观测归一化必须烘焙进 ONNX、策略必须未滤波)整理成一份可执行、可复用的工程配方,并配上一个 399 美元的硬件目标。这与 PyTorch 官方把它写进 RL 教程是同一类信号:仿真到现实正在从大厂特权变成开源耗材。
社区规模也在印证这点:项目 2025 年 12 月才创建,10 个月内积累 2620 星、609 fork、9 位活跃贡献者,且已被 Adafruit 博客、PyTorch 文档等渠道报道。仓库 43 万行以上的 Python 中,真正精炼的是 tasks/mdp.py 里的奖励/事件/观测函数——每一行奖励设计背后,都是一次真机失败的教训。