Microduck RL:800 克双足机器人的 Sim2Real 全食谱

训练一个双足机器人走路,传统路径是:在仿真里训练 → 部署到真机 → 发现真机和仿真对不上 → 调参 → 再训练 → 再部署 → 再对不上。这个循环可能持续几个月。

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 是这个转变的一个缩影。

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens