论文精读:Robot Parkour Learning——用软动力学约束学会极端技能,再蒸馏成单一视觉策略

论文信息

  • 题目:Robot Parkour Learning
  • 作者:Ziwen Zhuang、Zipeng Fu、Jianren Wang、Christopher Atkeson、Sören Schwertfeger、Chelsea Finn、Hang Zhao
  • 会议:Conference on Robot Learning(CoRL)2023,Oral
  • 荣誉:Best Systems Paper Award Finalist(Top 3)
  • 论文:arXiv:2309.05665
  • 项目页:Robot Parkour Learning
  • 代码:ZiwenZhuang/parkour
  • 仿真器:Isaac Gym Preview 4
  • 真机:Unitree A1、Unitree Go1
  • 关键词:Soft Dynamics Constraints、PPO、DAgger、GRU、Depth Vision、Sim-to-Real

一句话结论

这篇论文用一个很巧妙的三阶段路线解决四足跑酷的探索难题:先暂时允许机器人少量穿过障碍,用穿透惩罚和自动课程学出攀爬、跨越、低姿爬行和侧身穿过的初始动作;再恢复真实硬碰撞微调;最后用 DAgger 把五个特权专家蒸馏成一个仅依赖机载深度图和本体感知的 GRU 策略。

可穿透障碍 + 穿透惩罚 + 难度课程
↓ PPO 预训练
五个专用技能初始策略
↓ 恢复硬碰撞
PPO 真实动力学微调
↓ DAgger
Depth CNN + GRU 单一 parkour policy
↓
A1 / Go1 机载部署

A1 和 Go1 完成攀爬、飞跃、低姿爬行和侧身穿越

原论文图 1:同一套系统在低成本四足机器人上完成多类极端障碍技能。图片来源:Zhuang et al., 2023。

1. 论文真正要解决什么

跑酷策略必须同时满足三件事:

  1. Diverse:会跑、攀爬、跨沟、低头、侧身;
  2. Perceptive:从眼前障碍自主选择技能并调整动作;
  3. Deployable:在低成本机器人的机载算力、传感器噪声和电机限制下运行。

但这三件事彼此放大难度。如果从随机策略开始,真实硬障碍会让机器人在尚未探索到攀爬或起跳动作前就被挡住。再把深度图加入 RL,还会同时引入高维视觉、延迟和 Sim-to-Real 问题。

论文的工程回答是:先把“动作怎么学”和“视觉怎么选动作”拆开。

2. 五种专用技能

专家 任务 训练难度范围
Climb 爬上高障碍 0.20~0.45 m 高
Leap 飞跃沟隙 0.20~0.80 m 长
Crawl 从低矮障碍下爬过 0.32~0.22 m 净空
Tilt 侧身穿过窄缝 0.32~0.28 m 宽
Run 快速行走 无障碍

每个专家都用 GRU,输入包含:

  • 29 维本体观测:roll、pitch、机身角速度、关节位置和速度;
  • 上一时刻 12 维动作;
  • 特权视觉信息:障碍距离、高度、宽度和类别 one-hot;
  • 特权物理信息:摩擦、质量、重心、电机强度等。

输出是 12 个关节目标位置,而非直接力矩。

3. 为什么普通 PPO 很难学会 Climb 和 Leap

在真实 hard-contact 仿真中,未训练的机器人面对高墙时大概率只会:

向前走 → 撞墙 → 速度变为 0 → 持续得到差回报

空间中确实存在“先抬前腿、前倾机身、前腿拉升、后腿蹬地”的成功轨迹,但随机动作几乎不可能偶然命中它。

RND 这类好奇心奖励也未必有效:它鼓励到达“难预测”的状态,但窄缝爬行需要的是精细、可控的身体轨迹,而不是单纯的新奇状态。

4. 核心思想:把硬碰撞暂时变成软约束

五种技能的软动力学与硬动力学训练环境

原论文图 2:软约束阶段允许机器人与障碍重叠;硬约束阶段恢复真实碰撞。这是受 direct collocation 中 soft constraint 启发的探索延续方法。图片来源:Zhuang et al., 2023。

软动力学阶段把障碍设成可穿透。这不是要学一个真机上无法执行的穿墙策略,而是先打通从“完全不会”到“大致知道身体应该怎么运动”的梯度通道。

类比轨迹优化:难以一开始就严格满足的接触约束,可以先作为带惩罚的 soft constraint,再逐步收紧。

5. 穿透惩罚如何定义

机器人碰撞体内的采样点与穿透深度

原论文图 3:红色点位于障碍物内,用于近似穿透体积和深度。电机集中的肩/髋部布置更多采样点,以更强地保护真机脆弱区域。图片来源:Zhuang et al., 2023。

