一句话定位
MIT Improbable AI 在一个只训练过平地行走的四足策略里,用一组 8 维「行为参数」(步态相位、频率、身高、俯仰、站宽、抬脚高度)把「同一个任务的多种解法」显式编码进单个神经网络——这就是 Multiplicity of Behavior (MoB):部署时人类操作员实时旋这几个「旋钮」,就能让一个平地策略零样本跨到上下楼梯、钻杆、抗推、穿灌木、甚至跳舞,无需为每个新场景重训;配套开源的 Walk These Ways 控制器(Unitree Go1,50Hz 实时)成为四足 sim-to-real RL 领域被广泛复用的强 baseline。
背景与定位
Walk These Ways(CoRL 2022 Oral,作者 Gabriel B. Margolis 与 Pulkit Agrawal)要解决的是当代四足 sim-to-real RL 的一个系统性痛点:主流范式(rma-rapid-motor-adaptation 式的在线系统辨识、大规模并行 RL)依赖两个假设——能先验建模所有会在部署时变化的环境参数、能从传感器估计这些参数。可现实世界总有没被 domain randomization 覆盖的长尾:稠密灌木既难仿真(对全身柔性接触)又难感知(深度传感器把它当成实墙),策略要么当石头去爬、要么保守到卡住。传统补救是「改环境/改 reward → 重训 → 上真机测」的慢迭代循环,既 tedious 又常常因无法准确建模而失效。
作者的核心 insight 是 under-specification(欠定,引 Agrawal 的 “task specification problem”):给定一个任务(如平地按速度行走),存在多个训练性能等价、但泛化方向不同的解。平地行走只约束了机身速度,没约束腿怎么摆、躯干多高——crouch(躯干贴地)能钻障碍不能上台阶,stomp(躯干高抬脚高)能上台阶不能钻障碍。典型 RL 只会收敛到其中一个解、从而只带一种泛化偏置。MoB 的做法是训一个条件策略 π(·|c,b),让它对同一观测历史 + 一小组行为参数 b 输出不同的行走风格;遇到未见场景,人类只需试不同 b(毫秒级),比重训一个策略快得多。
定位上它属于「learning locomotion with parameterized style」这一线:受 Siekmann 等双足 periodic reward composition [8] 启发(该工作用步态相关 reward 控制双足两脚的相位偏移与摆动时长),但把参数空间从双足小空间扩到四足可组合、可 OOD 的 8 维;与 quality-diversity(MAP-Elites)、unsupervised skill discovery(DIAYN)这类「自动发现多样行为」的路线相比,MoB 刻意用人类先验挑选可解释、可人手调的步态参数,而非用无监督多样性指标(后者的行为往往没用且不可人手调)。它也是作者自家 rapid-locomotion-via-rl(RSS 2022,grid adaptive curriculum)的直接延续。
模型架构
这是一个 gait-conditioned 的 MLP 策略(非 Transformer),本体控制层面的经典 actor + 状态估计器结构:
- 策略主干:MLP,隐藏层 [512, 256, 128],ELU 激活。
- 策略输入(30 步历史):观测 o、命令 c、行为 b、上一步动作 a、时序参考变量 t 的 30-step history(o_{t-H..t}, c_{t-H..t}, b_{t-H..t}, a_{t-H-1..t-1}, t_{t-H..t})。
- 观测 o_t = 关节位置/速度 q, q̇(关节编码器)+ 机身坐标系重力向量 g(加速度计)。
- 时序参考变量 t_t = [sin(2πt_FR), sin(2πt_FL), sin(2πt_RR), sin(2πt_RL)],由各脚的偏移时序算出(形式改编自 Siekmann [8] 以表达四足步态)。
- 输入还含估计的域参数:机身速度 + 地面摩擦,用监督学习从观测历史预测(沿用 Ji 等 [7] 的并发状态估计器思路)。
- 状态估计器:MLP,隐藏层 [256, 128],ELU。作者说未分析该估计对性能的影响,但对可视化部署有用。
- 命令 c(任务,3 维):c_t = [v_x^cmd, v_y^cmd, ω_z^cmd],机身系 x/y 线速度 + yaw 角速度(全向速度跟踪)。
- 行为参数 b(风格,8 维):b_t = [θ_1^cmd, θ_2^cmd, θ_3^cmd, f^cmd, h_z^cmd, φ^cmd, s_y^cmd, h_z^{f,cmd}],即
- θ^cmd = (θ_1,θ_2,θ_3):三对脚之间的相位时序偏移,可表达 pronking θ=(0,0,0)、trotting θ=(0.5,0,0)、bounding θ=(0,0.5,0)、pacing θ=(0,0,0.5) 及其连续插值(如 galloping θ=(0.25,0,0))——能表达全部两拍四足接触模式。
- f^cmd:步频(Hz),命令 3Hz 则每脚每秒触地 3 次。
- h_z^cmd 机身高度、φ^cmd 机身俯仰、s_y^cmd 站宽、h_z^{f,cmd} 抬脚高度。
- 动作 a(12 维连续):12 个关节的位置目标,零动作对应名义关节位 q̂;用 PD 控制器跟踪,kp=20, kd=0.5。
- 接触调度参数化(附录 D):每控制步把全局计时变量 t 增 f^cmd·π/f_π(f_π 为控制频率),算各脚 clip 到 [0,1] 的分脚时序,再用正态分布 CDF Φ(x;σ) 的组合近似 Von Mises 分布得到期望接触状态 C_foot^cmd(θ^cmd, t)——即 Siekmann [8] 平滑 stance/swing 过渡的四足版。
- 站宽实现用 Raibert Heuristic:不是简单 reward 一个恒定左右脚距(那会惩罚快速转弯时脚的横向相对运动),而是用 Raibert 启发式算出与期望接触调度和机身速度一致的期望落脚点 p_{x,y,foot}^{f,cmd}(s_y)。
数据
这是 sim-only 训练、无真机训练数据的 RL 工作,「数据」= 仿真采样分布与 domain/command randomization:
- 训练地形:只在平地训练,完全不随机化地形几何——这是刻意设的极端 case,为的是研究 OOD 泛化(也顺便简化训练)。
- 训练量:4096 个并行环境(README 默认 `Cfg.env.num_envs=4000,约 12GB 显存**),总步数 2.58B timesteps(PPO 超参表)。
- 命令/行为采样(episode 内重采样以学平滑在线切换):
- 任务 c 用 rapid-locomotion-via-rl 的 grid adaptive curriculum 采样(让机器人既能快跑又能快转)。
- 行为 b 先把 (θ_1,θ_2,θ_3) 采为四种对称四足接触模式之一(pronking/trotting/bounding/pacing——更稳、且作者发现足以作多样有用步态的基),再把 (v, f^cmd, h_z^cmd, φ^cmd, s_y^cmd, h_z^{f,cmd}) 独立均匀采样。
- 命令随机化范围(Table 6):v_y ∈ [-0.6, 0.6] m/s;f^cmd ∈ [1.5, 4.0] Hz;h_z^cmd ∈ [0.10, 0.45] m;φ^cmd ∈ [-0.4, 0.4] rad;s_y^cmd ∈ [0.05, 0.45] m;h_z^{f,cmd} ∈ [0.03, 0.25] m。v_x^cmd、ω_z^cmd 按 curriculum 自适应(初始 [-1,1],最大 v_x=[-3,3] m/s、ω_z=[-5,5] rad/s,bin 0.5)。
- 动力学域随机化(Table 6):payload mass [-1.0, 3.0] kg;motor strength [90, 110] %;joint calibration [-0.02, 0.02] rad;ground friction [0.40, 1.00];ground restitution [0.00, 1.00];gravity offset [-1.0, 1.0] m/s²。
- 课程进程(Fig.4):pronking / trotting 更易学、训练早期主导;pacing / bounding 一旦被发现能给出好性能,后期在某些下游任务上更受偏好。
训练方法
- 算法:PPO(Proximal Policy Optimization),Isaac Gym 大规模并行。纯 RL、无模仿学习。
- 奖励三层结构(Table 1):
- Task rewards(任务,仅速度跟踪):xy 速度跟踪 (w=0.02)、yaw 速度跟踪 (0.01)。
- Augmented auxiliary(增广辅助,MoB 核心;Table 1 归此组):swing 相位跟踪-力 (-0.08)、stance 相位跟踪-速度 (-0.08)、body height 跟踪 (-0.2)、body pitch 跟踪 (-0.1)、Raibert 落脚点跟踪 (-0.2)、footswing 高度跟踪 (-0.6)——这些是 b 的函数(swing/stance 相位跟踪依赖接触调度 C(θ^cmd,t)),realized 行为越贴近 b 奖励越高,且设计上不与任务 reward 冲突。
- Fixed auxiliary(固定辅助,与 b 无关,促 sim-to-real 与平滑):z 速度、roll-pitch 速度、脚滑、thigh/calf 碰撞、关节限位、关节力矩/速度/加速度、一阶/二阶动作平滑等一长串负项。
- 正奖励技巧:为防辅助惩罚压过任务 reward 让机器人躺平/早停,把总奖励构造成任务 reward 的正线性函数 r_task·exp(c_aux·r_aux),c_aux=0.02(沿用 Ji 等 [7])——始终为「向任务前进」给正奖励,辅助满足得越好奖励越多。
- sim-to-real 设计:
- actuator network:训一个执行器网络捕捉 PD 误差→真实力矩的非理想关系(沿用 Hwangbo [22])。
- latency 建模:辨识出系统约 20ms 延迟,仿真里建成恒定 action delay。
- 强调「直接辨识不变属性」以避免不必要 domain randomization 带来的过保守行为。
- PPO 超参(Table 7):discount 0.99、GAE 0.95、rollout 21 步、5 epochs/rollout、4 minibatches、entropy bonus 0.01、value loss coef 1.0、clip 0.2、lr 1e-3、4096 环境、总 2.58B timesteps、Adam。
- Curriculum 阈值(Table 8):v_x 初始 [-1,1]→max [-3,3] m/s、ω_z 初始 [-1,1]→max [-5,5] rad/s、bin 0.5;各 reward 通过阈值 r_vxy=0.8、r_ωz=0.7、r_cf=0.95、r_cv=0.95 才推进课程。
- Gait-free baseline:同法训练但去掉全部 augmented auxiliary rewards,因此只学一个解、动作与 b 无关,用于对照 MoB 的代价与收益。
Infra(训练 / 推理工程)
- 仿真器:Isaac Gym(Preview 4),legged_gym 环境 + rsl_rl 训练码(均来自 ETH Rudin)。
- 训练硬件:GPU 型号/卡数/GPU-hours 未披露;README 只给出「至少 10GB VRAM,默认配置约 12GB」的下限。
- 部署硬件:Unitree Go1 Edu,机上 Jetson TX2 NX 跑训练好的策略;用 LCM(Lightweight Communications and Marshalling)在代码与 Unitree 低层控制 SDK 间传感器/电机/手柄数据。
- 控制频率:训练与部署均 50Hz。
- 部署工程细节(README):deployment docker 镜像 ~3.5GB,一次性传到机上;安全层用 Unitree PowerProtect level 9(力矩过高切电)。
- 推理 FPS/单次网络时延未披露具体数值(论文未给,只强调 50Hz 实时闭环与快切换)。
评测 benchmark
全部结果来自论文(真机演示 + 仿真定量),MoB 的价值靠「某些步态在 OOD 上超过 gait-free baseline」来证明:
平地跟踪与步态切换(4.1 / Fig.2):sim-to-real 后所有步态参数被一致跟踪;Fig.2 展示在 trotting/pronking/pacing/bounding 间切换、并在 2Hz↔4Hz 交替,脚力矩与接触态与命令一致。
功耗(Table 3 / Fig.3,仿真):机械功率 = Σ_i max(τ_i·q̇_i, 0)。多个 (θ, h_z, f) 选择在所有速度上都比 gait-free 更省电——即调 b 能在原训练环境里优化一个新指标(能效)。
平台地形零样本泛化(Table 4,仿真,最高 16cm 平台,10s episode):报「最大回合奖励的分数」,上标=平地训练环境表现,跨 3 seed。Survival(存活时长/最大回合):
| Gait | r_vxy | r_ωz | Survival |
|---|---|---|---|
| Trotting | 0.80 | 0.76 | 0.88 |
| Pronking | 0.84 | 0.77 | 0.82 |
| Pacing | 0.76 | 0.76 | 0.87 |
| Bounding | 0.80 | 0.73 | 0.82 |
| Gait-free | 0.81 | 0.74 | 0.83 |
结论:pacing 与 trotting 存活时长最好、超过 gait-free;pronking 速度跟踪最好。调 θ^cmd 或 h_z^{f,cmd} 即可在 OOD 地形超过 gait-free(Fig.9:抬脚越高平台穿越越好)。
抬脚高度 vs 鲁棒性(Fig.9):Trot footswing 3/10/17/24cm,越高在平台地形 time-to-failure 越好,均超 gait-free。
频率 vs 速度(Fig.10):低频 2Hz 让高速难以达成;高速需要高步频(4Hz trot 高速跟踪最好)。
前进 vs 后退(Fig.8,平台,3Hz):pacing 平均存活最长;几乎所有失败都发生在前进时,机器人后退时鲁棒得多(作者猜:恢复策略依赖膝关节朝向 + 重量分布)。
真机定性 demo(无量化 baseline,Fig.1 / 项目视频):单策略经人手调 b 完成——高频跑赢滑地冲刺、低频高抬脚上楼梯、低抬脚宽站抗腿部推搡、φ^cmd 后仰倾倒卸载荷(payload manipulation)、调低 h_z 钻过 22cm 杆(机身厚 13cm,留 9cm 净空)、调 f/h_z 穿稠密灌木、trot 3m/s 加速→pronking 2Hz 单跳跨越 60cm 缺口(超过机身长)、按 90bpm 爵士乐编排跳舞(相位 0/0.25/0.5 × 1.5Hz/3Hz 生成八分/四分/半/全拍节奏,脚本开环生成 b)。
MoB 的代价(Table 5,消融):去掉步态约束(gait-free)在平地速度跟踪任务上更好——热图显示 gait-free 最有利于高线速度+高角速度组合;即 MoB 换取多样性会牺牲部分平地冲刺极限性能。
创新点与影响
- 贡献:(1) 提出 Multiplicity of Behavior (MoB) ——用人类可解释的步态参数把「同一任务的多种等价解」显式编码进单个策略,把 OOD 泛化从「重训一个策略」变成「实时旋旋钮」;(2) 开源一个鲁棒、实时(50Hz)、可执行多样结构化步态(变抬脚/姿态/速度)的四足底层控制器 Walk These Ways(Go1),可作采集四足演示、搭高层任务的 building block;(3) 系统展示单一平地策略经行为调节零样本迁移到楼梯/钻杆/抗推/灌木/跳跃/舞蹈等一大批下游任务。
- 改变了什么:Walk These Ways 的开源实现(基于 legged_gym/rsl_rl,含预训练 checkpoint
gait-conditioned-agility/pretrain-v0)成为四足 sim-to-real RL 社区被大量 fork/复用的参考实现与强 baseline,「gait-conditioned / periodic-reward 步态参数化」也成了后续可控四足与人形运动工作的常见组件;它把「under-specification → 学多解 → 部署期选解」确立为 sim-to-real RL 提升 OOD 泛化的一条实用路径。 - 作者自陈局限:(1) 加 MoB 会牺牲 in-distribution 任务性能,尤其限制平地冲刺极限(Table 5,热图显示高线速+高角速组合最受限);量化并控制「任务性能 vs reward shaping」的 tradeoff 是未来方向;(2) 当前依赖人类操作员手动调 b——未来可用真机人类演示做模仿、或用分层学习在部署时自动选/自调行为参数来提升自主性。
原始链接
- arXiv 摘要:https://arxiv.org/abs/2212.03238
- arXiv PDF:https://arxiv.org/pdf/2212.03238
- OpenReview(CoRL 2022 Oral):https://openreview.net/pdf?id=52c5e73SlS2
- 项目主页(视频/摘要):https://gmargo11.github.io/walk-these-ways/
- 代码(Go1 sim-to-real starter kit,含预训练 MoB checkpoint):https://github.com/Improbable-AI/walk-these-ways
一手源存档(sources/)
- walk-these-ways—github-readme — GitHub README(训练/部署流程、num_envs=4000、Isaac Gym Preview 4、Jetson TX2 NX、docker 镜像 3.5GB、PowerProtect level 9 等工程细节)
- walk-these-ways—project-page — 项目主页(摘要、CoRL 2022 Oral、相关工作、bibtex)
- arXiv 原文 PDF(2212.03238,不入 git):见上方 arXiv 链接