枢纽
机器人ANYmal,OP3
上真机
物理感知
实时
输入模态proprioception

Imitate and Repurpose (NPMP):先学会「像动物一样动」,再让它去运球

Steven Bohez, Saran Tunyasuvunakool, …, Josh Merel, Raia Hadsell, Nicolas Heess(DeepMind)。arXiv:2203.17138, 2022。 arXiv · 项目视频 · motion_priorNPMP 线索 T04

🧠 一句话心智模型:别让 RL 从零开始「瞎扭」着学会走路——先用一段狗/人的 MoCap 数据训练一个「能产生自然动作」的低层技能模块,把它冻住;下游任务只需要训一个往潜在技能空间里发指令的小高层策略。结果是:运球、走路、跟踪轨迹这些任务几乎不用再调奖励函数,机器人动作还像真动物一样顺。

🎯 为什么重要:奖励工程是腿式机器人的「暗病」

腿式机器人 RL 的老大难不是「学不会走」,而是「学得太野」:奖励函数没设计好,policy 就会扭出各种耗电、抖动、磨损硬件的奇葩步态。论文开篇就列了三条病灶:

核心矛盾:纯 RL 找到的解通常「能跑但不优雅」——高扭矩、高 jerk、能耗大、磨损快,且每个新任务都要从头调一堆 reward 项。本质上是奖励工程在替你「描述自然动作」,但自然性根本不是几个 cost term 能写清楚的。

作者提出的解法是把「自然性」从 reward 里抽出来,塞进一个先验里。这个先验就是用模仿学训练出来的低层 controller——它定义了一个「自然动作流形」,下游任务策略只能在这个流形上探索。这等价于把 MoCap 当成一种「inductive bias」注入到 RL pipeline

💡 核心思想:层级化 + 信息瓶颈 = 可复用技能模块

整个 pipeline 是四阶段(论文 Fig.1)。关键技术载体是「Neural Probabilistic Motor Primitives (NPMP)」——一个 encoder/decoder 双层结构,中间夹一个被压窄的潜在技能空间

阶段 1 · Retarget 狗/人 MoCap → 重定向到机器人骨骼 阶段 2 · 模仿训练(信息瓶颈 + AR(1) 先验) 参考轨迹片段 未来 5 帧 body pose Encoder π_HL 高层策略 z_t 潜在技能指令 KL(z ‖ AR(1) 先验) 让 z 慢变、可复用 Decoder π_LL LSTM + 双分支 本体感觉 → 关节 本体感觉 o_t 关节+IMU+velocity (含噪声) 关节指令 a_t 阶段 3 · Reuse 冻住 Decoder 训新任务策略 任务策略 → z_t 走路 / 运球 阶段 4 · Sim2Real 零迁移 动力学 + 域随机化 actuator network + 扰动训练
图 1:NPMP 的四阶段流水线(依论文 Fig.1 重绘)。阶段 2 的核心是「参考 → encoder → z → decoder → 关节」的信息瓶颈;KL 项把 z 拉向 AR(1) 平滑先验,让潜在空间具备「慢变」结构,下游才好复用。

这里最关键的洞察是「瓶颈 + 先验」:encoder 把「未来 5 帧 body pose」压成一个低维 $z_t$,再用一个一阶自回归(AR(1))高斯先验惩罚 $z$ 的剧烈变化。这一下子做了三件事:(1) 迫使 decoder 自己补上「细节」;(2) 让 $z$ 慢变、可被高层「驱动」;(3) 让 decoder 能在没见过的 $z$ 序列上仍然生成合理动作——这就是「复用」的前提。

🛠️ 让它在真机上跑通的四个工程设计

设计心智为什么必要
① 双层 encoder/decoderencoder 看参考轨迹出 $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、扰动训练桥接
关键洞察:作者特别指出,同一个 skill module 既能产生敏捷步态,又能产生「单腿控球」这种精细目标导向动作——而这些精细动作根本不在 MoCap 数据集里(数据集只有走/跑/转)。说明 NPMP 学到的是「自然动作流形」本身,而不是某些固定轨迹的回放。

🌐 在领域中的位置

DeepMimic (2018):单轨迹模仿 NPMP / Imitate & Repurpose(本作)⭐:可复用 skill module ASE / CALM / AMP:把「自然性先验」做成生成式 latent BFM / BeyondMimic:大规模数据驱动的运动基础模型

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 的真机结果有保留(仿真为主,真机作可行性验证)。