对机器人碰撞体内的采样点 pp:

  • 1[p]\mathbb 1[p] 表示该点是否进入障碍;
  • d(p)d(p) 表示该点距障碍表面的穿透深度。

穿透惩罚为:

rpenetrate=−∑p(α51[p]+α6d(p))vxr_{penetrate} =-\sum_p\left(\alpha_5\mathbb 1[p]+\alpha_6d(p)\right)v_x

同时惩罚“多少点穿进去”和“穿得多深”。乘以前向速度 vxv_x 是为了防止 reward hacking:否则策略可能以极高速度瞬间穿过障碍,减少被按时间累积的惩罚。

6. 自动难度课程怎样与软约束配合

每个并行机器人都有难度分数 s∈[0,1]s\in[0,1],初始为 0。episode 结束时:

  • 穿透惩罚优于阈值:ss 增加 0.05;
  • 表现太差:ss 减少 0.05。

障碍尺寸由线性插值得到:

l(s)=(1−s)leasy+slhardl(s)=(1-s)l_{easy}+sl_{hard}

这使训练保持在“可以前进,但还会有一些穿透”的学习边界。如果障碍太容易,策略不需要改进;如果一开始就是最难硬障碍,策略又得不到有用的成功信号。

7. 从 Soft Dynamics 到 Hard Dynamics

预训练接近收敛后,作者恢复真实碰撞,禁止任何穿透,并只使用通用技能奖励继续 PPO 微调。

通用奖励极其简洁:

rskill=rforward+renergy+raliver_{skill}=r_{forward}+r_{energy}+r_{alive}

rforward=−α1∣vx−vxtarget∣−α2∣vy∣2+α3e−∣ωyaw∣r_{forward} =-\alpha_1|v_x-v_x^{target}|-\alpha_2|v_y|^2 +\alpha_3e^{-|\omega_{yaw}|}

renergy=−α4∑j∣τjq˙j∣2,ralive=2r_{energy}=-\alpha_4\sum_j|\tau_j\dot q_j|^2, \qquad r_{alive}=2

它没有为 climb 手写“前脚搭上平台”,也没有为 leap 提供动物参考动作。在不同障碍几何与软约束课程中,同一个“向前 + 节能 + 存活”目标产生了不同动作。

这也解释了 Run 为什么不需要 soft-dynamics 阶段:它没有接触障碍导致的探索死区,可以直接在 hard dynamics 中训练。

8. 第三阶段:五个特权专家蒸馏成单一视觉策略

DAgger 蒸馏阶段的多技能连续障碍训练场

原论文补充图 7:蒸馏环境有 40 条 track,每条包含 20 个障碍,障碍类型与参数随机化。图片来源:Zhuang et al., 2023。

专家依赖障碍真值和物理特权信息,真机无法使用,而且每个专家只会一种技能。因此作者用 DAgger 训练单一策略:

πparkour(stproprio,at−1,Itdepth)≈πstspecialized(stproprio,at−1,etvis,etphy)\pi_{parkour}(s_t^{proprio},a_{t-1},I_t^{depth}) \approx \pi^{specialized}_{s_t}(s_t^{proprio},a_{t-1},e_t^{vis},e_t^{phy})

仿真器知道当前障碍类型,所以在 climb 障碍处查询 climb expert,在 gap 处查询 leap expert。但这个类别不作为 Student 输入;Student 必须从深度图隐式判断该用哪种动作。

DAgger 用 Student 自己的动作推进环境,再在 Student 真正访问到的状态上请 expert 标注。这比只收集 expert 成功轨迹的离线行为克隆更能覆盖部署时的偏离与恢复状态。

9. 统一 Parkour Policy 的网络结构

48×64 depth image
↓ CNN [16, 32, 32]
128-D visual embedding
+ 29-D proprioception
+ 12-D previous action
↓
1-layer GRU, hidden=256
↓
MLP [512, 256, 128]
↓ tanh
12 joint position targets

策略必须有记忆,因为在攀爬中前腿搭上平台后,机身已经靠得很近,相机可能看不完障碍的原始几何;后腿动作需要使用过去帧中的高度和距离信息。

消融中的 MLP 没有记忆,在 Climb 和 Leap 上几乎完全失败,也明显弱于 GRU 的 Crawl 和 Tilt。

10. 深度图 Sim-to-Real

仿真深度图与真实 D435 深度图的处理流程

原论文图 4:仿真端主动降质理想深度,真机端对 D435 输出做空洞填充和时空滤波,使两者更接近。图片来源:Zhuang et al., 2023。

10.1 仿真端

  • depth clipping;
  • pixel-level Gaussian noise;
  • random artifacts。

10.2 真机端

  • 相同的 depth clipping;
  • hole filling;
  • spatial smoothing;
  • temporal smoothing。

