ANYmal Parkour:教四足机器人跑酷
🎯 为什么重要:跑酷 = 把四足机器人逼到执行极限
跑酷不是简单的「走路 + 避障」。它有五个独特难点(论文 §I 列得非常清楚):
- 步态不再周期:不能用固定 trot 步态,要根据障碍切换跳/爬/钻
- 状态估计漂移:高冲击力 + 多接触点让 IMU/里程计严重漂移
- 视野被遮挡:自遮挡 + 相机视角有限,只能看到部分场景
- 规划器要懂能力边界:必须推理环境、理解机器人运动学/动力学能力、知道低层控制器的极限,才能生成可行轨迹
- 实时性苛刻:跳跃落地的那 0.1 秒,任何延迟都会摔
传统方法(MPC + 接触规划)需要预先知道环境、离线算路径,且只能处理「静态稳定」动作——没法跑酷。论文之前最接近的工作 [32](Barkour)也需要人工设计路径 + 动捕系统。ANYmal Parkour 是第一个全自动解决方案:无专家演示、无离线计算、无预先地图。
💡 核心思想:三层分工 + 技能库 + 隐式感知
整个系统分成三个模块,每个都是神经网络,全部在仿真里训完再上真机:
🛠️ 工程关键设计
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 混合 PPO 输出 | 策略头一分为二:高斯分布给「位置/朝向/时间命令」+ 类别分布给「选哪个技能」 | 让一个网络同时做连续控制 + 离散选择,端到端可微 |
| ② 位置式而非速度式命令 | 低层策略不跟踪速度,而是「在限定时间内到达目标位置 + 朝向」 | 支持「停下来精准落点」这种跳跃/攀爬必需的动作 |
| ③ 多分辨率 3D 重建 | 粗网(12.5cm 体素,4m 范围)+ 细网(6.25cm,2m),细网条件化在粗网上 | 近场精细(落脚点)+ 远场全局(路径规划),同时省显存 |
| ④ 自回归反馈 | 把上一帧的重建结果变换到当前帧拼到输入里 | 让网络「记住」之前看过但已离开视野的部分(如桌子的顶面) |
| ⑤ 对称性增强 | 用机器人 X/Y 对称性把每个 transition 复制成 4 份 | 解决「跨上策略只学会向前跨」的不对称问题,加速收敛 |
| ⑥ 域随机化桥接 sim-to-real | 低层策略训练时对 2.5D 高度图加噪声(点位噪声 + 各方向 ≤ 7.5 cm 偏移) | 让策略容忍感知重建与状态估计的偏差,弥合仿真-现实差距 |
单给「目标位置」不够——机器人可能贪快走错路。单给「速度」更糟——没法精准落脚。论文的诀窍是「限时到达指定位置 + 朝向」:策略可以自由选择如何到达(步态、轨迹),但必须在时间到时落到目标点并朝指定方向。消融实验(Table S6)显示:同时去掉时间和朝向,成功率从 98.2% → 81.1%(单去时间 94.7%、单去朝向 89.5%)。
📊 结果:超越人类设计轨迹 + 真机部署
| 维度 | 数字 |
|---|---|
| 跨越速度 | 高达 2 m/s(任何子技能下) |
| 跳跃间隙 | ≤ 1 m |
| 攀爬高度 | ≤ 1 m(爬上 + 爬下各 1m) |
| 钻通道高度 | ≥ 0.4 m |
| 导航成功率(vs 人工轨迹) | 98.2% / 96.3% / 97.6%(三个地形)vs 95.3% / 60.9% / 75.3% |
| 关节使用 | HFE 电机偏转 > 160°,扭矩经常达到极限 85 N·m |
| 训练规模 | IsaacGym 中 4096 并行智能体(策略训练 + 感知数据采集共用);感知模块的稠密 3D 卷积需在 4000 机器人 RL 批次下运行,约占 45 GB 显存;感知网络本身用 2000 条轨迹(每条 100 步)离监督训练 |
🌐 在领域中的位置
它是分层学习跑酷的开山之作。后续工作(如 Humanoid Parkour [Zhuang 2024]、Extreme Parkour [Cheng 2023])把这套思路推到更激进的地形和双足机器人上。属于 T-运动控制 线索中「技能库 + 高层调度」范式的代表。
❓ 常见误区
8 个网络会不会太重、延迟太大?
不会。感知模块异步运行在 NVIDIA Jetson Orin 上,不阻塞主回路;导航 5 Hz、运动 50 Hz,端到端延迟几毫秒。论文专门把 Realsense 相机的点云从 250 ms 延迟的「published point cloud」改成「直接订阅 depth image」(25 ms),关键降低 10 倍延迟。
低层技能是「位置到达」还是「速度跟踪」?
是位置到达式:每个 episode 给定一个目标位置 + 朝向 + 时间,策略在时间到时要尽量接近目标。这比速度跟踪更适合跳跃/攀爬这类需要精准落点的动作。论文消融显示同时去掉朝向和时间输出,成功率掉到 81.1%。
感知模块的「3D 重建」和 elevation map 有何不同?
Elevation map 是 2.5D(只能表示地面高度),无法处理「桌子下面能钻过去」「箱子顶面要爬上去」这种 3D 结构。本文用体素 + 多分辨率,能重建任意 3D 几何,且能 extrapolate 看不见的部分(用边缘点推顶面高度)。
它怎么知道「这个箱子太高爬不上去」?
训练时爬上技能有难度课程(curriculum),最高训 1 m。部署时,导航策略通过感知模块的隐向量推断出箱子超过 1m 时大概率失败,于是选择「绕远路找矮箱子」。这是从数据里学到的「能力边界感知」,不是硬编码。