Microduck RL:800 克双足机器人的 Sim2Real 全食谱
场景开篇
训练一个双足机器人走路,传统路径是:在仿真里训练 → 部署到真机 → 发现真机和仿真对不上 → 调参 → 再训练 → 再部署 → 再对不上。这个循环可能持续几个月。
Pollen Robotics 的 Microduck RL 仓库给出了一个不同的答案:把真机的所有不完美——齿轮间隙、编码器位置、执行器物理——全部在仿真里建模,然后训练策略时就把这些不完美当作环境的一部分。
结果:策略在仿真里学会应对齿轮间隙,部署到真机时,真机的齿轮间隙对策略来说不是”新问题”,而是”老朋友”。
Microduck 是什么
Microduck 是 Pollen Robotics(Reachy 机器人的制造商)推出的一款小型双足机器人:
– 重量:约 800 克 – 身高:约 25 厘米 – 执行器:14 个舵机关节 – 控制频率:50 Hz
这不是一个大型研究平台。这是一个可以放在桌面上、用笔记本就能训练的小型机器人。但它的训练食谱却包含了 sim2real 的所有关键要素。
Sim2Real 的完整食谱
Microduck RL 仓库的核心价值不是”又一个 RL 训练环境”,而是它把 sim2real 的每一个环节都显式建模了。这不是黑魔法,是一份可复现的食谱。
1. BAM 执行器物理
BAM(Backlash Actuator Model)是 Rhoban 实验室开发的执行器物理模型。传统的 RL 训练用理想的扭矩控制,但真实舵机有摩擦、有齿轮间隙、有电机响应延迟。BAM 把这些物理特性建模进仿真,让策略在训练时就”感受”到真实舵机的行为。
2. 域随机化(Domain Randomization)
在训练时随机化物理参数:摩擦系数、质量分布、关节阻尼。策略学会的不是”在某个特定参数下走路”,而是”在参数的某个分布下走路”。部署到真机时,真机的参数在这个分布内,策略就能工作。
3. 齿轮间隙模拟
这是 Microduck RL 最有意思的设计。每个舵机关节都有一个 ±1° 的齿轮间隙(2° 总间隙)。在仿真里,这个间隙被建模为一个未驱动的铰链关节(passive__backlash),串联在舵机驱动关节之后。
关键细节:真实编码器在齿轮的输出端,所以仿真里的编码器读数也是”穿过间隙”的——qpos[servo] + qpos[backlash]。这意味着策略看到的关节位置和真实位置之间有一个未知的偏移,策略必须学会处理这个偏移。
每个主要任务都有 Backlash 孪生版本:Mjlab-Velocity-Flat-Backlash-MicroDuck。同样的任务,在有齿轮间隙的环境下训练。
4. MuJoCo Warp 加速
训练用 MuJoCo Warp(mjlab),这是 MuJoCo 的 GPU 加速版本。4096 个并行环境,1-2 小时就能训练出一个可用的步态。没有 GPU?--hf-jobs 可以在 Hugging Face Jobs 上跑。
5. ONNX 导出 + 真机部署
训练好的策略导出为 ONNX 格式,由 pollen-robotics/microduck 仓库里的 runtime 加载。50 Hz 控制频率,在真机上实时推理。
13 个任务:从走路到翻跟头
Microduck RL 不只是训练走路。它有 13 个任务,覆盖了双足机器人的各种行为:
| 任务 | 地形 | 描述 |
|---|---|---|
| Velocity | 平地/粗糙 | 主任务:速度命令 + 头部姿态控制 |
| VelStand | 平地/粗糙 | 走路 + 摔倒恢复在一个策略里 |
| StandUp | 平地/粗糙 | 从趴着/仰着/坐着站起来 |
| SitStand | 平地/粗糙 | 命令式坐下 ↔ 站起 |
| GroundPick | 平地/粗糙 | 蹲下用嘴尖触地再站起 |
| BallKick | 平地 | 踢一个 70mm/15g 的球(策略看不到球) |
| Roulade | 平地 | 前滚翻:头顶着地翻过去再站起 |
| Rollers | 平地 | 穿轮滑鞋的速度跟踪 |
| Swizzle | 平地 | 经典对称滑冰步法 |
| RollerCrouch | 平地 | 滑行中蹲下 |
| RollerSlope | 斜坡 | 滑下斜坡 |
| RollerStandUp | 平地 | 从地面站起来到轮子上 |
| Spin | 平地 | 穿轮滑鞋原地旋转 |
这些任务不是孤立的。部署时,runtime 通过一个共享的 61 维观测契约在策略间热切换。走路策略发现机器人要摔了?切换到恢复策略。用户按了”Y”键?切换到坐站策略。
scripts/infer_policy.py 可以排练这种切换:
uv run scripts/infer_policy.py –walking walk.onnx –standing stand.onnx –sitstand sitstand.onnx –roulade roulade.onnx –new-cmd-obs
键盘控制:速度命令、G 地面拾取、Y 坐/站、R 翻滚、K/L 踢球。
类比:训练拳击手的三种方式
训练一个机器人走路,有三种思路:
方式一:理想环境训练。在完美的仿真里训练,然后期望真机也完美。就像在跑步机上训练拳击手——心肺功能上去了,但第一次挨拳头就懵了。
方式二:域随机化。在仿真里随机化所有参数,让策略学会适应各种情况。就像让拳击手和不同体型的对手对练——适应能力上去了,但遇到没见过的情况还是可能翻车。
方式三:Microduck 的方式。把真机的所有已知不完美(齿轮间隙、编码器位置、执行器物理)都建模进仿真,然后在这些不完美之上再做域随机化。就像让拳击手戴着有缝隙的手套训练、站在有微微弹性的地板上、面对会突然变重的沙袋——训练环境和真实比赛的每一个不完美都对齐了。
这不是”更难的训练”,而是”更真实的训练”。策略在训练时已经经历了真机的不完美,部署时这些不完美就不是”新问题”。
齿轮间隙的哲学
齿轮间隙(backlash)是机械工程里一个经典问题。两个齿轮啮合时,齿和齿之间有微小的间隙。这意味着当你转动输入齿轮时,输出齿轮不会立刻跟着动——有一段”空行程”。
对于控制算法来说,齿轮间隙是个噩梦。你的编码器告诉你”关节在 30 度”,但实际上关节可能在 29 度到 31 度之间的任何位置。你的 PD 控制器以为自己在控制一个确定的系统,但实际上系统有一个不确定的偏移。
Microduck RL 的处理方式很优雅:不试图消除间隙,而是让策略学会和间隙共存。在仿真里建模间隙,让策略在训练时就经历这种不确定性。策略学会的不是”精确控制关节角度”,而是”在关节角度有不确定性的情况下依然保持平衡”。
这就像学骑自行车:你不需要知道轮胎的确确抓地力是多少,你只需要学会在各种抓地力下都能保持平衡。
技术栈
– 仿真器:MuJoCo Warp(mjlab),GPU 加速 – RL 算法:PPO – 执行器模型:BAM(Rhoban 实验室) – 策略格式:ONNX – 训练环境数:4096 并行环境 – 训练时间:1-2 小时(4096 envs,GPU) – 控制频率:50 Hz(训练和部署一致)
数据
– 语言:Python – Stars:147 today(2026-08-30 首次上榜) – 机器人重量:~800g – 机器人身高:~25cm – 关节数:14 个舵机 – 齿轮间隙:±1°(2° 总) – 仓库:https://github.com/pollen-robotics/microduck_rl
为什么这很重要
1. Sim2real 食谱的开源
大多数 sim2real 论文只描述方法,不公开完整实现。Microduck RL 把整个食谱——从执行器物理到域随机化到齿轮间隙——全部开源。这是可复现的 sim2real,不是”相信我我调通了”。
2. 小型机器人的民主化
800 克、25 厘米高的机器人,用笔记本就能训练。这不是波士顿动力那种百万美元级的研究平台。这是可以放在教室里、让学生亲手训练 sim2real 策略的教育工具。
3. 多策略热切换的工程实践
13 个策略通过 61 维共享观测契约热切换,这是一个很好的工程模式。不是训练一个”什么都会”的巨型策略,而是训练多个专门策略,在运行时根据状态切换。这更模块化、更可调试、更安全。
4. Backlash 建模的示范
把齿轮间隙显式建模进仿真,这是一个值得所有 sim2real 项目学习的设计。不是所有机器人都有齿轮间隙问题,但”把已知的物理不完美建模进仿真”这个思路是通用的。
结语
Microduck RL 的价值不在于它训练了一个会走路的机器人。而在于它把 sim2real 的每一个环节——执行器物理、域随机化、齿轮间隙、策略导出、真机部署——都显式地、可复现地实现了。
这不是黑魔法,是工程。每一个设计决策都有文档,每一个物理建模都有代码,每一个假设都可以在仿真里验证。
当 sim2real 的食谱被完整公开时,双足机器人研究就从”实验室秘方”变成了”社区知识”。Microduck RL 是这个转变的一个缩影。