这里与 Parkour in the Wild 的思路相似:不企图完整仿真双目成像物理,而是一边把仿真图变差,一边把真实图变稳定,在中间域对齐。

但这也存在代价:时间滤波可以减少闪烁空洞,却可能带来滞后。论文通过随机化前向深度延迟 [0.20,0.26][0.20,0.26] s,让策略提前适应这种不确定性。

11. 不同频率如何协同

模块 频率
D435 深度更新 10 Hz
Parkour policy 50 Hz
PD 力矩控制 约 1000 Hz

CNN 异步处理最新深度图,50 Hz GRU 在每个控制周期读取最新 visual embedding。因此同一张图的 embedding 会被重用多次,其间策略依靠本体观测和 GRU hidden state 继续更新动作。

动作是目标关节位置,PD 增益为 Kp=50,Kd=1K_p=50,K_d=1。为防止策略目标位置造成过大力矩,部署时根据当前 q,q˙q,\dot q 反算可安全产生 ±25±25 Nm 的目标位置范围,再对 action 做 clipping。

12. 结果怎么读

12.1 仿真消融

方法 Climb Leap Crawl Tilt Run
Blind 0% 0% 13% 0% 100%
MLP 0% 1% 63% 43% 100%
No Distill 0% 0% 73% 0% 100%
Ours 86% 80% 100% 73% 100%
Privileged Oracles 95% 82% 100% 100% 100%

这张表支撑了四个结论:

  1. 没有视觉,极端技能无法在接触前准备;
  2. 没有 GRU,遮挡后的后半段动作缺少历史几何;
  3. 直接从深度图做多技能 PPO 探索失败;
  4. 蒸馏策略与 privileged oracle 仍有差距,尤其是 Tilt。

12.2 Soft dynamics 真的必要吗

Soft dynamics、RND 和直接 hard dynamics 的训练对比

原论文图 5:带 soft dynamics 预训练的专家学得更快,最终平均成功率约 95%;RND 和从硬碰撞直接训练都无法学会最难的 Climb 和 Leap。图片来源:Zhuang et al., 2023。

这不只是训练速度优势。对 Climb 和 Leap,没有 soft dynamics 的 oracle 成功率也是 0%,说明硬碰撞导致的探索局部最优是结构性问题。

12.3 真机结果

A1 在不同障碍难度下的真机成功率

原论文图 6:视觉 parkour policy 与 blind policy、A1 内置 MPC 及人工切换特殊姿态的 MPC 对比。每个难度进行 10 次试验。图片来源:Zhuang et al., 2023。

A1 上报告的代表性能力:

  • 0.40 m 高障碍(机器人高度的 1.53 倍):80% 成功率;
  • 0.60 m 沟隙(机器人长度的 1.5 倍):80%;
  • 0.20 m 净空低障碍(机器人高度的 0.76 倍):90%;
  • 0.28 m 宽窄缝(小于机器人自身宽度):可侧身通过。

户外还展示了河边 0.6 m 断开石凳、0.42 m 连续高台阶、露营车下方爬行和湿滑草地。

13. 涌现的重试行为

攀爬高障碍首次失败时,策略会把自己从墙边推开,留出助跑空间,然后再次尝试。

作者没有编写“检测攀爬失败 → 后退 → 重试”状态机。该行为来自:

  • GRU 能记住刚才的失败状态;
  • 向前进展奖励使得卡在墙边没有价值;
  • 训练分布中存在偏离和恢复状态;
  • 后退虽然短期远离目标,却可以改善下一次助跑的长期回报。

这是单一 recurrent policy 相比手工 skill switch 的一个优势:失败恢复和技能执行处在同一闭环中。

14. 这篇与 ANYmal Parkour、Parkour in the Wild 的区别

工作 核心训练思想 统一方式 感知输入
Robot Parkour Learning(2023) Soft dynamics 探索 → hard dynamics 微调 DAgger,无统一 RL 微调 单目 egocentric depth
ANYmal Parkour(2023/2024) 专用 locomotion skill + 高层 navigation 层级系统选技能 elevation map / perception modules
Parkour in the Wild(2025/2026) 九专家蒸馏 → 多地形 RL 微调 蒸馏后再统一 RL 四路 depth images

Robot Parkour Learning 首先强调的是极难动作如何被探索出来。Parkour in the Wild 则更关心已有多专家如何合并、修复蒸馏损失并泛化到新地形。

另一个关键差别是:本文统一 Student 停留在 DAgger 目标上,因此其上限严重受各专家和蒸馏冲突约束;Parkour in the Wild 后来增加的 RL fine-tuning 正是为了让 Student 可以偏离专家、修复冲突并创造新的技能组合。

15. 论文的局限性

15.1 环境和技能仍然是人工定义

