Imitate and Repurpose (NPMP):先学会「像动物一样动」,再让它去运球
🎯 为什么重要:奖励工程是腿式机器人的「暗病」
腿式机器人 RL 的老大难不是「学不会走」,而是「学得太野」:奖励函数没设计好,policy 就会扭出各种耗电、抖动、磨损硬件的奇葩步态。论文开篇就列了三条病灶:
作者提出的解法是把「自然性」从 reward 里抽出来,塞进一个先验里。这个先验就是用模仿学训练出来的低层 controller——它定义了一个「自然动作流形」,下游任务策略只能在这个流形上探索。这等价于把 MoCap 当成一种「inductive bias」注入到 RL pipeline。
💡 核心思想:层级化 + 信息瓶颈 = 可复用技能模块
整个 pipeline 是四阶段(论文 Fig.1)。关键技术载体是「Neural Probabilistic Motor Primitives (NPMP)」——一个 encoder/decoder 双层结构,中间夹一个被压窄的潜在技能空间:
这里最关键的洞察是「瓶颈 + 先验」:encoder 把「未来 5 帧 body pose」压成一个低维 $z_t$,再用一个一阶自回归(AR(1))高斯先验惩罚 $z$ 的剧烈变化。这一下子做了三件事:(1) 迫使 decoder 自己补上「细节」;(2) 让 $z$ 慢变、可被高层「驱动」;(3) 让 decoder 能在没见过的 $z$ 序列上仍然生成合理动作——这就是「复用」的前提。
🛠️ 让它在真机上跑通的四个工程设计
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 双层 encoder/decoder | encoder 看参考轨迹出 $z_t$;decoder 看 $o_t + z_t$ 出关节指令 | 把「规划」与「执行」解耦:decoder 学到的是「泛化的低层反馈控制律」,可以脱离参考独立复用 |
| ② AR(1) 潜在先验 + KL 系数 β | 对 $z$ 序列加一阶自回归高斯先验,用 KL 散度拉过去 | 强制 $z$ 慢变,让潜在空间几何平滑、可插值;下游探索时也不会让机器人瞬间「抽搐」 |
| ③ decoder 双分支 + LSTM | 一支只看本体感觉(系统辨识用),一支看 $o_t + z_t$;两支线性组合输出 | memory 让 decoder 隐式「在线辨识」动力学随机化参数;纯本体感觉分支防止它过度依赖 $z$ 的具体训练分布 |
| ④ Actuator Network + 域随机化 | 把 ANYmal 的 SEA(串联弹性执行器)拆成「PID 解析部分 + 学习的力矩传递」 | sim2real 的关键:仿真里能预测真实电流,让能量估计和扭矩都贴近真机;OP3 用 MuJoCo 内置 actuator 即可 |
直接训「走路+运球」时,RL 要同时学会 (a) 怎么站、(b) 怎么走、(c) 怎么碰球、(d) 怎么不打滑——四件事耦合在一起,奖励项就得写一长串。NPMP 把 (a)(b) 提前 baked 进 decoder,下游只剩 (c)(d),奖励就一条「球到目标点的距离」。这就是「先验即奖励工程的分摊」。
📊 关键结果:两种机器人、三类任务、零样本上真机
| 维度 | 数字 / 现象(原文溯源) |
|---|---|
| 平台 | ANYmal B300(四足,50 Hz 控制)+ OP3(小型人形,33 Hz) |
| MoCap 数据 | ANYmal:约 2.5 小时狗 MoCap(走/跑/转/跳);OP3:约 1.5 小时 CMU 人形数据重定向 |
| 轨迹模仿精度 | ANYmal 跟踪 30 m 轨迹,最大基座位置偏差 0.23 m(仿真与真机一致)——论文 Fig.3 |
| 可控行走 | ANYmal 在测试速度范围内 100% 成功率,可跟随手柄速度指令前进/侧移/转向 |
| 运球任务 | 同一 skill module 复用 → 学会用前/后腿控球(Fig.5),任务奖励只有「球-目标距离」一项 |
| 正则化强度 | β = 0.3(模仿阶段)→ β = 0.01(复用阶段);过大则模仿失败,过小则复用抖动耗能(Fig.6/Fig.7) |
| 真机部署 | 零样本 sim→real(无 fine-tune);用动力学+域随机化、actuator network、扰动训练桥接 |
🌐 在领域中的位置
NPMP 是「MoCap 先验 + 模仿-复用范式」从动画(Merel 等的 NPMP 前作)落地到真机器人的标志性工作。它把「先训一个低层 skill、再用 latent 指令复用」这套抽象写清楚了,直接启发了后续 ASE、CALM、AMP 等一系列「latent skill / motion prior」工作。详见 T04 运动 prior 谱系。
❓ 常见误区
这和 DeepMimic 有什么区别?
DeepMimic 是「一段 MoCap 训一个策略」,对每条轨迹都要重新训。NPMP 训的是一个 universal goal-conditioned 策略——把整个 MoCap 数据集压进同一个 encoder/decoder,所以下游可以无缝复用,不需要为新动作重训低层。
为什么不直接用 GAIL / AMP 那种对抗式模仿?
论文显式提了「adversarial alternative」([41])。对抗式不需要训专门的 skill module,但奖励信号是隐式的、训练不稳;NPMP 用显式 bottleneck + 显式 KL 先验换来稳定训练和「可调强度」的先验(β 系数),下游还能直接读 latent 做分析。
decoder 只看本体感觉,看不到视觉,怎么做运球?
对!运球任务里,视觉(球/目标位置)只喂给高层任务策略,由它输出 $z_t$;decoder 永远只吃本体感觉。这种「视觉走高层、底层纯 proprio」的分层正是 NPMP 的设计哲学——低层是「与任务无关的 motor skill」,感知/规划都交给高层。
sim-to-real 真的「零样本」?
对 ANYmal 是的——通过 actuator network + 大量动力学/域随机化 + 扰动训练。OP3 由于低成本伺服的 backlash、电池敏感性等问题,sim2real gap 更大,论文对 OP3 的真机结果有保留(仿真为主,真机作可行性验证)。