Locomotion Beyond Feet:让机器人「手脚并用」爬过椅子、翻过墙
🎯 为什么重要:双足的「支撑多边形」实在太小了
论文 §II-A 给了一个干净的几何论证——「支撑多边形」(脚与地面接触面构成的凸包):
💡 核心思想:关键帧(人知识)+ RL(物理纠错)+ 4 个标准姿势(状态机接口)
论文最关键的 insight 是:关键帧动画和 RL 高度互补。关键帧把「人大致知道怎么动」编码成稀疏时间点,但开环跑不动;RL 把它磨成能应对扰动的闭环策略。这两个怎么咬起来?看 Fig.2 简化版:
🛠️ 四个工程关键:让「9 个独立技能」能串成一条路
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 关键帧直接在机器人状态空间设计 | 用 MuJoCo GUI 在机器人自己的关节角空间指定 pose + 到达时间,要求每帧静态稳定(CoM 在支撑多边形内);线性插值得参考轨迹 | 绕开「动捕数据 → retarget → embodiment gap」的死亡循环。设计师几小时出一个技能,比传统流水线快一个数量级 |
| ② DeepMimic 奖励 + 大量 domain rand | $r_t = r^{imitate}_t + r^{reg}_t + r^{survival}_t$;imitate 含 pose / velocity / end-effector / CoM 四项;随机化摩擦、电机、初始状态、推力、IMU 噪声(含 colored noise + 随机游走 bias) | 关键帧是开环的——任何扰动都会让物理追踪崩。RL 把它磨成闭环;IMU 噪声模型保证 sim-to-real 不翻车 |
| ③ 4 个标准姿势做接口契约 | 所有技能强制起止于 {站, 蹲, 趴, 仰} 之一;状态机切换只在「同姿势」间接 | 9 个策略独立训练,每个的终点分布跟下一个的起点分布天然对齐——不需要 terminal-aligned training 或 meta-composer,简单状态机就够 |
| ④ 视觉 3.1Hz / 控制 50Hz 解耦 | 双目鱼眼 RGB → Foundation Stereo(TensorRT float16,192×256)→ ResNet 分类 8 技能;EMA 平滑 + 置信度阈值切换;用 IMU pitch 检测摔倒触发 recovery | 模式切换是「秒级」决策(地形不会突然变),但平衡是「20ms 级」反应——频率解耦让两件事互不阻塞 |
技能串联历来是 RL 的老大难——A 策略的终点状态分布跟 B 策略的起点分布对不上,强行切换就摔。以往工作要么精细工程化「终点=起点」,要么训一个 meta-composer 网络去桥接。Locomotion Beyond Feet 的回答是:直接立个规矩,所有技能必须停在这 4 个姿势之一。一个「蹲」姿势的分布对所有技能都一样,自然能无缝接力。这把一个复杂的学习问题变成了一个约束设计问题。
📊 结果:4 类极端地形零样本过,且对尺寸鲁棒
| 地形 | 尺寸(相对腿长) | 结果 |
|---|---|---|
| 椅下空间 | 53 cm(<机器人身高) | 必须蹲伏才能过 |
| 膝盖高墙 | 25 cm = 48% 腿长 | 必须翻越 |
| 膝盖高平台 | 44% 腿长 | 必须爬上 + 爬下 |
| 陡楼梯(上下) | 每级 16% 腿长 | 对机器人尺度极极端 |
视觉分类器(真机测试集 3,394 张,Tab./Fig.6 confusion matrix):
| 指标 | 数字 |
|---|---|
| 整体准确率 | 93.9% |
| 主要混淆 | 相邻技能切换瞬间(几何上本就模糊) |
| 下游处理 | EMA 平滑 + 置信度阈值即可解决 |
| 训练数据 | 22,389 张训练 + 5,598 张验证(18 分钟真机录制 + 150 分钟离线深度估计) |
深度估计(Foundation Stereo,Fig.5):
| 分辨率 | 像素 MAE | Chamfer 距离 | 推理速度 |
|---|---|---|---|
| 480×640(原) | 59 mm | 17 mm | 0.5 Hz |
| 192×256(部署) | 62 mm | 19 mm | 3.1 Hz(TensorRT float16,6× 提速) |
系统鲁棒性(Fig.7):
| 维度 | 结果 |
|---|---|
| 墙高度泛化 | 设计于 12cm 墙 → 9~14cm 全部成功(仅靠 proprio,不用视觉) |
| 平台高度泛化 | 设计于 11cm 平台 → 8.5~13cm 全部成功 |
| 地形序列泛化 | 5 种不同障碍顺序(含 2 连椅)零样本全过 |
| 真机平台 | ToddlerBot(30 DoF 开源小人形) |
🌐 在领域中的位置
这篇是 T12 敏捷移动 线索里少数明确「人形用全身接触」的工作——和它最接近的是 BeyondMimic(扩散+追踪)和 Humanoid Parkour(仅腿)。区别是:前者管「任意参考动作」、后者管「腿能跳多远」,这篇管「腿走不过去的地方」——一个此前空白的细分。
❓ 常见误区
关键帧是手工调的,这算「学习」吗?
算——而且作者明确把这当成优点。关键帧是「人知识的最稀疏编码」,提供参考轨迹;RL 把它磨成能应对扰动的闭环策略。完全端到端学一个「爬墙」技能可能要数月,关键帧 + RL 只要几小时出参考、几天出策略。这是一种「人机协同设计」的范式,跟「全部让网络自己学」相反。
为什么不用动捕数据?
动捕路径有三个坑:(1) embodiment gap——人和机器人形态不同,retarget 会失真;(2) 缺动态信息——动捕只有运动学,没有接触力;(3) 采集+retarget+调 reward 周期长。关键帧在机器人自己的关节空间里设计,天然避开前两个问题,迭代速度快一个数量级。
9 个技能逐个训,是不是很费人力?
是。论文 §V 承认这是主要局限——「关键帧设计需要人工和领域专家」。但每个技能只花几小时(出关键帧)+ 标准 PPO 训练,全流程比传统动捕路径快。作者把「自动通过优化生成关键帧」列为未来方向。
线性插值不会让动作很机械吗?
会,作者也承认(§V 局限之二)。但只要每帧静态稳定,线性插值的轨迹就是物理可行的——RL 在追踪时会自然加上平滑的协调动作,最终真机上看不出「线性」。当然用 spline / learned interpolation 会更自然,这是改进空间。
视觉只在 3.1Hz 运行,够用吗?
够。论文的逻辑是「模式切换是秒级决策,平衡是 20ms 级反应」——两件事用不同频率。地形不会 0.3 秒内突变,所以 3.1Hz 看一眼「接下来该走/爬/翻?」完全够。底层 50Hz 控制独立运行,专心做平衡。这种频率解耦是 legged locomotion 系统设计的老套路。
翻墙有时候在真机会失败,为什么?
论文 §V 诚实承认:「接触建模近似导致墙翻技能在仿真成功但真机偶发失败」。原因是 MuJoCo 的接触模型跟真实软/硬接触有差异,尤其在多接触同时发生时。这是 sim-to-real 的通用问题,作者把它列为未来研究方向。