论文精读: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)=(1s)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=α1vxvxtargetα2vy2+α3eωyawr_{forward} =-\alpha_1|v_x-v_x^{target}|-\alpha_2|v_y|^2 +\alpha_3e^{-|\omega_{yaw}|}

renergy=α4jτjq˙j2,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,at1,Itdepth)πstspecialized(stproprio,at1,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
3d打印 ai辅助设计 algorithm algorithms anymal apriltag ardupilot attention axis-angle bang-bang belief encoder blender bode cadquery calibration camera calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i dagger data_struct db depth camera design-pattern direct collocation dots economics eigen elevation map factory-pattern fcpx fiducial marker figure finance forge fov freecad gazebo gdb git gnu gru guitar hardware humanoid ibus imu interest isaac gym isaac lab isaaclab kdl latent variable latex launch learning-notes legged locomotion legged robotics legged-robot life linux linux-kernel mac math matlab matrix memory mlp money motion-control motor moveit mpc mujoco music-theory network neural mapping ocs2 ode openscad operator optimal algorithm optimal-control perceptive locomotion perf performance personal-finance piano pixhawk pixhawk 6c policy distillation ppo privileged learning profiling px4 python qgroundcontrol qos quadrotor realsense reinforcement learning representation learning reward tuning rnn robot robot parkour robotics ros ros2 rtb security shell sim-to-real simulation socket soft dynamics constraints stairs stl stm32 tcp-ip teacher policy teacher student teacher-student temporal convolution thread tools tron1 twist ubuntu uml uncertainty unitree urdf vae valgrind vcxsrv velocity vim web wifi wiring work wsl 中文输入 交叉编译 依赖管理 分支管理 四旋翼 四足机器人 实验诊断 强化学习 机器人 机器人控制 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 自主回充 航模 视觉定位 训练曲线 足式机器人 输入法 配置类 采购记录 音乐 飞控
知识共享许可协议