P-RMA-2021 · RMA: Rapid Motor Adaptation for Legged Robots
一句话定位:在线适应(online adaptation)线索的分水岭——首次让腿足机器人在部署时实时推断未知环境参数并自我调整,把「适应」从一个训练时属性变成一个运行时能力。
在线索中的位置:T01 · Sim-to-Real 与在线适应 / 转折 3(分水岭)。直接承接 ETH teacher-student 范式(Lee et al. 2020),后续衍生出 A-RMA(双足)、RMA2(机械臂)、DreamWaQ(隐式估计)三条支线。
基本信息
- 作者:Ashish Kumar, Zipeng Fu, Deepak Pathak, Jitendra Malik
- 机构:UC Berkeley(Kumar、Malik)+ Carnegie Mellon University(Fu、Pathak);Jitendra Malik 兼 Facebook AI
- 发表:RSS 2021(arXiv abstract page "Comments: RSS 2021")
- arXiv:2107.04034
- 项目页:https://ashish-kmr.github.io/rma-legged-robots/
- 真机平台:Unitree A1(四足)
动机:解决前作什么具体问题
2021 年之前的 sim-to-real 主流是两条路:(a) domain randomization(DR)——把物理参数当随机变量,训一个对所有扰动都鲁棒的策略;(b) ETH teacher-student + system identification——精确测真机参数,再用特权信息蒸馏。两者共享同一个隐含假设:部署时的物理 gap 是静态的。
但真实部署中 gap 是时变的:人会往机器人上挂未知质量的背包、机器人会从水泥地走到草地、电机会发热退化、腿可能受损。DR 把这些扰动预演进了策略权重,但策略一旦部署就是「固定」的——遇到训练分布外的扰动、或者运行中突然变化的扰动,仍会失效。RMA 要解决的就是这个:让策略在运行时实时推断当前环境、并据此调整动作。
方法核心:两阶段训练 + temporal-convolution adaptation module
以下精确数字来自论文 Sec.III–IV + Fig.2 + Table I:$z_t\in\mathbb{R}^8$、$e_t\in\mathbb{R}^{17}$、$s_t\in\mathbb{R}^{30}$、$a_t\in\mathbb{R}^{12}$、$T=50$ 步(@100Hz 即 0.5s),adaptation module @10Hz、base policy @100Hz 异步运行。
RMA 的核心是显式分离「学一个对环境敏感的策略」与「学一个从历史推断环境」,通过两阶段训练完成。
Stage 1:RL with privileged information(带特权信息的 RL)
在仿真里训 base policy:
$$
\pi(a_t) = \pi_\theta(a_t \mid s_t, a_{t-1}, z_t), \quad z_t = \mu_\psi(e_t)
$$
- $s_t \in \mathbb{R}^{30}$:本体感受,组成 = 12 维关节位置 + 12 维关节速度 + 2 维躯干 roll/pitch + 4 维 binary 足部接触指示(论文 Sec.IV.A "State-Action Space" 明确,IMU 只用 roll/pitch 不用 yaw)。
- $a_{t-1} \in \mathbb{R}^{12}$:上一步动作(PD 控制器目标关节角 $\hat{q}$)。
- $e_t \in \mathbb{R}^{17}$:特权环境参数,组成 = payload 质量及其在机器人上的位置(论文 Sec.IV.A 原话「mass and its position on the robot (3 dims)」,把质量与 COM 位置合并记为 3 维)+ 电机强度(12 维)+ 摩擦(标量)+ 局部地形高度(标量),共 17 维(3+12+1+1=17)。$e_t$ 在每个 episode 开始按 Table I 的范围采样(摩擦 $[0.05,4.5]$、$K_p\in[50,60]$、$K_d\in[0.4,0.8]$、payload $\in[0,6]$kg、COM $\pm 0.15$m、motor strength $\in[0.9,1.1]$),整个 episode 内近似不变(resample probability 仅 0.004)。
- $\mu_\psi$:一个 MLP encoder,把 17 维 $e_t$ 压成 8 维 latent $z_t$(论文 Sec.III.A 原话:"$z_t \in \mathbb{R}^8$")。
- $\pi_\theta$:策略网络(MLP),输入 $(s_t, a_{t-1}, z_t)$,输出 12 维目标关节位置 $\hat{q}$。
动作通过 PD 控制器转为力矩:$\tau = K_p(\hat{q}-q) + K_d(\dot{\hat{q}}-\dot{q})$,部署时固定 $K_p=55, K_d=0.8$,且 $\dot{\hat{q}}=0$(论文 Sec.IV.A 明确)。
用 PPO 联合训练 $\theta$ 和 $\psi$。注意 $\mu_\psi$ 不是 RNN——因为 $e_t$ 在 episode 内不变,$z_t$ 也不变,无需时序。
reward 设计(Sec.III.A bioenergetics-inspired,共 10 项):(1) Forward $\min(v_x^t, 0.35)$(前进封顶 0.35 m/s)、(2) Lateral/Yaw penalty、(3) Work $-|\tau^\top(q^t-q^{t-1})|$、(4) Ground impact $-\|f^t-f^{t-1}\|^2$、(5) Smoothness、(6) Action magnitude、(7) Joint speed、(8) Orientation roll/pitch、(9) Z acceleration、(10) Foot slip。10 项权重依次为 $\{20, 21, 0.002, 0.02, 0.001, 0.07, 0.002, 1.5, 2.0, 0.8\}$(论文 Sec.III.A 末尾明确)。这套 bioenergetics reward 让策略不需要任何 reference motion 就能学到自然步态。
仿真器(Sec.IV.A):RaiSim(不是 Isaac_gym!原 paper 用 ETH 的 RaiSim 做 rigid-body + contact),fractal terrain(octaves=2, lacunarity=2.0, gain=0.25, z-scale=0.27);policy 100Hz,sim timestep 0.025s;每个 episode 最多 1000 步,早停条件 = 身高低于 0.28m、roll>0.4rad 或 pitch>0.2rad。
关键点:这一阶段做的是「让策略学会如何使用环境信息」,但策略此时还依赖真值 $z_t$,不能直接部署(部署时拿不到 $e_t$)。
Stage 2:Supervised adaptation module(监督学习训练 adaptation module)
部署时拿不到 $e_t$,所以训一个独立的 adaptation module $\phi$,只从最近的历史推断 $\hat{z}_t$:
$$
\hat{z}_t = \phi_\omega(\{s_{t-k:t-1}, a_{t-k:t-1}\})
$$
- 输入:最近 $k=50$ 步(@100Hz 即 0.5 秒,论文 Sec.III.B 原话:"we use $k = 50$ which corresponds to 0.5s")的本体感受和动作历史——没有任何特权信息。
- 网络结构:1D causal temporal convolution(时间卷积,论文 Sec.III.B 原话 "We model $\phi$ as a 1-D CNN to capture temporal correlations")。之所以选 temporal conv 而不是 LSTM/Transformer,是因为 (a) 推理快(部署实时性要求高),(b) 卷积能捕捉「同样的动作产生了什么样的响应」这种局部动力学指纹。
- 监督信号:Stage 1 里 $\mu_\psi(e_t)$ 输出的真值 $z_t$。Loss 是 $\text{MSE}(\hat{z}_t, z_t) = \|\hat{z}_t - z_t\|^2$(论文 Sec.III.B 明确)。
- Stage 2 不再训 $\pi_\theta$ 和 $\mu_\psi$,只训 $\phi_\omega$。
- 关键的 on-policy 数据采集(Sec.III.B):若直接用 $\pi$ + 真值 $z_t$ rollout 采数据,得到的全是「完美轨迹」,$\phi$ 学不到鲁棒性。论文用 DAgger 式做法——用随机初始化的 $\phi$ 预测 $\hat{z}_t$、用 $\pi(s_t,a_{t-1},\hat{z}_t)$ rollout,再把这条含偏差的轨迹配上真值 $z_t$ 当监督。这个迭代过程让 $\phi$ 见到足够多的「偏离完美轨迹」的样本,是 RMA 部署鲁棒性的关键来源。
部署:异步双频率设计(Sec.III.C)
部署时只跑 $\pi_\theta$ 和 $\phi_\omega$,两者异步运行:
- $\phi_\omega$ @ 10 Hz:每约 0.1 秒更新一次 $\hat{z}_t$(因 50 步历史卷积推理较慢)。
- $\pi_\theta$ @ 100 Hz:每 0.01 秒出一次动作 $\hat{q}_t$,使用最近一次的 $\hat{z}_t$。
$\pi_\theta$ 在两次 $\hat{z}_t$ 更新之间持续用最近的 $\hat{z}_t$ 出动作。这个异步设计对低成本机器人(如 Unitree A1 算力有限)至关重要——论文 Sec.III.C 论证:$\hat{z}_t$ 在真机上「变化相对缓慢」,10Hz 更新足够。
论文 Sec.III.C 还尝试过「直接训一个吃 state-action history 的端到端 policy、不分两阶段」的 baseline,发现 (a) 步态不自然、性能差,(b) 受 history 卷积拖累只能跑 10Hz,(c) 失去异步设计。因此两阶段 + 异步不是可选项,而是必须。
为什么这能工作
机制上的洞察:机器人对同样的电机命令,在不同环境里会产生不同的关节响应。挂了 5kg 背包时,给关节施加同样的力矩,加速度会比没挂时小;踩到冰面时,支撑腿的水平滑动会变大。这些「动力学指纹」就编码在 $(s, a)$ 历史里。temporal conv 把它们读出来,就还原了环境的隐式参数。本质上 $\phi$ 是一个轻量的隐式 system identifier——但它不需要专门的激励信号,直接从策略自身的运动历史里工作。
这个设计还有一个好处:Stage 1 的策略知道 $z_t$ 代表什么(因为它训练时见过真值),所以 $\hat{z}_t$ 一旦推断对,策略立刻知道该怎么调整。这是 RMA 比纯 RNN policy 更易训的原因——latent 的语义是「显式锚定」的。
为什么重要
- 哲学突破:它把 sim-to-real 的范式从「让策略在部署前就准备好」(DR/system-ID/teacher-student)转向「让策略在部署中持续调整」。这是本线索的第三次大转向(前两次是 DR 和 teacher-student)。
- 技术巧妙:它没有改 RL 算法(还是 PPO),只是引入了 latent + temporal conv 的组合。这意味着它可以即插即用地加到任何 legged RL 框架里。
- 实验说服力:他们让 Unitree A1 在真机上扛最高 12kg 未知负载(= 自重 100%;A1 自重 12kg,论文 Sec.IV.C payload 测试明确)、踩未知摩擦地面(oily path)、爬未知坡度(6° incline)、过 hiking trail 上的台阶——全部零样本迁移。这些场景之前的 DR/teacher-student 都搞不定。
- 范式扩散:RMA 之后,「在线 adaptation module」成为 legged RL 的标配组件。Extreme Parkour [Cheng et al. 2023] 直接复用 RMA 的 history encoder;legged_gym/rsl_rl 把 teacher-student + history encoding 整合成默认 API。
局限(被后续什么工作解决)
- 推断延迟:$\phi$ 需要 50 步(~0.5 秒)历史才能稳定推断 $\hat{z}_t$,面对毫秒级突变(踏空、急刹)来不及。后续用更高频预测模型(world model 方向)的工作在尝试压缩到毫级。
- $e_t$ 分布外:$\phi$ 的能力上限是 Stage 1 里 $e_t$ 的分布——遇到训练分布外的扰动(比如从未见过的可变形地形),$\hat{z}_t$ 不可靠。这本质是 RMA 与 DR 共有的局限:适应范围由训练分布决定。
- $\hat{z}_t$ 不可解释:8 维 latent 是黑箱,无法保证推断对。后续工作如 DreamWaQ [Nahrendra et al. 2023] 用 implicit estimation 替代显式 module,虽然更难调但稳定性有时更好。
- 仅四足验证:原 paper 只在四足上验证。双足需要应对单脚支撑相的不稳定平衡,对 adaptation 延迟容忍度更低,由 A-RMA [Kumar et al. 2023] 解决;机械臂场景由 RMA2 [Liang et al. CVPR 2024] 验证思想可迁移。
复现要点
以下精确数字全部基于论文 Sec.III–IV + Fig.2 + Table I。
- 仿真器选择:原 paper 用 RaiSim(不是 Isaac Gym,论文 Sec.IV.A 原话 "We use the RaiSim simulator for rigid-body and contact dynamics simulation"),与 ETH 自研栈一致;社区复现(legged_gym/rsl_rl)主要基于 Isaac Gym 改造,是工程妥协。
- $e_t$ 的设计是关键:要选那些对策略行为有显著影响、且在 episode 内近似不变的物理量作为 $e_t$。原 paper 用了 17 维:payload 质量+COM 位置(论文合并记 3 维)、12 维 motor strength、摩擦、地形高度。漏掉关键扰动会让 $\hat{z}_t$ 推不出来。
- $z_t$ 维度:论文用 8 维。太低信息不够、太高 $\phi$ 学不出来。
- Stage 2 必须冻结 $\pi_\theta$ 和 $\mu_\psi$:否则 policy 会和 $\phi$ 互相迁就,破坏 Stage 1 学到的语义锚定。
- temporal conv 窗口:$T=50$(@100Hz 即 0.5s)。窗口太短信号不足、太长实时性差。
- PD 增益也做 DR:Table I 中 $K_p\in[50,60], K_d\in[0.4,0.8]$ 也随机化(部署用 $K_p=55, K_d=0.8$),这是常被忽略的细节。
- 真机迁移的隐藏坑:原 paper 报告电机型号差异(不同批次 A1)会显著影响 Stage 2 推断准确性,需要在仿真里加入「电机一致性」随机化(motor strength $\in[0.9,1.1]$)。
- reward 必须用 bioenergetics-inspired 10 项(Sec.III.A):特别是 ground impact $-\|f^t-f^{t-1}\|^2$ 和 work $-|\tau^\top(q^t-q^{t-1})|$ 两项,移除后步态退化成「趴地爬行」。
- curriculum 不能省:penalty 系数从极小起步,按固定 schedule 逐步增大(Sec.III.A "Training Curriculum"),同时 mass/friction/motor strength 难度线性递增——但地形难度固定(不做地形 curriculum)。
- Stage 2 必须用 on-policy rollout:用随机初始化的 $\phi$ rollout 采数据,不能直接用 teacher 的 perfect trajectory(Sec.III.B),否则部署鲁棒性大幅下降。
演化位置(一句话)
RMA 是「在线适应」范式的起点,后续三条支线(A-RMA 双足、RMA2 机械臂、DreamWaQ 隐式估计)以及 Extreme Parkour 的 history encoder 都是它的直接后代;其 latent + history 编码的 idea 最终被 rsl_rl 整合进 legged locomotion 的标准训练栈。在 T01 线索中它处于「转折 3」,是从「离线鲁棒性」到「在线适应」的分水岭。