作者需要手工构建 climb、leap、crawl 和 tilt 障碍生成器。新技能需要新的环境和 expert,并不是开放世界中自动发现任意技能。

15.2 软动力学存在仿真利用风险

穿透惩罚、采样点分布和课程速度如果设计不当,策略可能学会依赖虚假穿透。硬约束微调是必需的,但不保证所有软约束动作都能被修复。

15.3 深度缺少语义和材质信息

同样的几何可能是硬木箱、软垫或湿滑表面。深度图无法直接区分它们,低摩擦 leap 也是项目页列出的失败案例。

15.4 成功边界仍然明显

作者列出的失败包括:

  • 0.8 m 高障碍,约为机器人高度的 3 倍;
  • 低摩擦平台上起跳,后腿滑动导致前向动量不足;
  • 高且柔软的障碍。

这些失败共同指向动力学可行性与材质感知,而不只是“网络再大一点”。

16. 如果我要复现,建议怎么拆

Step 1:先用 Run 打通真机链路

它不需要 soft dynamics,适合先验证 12 维关节目标、PD、力矩 clipping、本体延迟和动力学随机化。

Step 2:只做一个 Climb expert

保留三组对比:

hard dynamics PPO
RND + hard dynamics
soft dynamics pretrain → hard dynamics finetune

同时记录 success、penetration volume、penetration depth、功率和硬约束切换后的性能回落。

Step 3:可视化穿透采样点

重点检查肩/髋电机区域是否有足够高的惩罚密度,以及策略是否找到采样点稀疏区域穿墙。

Step 4:再加 Leap、Crawl 和 Tilt

不要过早训练统一策略。先确保每个 privileged oracle 在超出训练范围的 test obstacle 上仍有一定泛化。

Step 5:实现 Depth CNN + GRU DAgger

蒸馏时必须由 Student rollout,并分别记录每种技能的 action error,否则 Run 等容易地形的数据量可能掩盖 Climb/Leap 失败。

Step 6:单独建立视觉延迟测试

测试 10 Hz 图像在 50 Hz policy 中重复使用,并扫描 0~300 ms 延迟、丢帧、空洞和 temporal filter 强度。对 Leap 而言,延迟会直接改变起跳时机,应作为安全关键指标。

17. 容易误读的地方

误读 1:软动力学就是降低障碍难度

不只是把障碍变矮或变宽。它直接放松了不可穿透约束,改变了可访问状态空间的拓扑结构。

误读 2:最终策略会显式选择五个 skill ID

Student 没有输入障碍类别,也不是高层 selector + 低层 expert。技能识别、切换和执行都被压入同一个 GRU policy。

误读 3:五个专家都直接看深度图

专家看的是障碍距离、尺寸、类别和物理参数真值。只有蒸馏后 Student 使用可部署深度图。

误读 4:同一奖励意味着完全没有人工设计

奖励很简单,但每种技能的障碍生成器、速度命令、穿透权重和课程范围仍是人工设计的。

误读 5:Soft-to-hard 就是 Sim-to-Real

Soft-to-hard 解决仿真内的探索问题。Sim-to-Real 还需要质量、重心、摩擦、电机强度、相机位姿/FOV、视觉和本体延迟随机化,以及深度处理和真机力矩保护。

18. 我认为最值得记住的三点

18.1 探索失败可能来自约束,而不是奖励不够复杂

当硬碰撞把几乎所有随机轨迹挡在障碍前时,再加更多 reward term 不一定有用。暂时放松约束可能比奖励塑形更直接。

18.2 不可行轨迹也可以作为通向可行轨迹的脚手架

软约束预训练中的动作不能直接部署,却可以帮助策略找到正确的动作拓扑,再在硬约束中修正成物理可行轨迹。

18.3 视觉统一策略的价值不只是减少网络数量

单一 recurrent policy 可以在连续障碍之间自主过渡,并把失败恢复也纳入同一个闭环。这比人工切换 MPC 特殊模式更接近真正的自主跑酷。

19. 最终评价

Robot Parkour Learning 最亮眼的地方不是某一个动作纪录,而是它用统一方法解决了几种完全不同的极端探索问题。

它的训练逻辑非常值得复用:

若严格约束让成功状态几乎无法被探索,
先构造一个可微、可穿越的软问题,
用违规成本引导策略靠近可行集,
再恢复真实约束完成最后投影。

同时,它也为后续 Parkour in the Wild 留下了清晰问题:纯 DAgger 统一仍受 expert 上限、动作冲突和视觉差异限制;如何在蒸馏后再用 RL 让 generalist 超越 expert,是自然的下一步。

参考资料

  1. Zhuang et al., Robot Parkour Learning, CoRL 2023
  2. 官方项目页、视频与失败案例
  3. 官方开源实现
  4. Parkour in the Wild
  5. ANYmal Parkour
知识共享许可协议