论文:NavRL: Learning Safe Flight in Dynamic Environments
期刊:IEEE RA-L 2025
作者:Zhefan Xu, Xinming Han, Haoyu Shen, Hanyu Jin, Kenji Shimada
代码:https://github.com/Zhefan-Xu/NavRL

NavRL 研究的是无人机在动态环境中的局部导航:一边朝目标飞,一边躲开静态障碍和移动的行人。它的做法分三步:先把感知结果整理成几何化的状态,再用 PPO 训练一个输出速度的策略,最后用基于速度障碍(Velocity Obstacle)的安全层修正危险动作。整套系统在 Jetson Orin NX 上实时运行,并且从仿真零样本迁移到了真机。

这篇论文与“动态未知环境中的强化学习局部导航与真机部署”这个方向几乎完全重合:动态障碍感知、RL 决策、安全兜底、机载部署,这条链路它已经完整走了一遍。它的长处可以直接借鉴,短处也正好是后续最容易切入的地方。

一、要解决什么问题

传统局部规划通常拆成障碍预测、建图、轨迹优化等多个模块,参数多,换一个环境往往就要重新调。学习方法的适应性更好,但如果直接把图像作为输入,仿真和真实画面差别很大,很难迁移;而且神经网络一旦出错没有兜底,不敢直接上真机。

NavRL 想同时解决这几件事:训练一个能躲静态和动态障碍的局部策略,让它能稳定地迁移到真实无人机上,并在策略失误时有一个足够轻量的安全机制。

二、方法

整体流程如下。静态障碍和动态障碍分成两条支路处理,汇合后送入策略网络:

RGB-D 图像、自身状态、目标点

静态障碍:体素地图 + 射线距离

动态障碍:检测、跟踪、测速

状态编码 + PPO 策略网络

速度障碍安全层

无人机速度指令

RGB-D 图像、自身状态、目标点

静态障碍:体素地图 + 射线距离

动态障碍:检测、跟踪、测速

状态编码 + PPO 策略网络

速度障碍安全层

无人机速度指令

环节 具体做法 作用
静态障碍建模 occupancy voxel map + 3D ray casting 把复杂的静态环境压缩成局部可通行性表示
动态障碍建模 检测、分类、跟踪、测速 显式保留动态目标的位置、速度和尺寸
策略学习 PPO + actor-critic + Beta 动作分布 学习目标驱动的局部速度控制
安全修正 VO-inspired action projection 对网络失误做轻量的几何纠偏
大规模训练 Isaac Sim 并行训练 1024 架四旋翼 加快收敛,增加数据多样性

1. 静态障碍:用射线距离代替整张地图

作者先用深度图在线构建三维占据体素地图,但并不把整张地图送进网络,而是从无人机当前位置向各个方向做射线投射(ray casting),记录每个方向离障碍有多远,得到一个二维距离矩阵。

网络看到的是“哪些方向空、哪些方向堵”,而不是图像纹理或稀疏的体素。输入维度小了,仿真和真实环境之间的差异也小了。

2. 动态障碍:单独检测和跟踪

会动的障碍不进体素地图,而是单独处理:用 U-depth detector 和 DBSCAN detector 检测,YOLO 分类,Kalman filter 跟踪,最后得到每个动态障碍的相对位置、距离、速度和尺寸。

这样策略不仅知道前面有东西,还知道它往哪儿动、动多快。需要说明的是,这部分检测与跟踪主要沿用作者之前的工作,不是本文的核心贡献,但对真机部署非常重要。

3. 策略网络:PPO 输出有界速度

静态距离矩阵和动态障碍矩阵分别经过 CNN 提取特征,再与无人机自身状态拼接,送入 actor-critic 网络,用 PPO 训练。

这里有三处设计值得注意:

  • 静态障碍和动态障碍走两条独立支路;
  • 所有量都表示在目标坐标系(goal coordinate frame)下;
  • 动作是有上下限的速度指令,用 Beta 分布参数化,而不是姿态、电机转速或离散动作。

4. 安全层:把危险速度投影到安全区域

网络输出一个候选速度 VrlV_{\mathrm{rl}}。如果它不落在任何速度障碍区域内,就直接执行;如果会导致碰撞,就求解一个小规模的线性约束优化,找到离 VrlV_{\mathrm{rl}} 最近的安全速度。

速度障碍安全层示意:网络输出的速度落在会相撞的锥形区域内,安全层把它投影到区域边界上最近的安全速度

图中红色锥形区域是速度障碍:只要无人机保持这个区域内的速度,就会在一段时间内撞上障碍物。网络输出的 VrlV_{\mathrm{rl}} 恰好落在里面,安全层把它挪到锥形边界上离它最近的点,改动尽量小。

策略负责飞得好,安全层负责不出事。真机系统一般不敢把最终控制权完全交给神经网络,这种串联结构很实用。

5. 哪些算是真正的创新

严格来说,这篇论文的创新在系统层面,理论上的新东西不多:

  1. 面向仿真到真机迁移的状态表示:静态射线距离 + 动态目标状态;
  2. 目标坐标系下的有界速度动作,用 Beta 分布处理连续有界动作;
  3. 基于速度障碍的安全投影,降低黑盒策略失误带来的碰撞风险;
  4. 用 Isaac Sim 同时训练上千架四旋翼,并完成零样本真机部署。

PPO、CNN 编码器和 Kalman 跟踪本身都是现成的方法。

三、关键公式

论文的公式不多,重点是弄清每个公式在系统里负责什么。

公式 / 对象 在系统里的作用 需要理解的点
MDP 目标公式 (1) 定义 RL 的总体优化目标 这是逐时刻的局部决策,不是整条轨迹优化
内部状态 (2) 告诉策略“目标在哪、自己怎么动” 用 goal frame 降低坐标系依赖,提升迁移性
动态障碍状态 (3)(4) 显式描述最近的动态目标 关键是知道障碍怎么动
静态障碍状态 (5) 用射线长度编码局部几何 把地图变成局部可通行性表示
动作公式 (6) 输出有界连续速度 速度比低层控制更适合 sim-to-real
奖励公式 (7)-(12) 平衡前进、安全、平滑、高度约束 防止只会躲障碍不前进,或靠乱飞取巧
安全屏蔽公式 (13) 把危险动作投影到安全区域 尽量少改 RL 动作,但不能撞上去

1. 优化目标

论文把问题写成标准 MDP,目标是最大化累计折扣回报:

π∗=arg⁡max⁡π E[∑tγtR(st,at)]\pi^* = \arg\max_{\pi}\ \mathbb{E}\Big[\sum_t \gamma^t R(s_t, a_t)\Big]

网络不生成整条轨迹,而是每个时刻根据当前感知状态输出一个速度,属于反应式的局部决策。

2. 状态

无人机自身状态:

Sint=[ 目标方向单位向量, 到目标距离, 当前速度 ]S_{\mathrm{int}} = \big[\,\text{目标方向单位向量},\ \text{到目标距离},\ \text{当前速度}\,\big]

到目标的相对位置被拆成方向和距离,网络不必自己从坐标差里学方向归一化,训练更稳定。这些量都在目标坐标系下表示,弱化了绝对世界坐标的影响,策略学到的更接近“朝目标前进时如何避障”这种通用技能。

动态障碍状态:

Di=[ 相对方向单位向量, 相对距离, 障碍速度, 障碍尺寸 ]Sdyn=[ D1, D2, …, DNd ]\begin{aligned} D_i &= \big[\,\text{相对方向单位向量},\ \text{相对距离},\ \text{障碍速度},\ \text{障碍尺寸}\,\big] \\ S_{\mathrm{dyn}} &= \big[\,D_1,\ D_2,\ \dots,\ D_{N_d}\,\big] \end{aligned}

每个动态障碍是一组带运动属性的对象,而不是一堆像素。对动态局部导航来说,知道障碍怎么动,往往比看到障碍更重要。

静态障碍状态:

Sstat=[ Rθ0, Rθ1, …, RθNv ]S_{\mathrm{stat}} = \big[\,R_{\theta_0},\ R_{\theta_1},\ \dots,\ R_{\theta_{N_v}}\,\big]

每个 RθiR_{\theta_i} 是一组射线长度,表示不同方向上与静态障碍的距离,相当于一张稠密的局部可通行性描述。

3. 动作

网络先输出归一化速度,再线性映射到最大速度范围内:

VctrlG=vlim (2 V^ctrlG−1),V^ctrlG∈[0,1]V^{G}_{\mathrm{ctrl}} = v_{\mathrm{lim}}\,\big(2\,\hat V^{G}_{\mathrm{ctrl}} - 1\big), \qquad \hat V^{G}_{\mathrm{ctrl}} \in [0, 1]

输出的是有明确边界的速度,而且在目标坐标系下;网络参数化的是 Beta 分布,天然适合有界连续动作。这样的动作既好学,也容易跨平台迁移,人也方便理解和监督。

4. 奖励

r=λ1rvel+λ2rss+λ3rds+λ4rsmooth+λ5rheightr = \lambda_1 r_{\mathrm{vel}} + \lambda_2 r_{\mathrm{ss}} + \lambda_3 r_{\mathrm{ds}} + \lambda_4 r_{\mathrm{smooth}} + \lambda_5 r_{\mathrm{height}}

奖励项 形式 鼓励什么
rvelr_{\mathrm{vel}} 目标方向单位向量 · 当前速度 沿目标方向快速前进
rssr_{\mathrm{ss}} 平均 log(射线距离) 远离静态障碍
rdsr_{\mathrm{ds}} 平均 log(与动态障碍的距离) 与移动障碍保持间距
rsmoothr_{\mathrm{smooth}} −∥vt−vt−1∥-\lVert v_t - v_{t-1}\rVert 速度变化平滑
rheightr_{\mathrm{height}} 惩罚过度上升 不靠往高处飞来避障

两个安全项用 log 而不是线性距离:离障碍很近时惩罚变化剧烈,离得足够远后再远一点收益就很小。平滑项在真机上很重要,没有它,RL 很容易学出“能躲,但飞得很抖”的控制。

最后一项很实用:很多 RL 策略确实会钻“飞高一点就没有障碍”这种空子。

5. 安全投影

min⁡Vsafe∥Vsafe−Vrl∥s.t.Vsafe 位于各个速度障碍区域之外Vmin⁡≤Vsafe≤Vmax⁡\begin{aligned} \min_{V_{\mathrm{safe}}}\quad & \lVert V_{\mathrm{safe}} - V_{\mathrm{rl}} \rVert \\ \text{s.t.}\quad & V_{\mathrm{safe}}\ \text{位于各个速度障碍区域之外} \\ & V_{\min} \le V_{\mathrm{safe}} \le V_{\max} \end{aligned}

尽量少改网络的动作;只有当网络动作会导致碰撞时,才把它推到最近的安全速度上。

四、实验

项目 内容
训练平台 NVIDIA Isaac Sim,RTX 4090,约 10 小时,并行训练 1024 架四旋翼
仿真测试 Gazebo,包含走廊场景以及高密度静态 / 动态 / 混合障碍环境
真机平台 自定义四旋翼 + Jetson Orin NX + Intel RealSense D435i + LIO
对比方法 EGO-Planner、ViGO、去掉安全层的 NavRL
核心指标 训练成功率、训练回报、平均碰撞次数、各模块时延

ViGO 是作者之前做的 vision-aided dynamic planner。训练成功率指从起点无碰撞到达目标的比例,平均碰撞次数统计 20 次运行。

1. 课程学习明显提高成功率

训练环境为 50 m × 50 m,动态障碍数量按 60 → 80 → 100 → 120 逐步增加。在相同训练时间下:

动态障碍数量 不用课程学习 使用课程学习
80 74.51% 82.71%
100 62.30% 80.96%
120 54.98% 68.65%

动态障碍越多,课程学习带来的提升越大。对动态障碍局部导航来说,它是训练能否稳定的重要条件。

作者还比较了不同并行机器人数量下的训练回报:机器人越多,收敛越快,最终回报也越高。如果后续也用 Isaac Sim 或 OmniDrones 做大规模并行训练,训练吞吐量很可能决定动态交互策略能不能学出来。

2. 优势集中在动态和混合环境

在 20 m × 40 m 的高密度测试地图上,平均碰撞次数如下(— 表示笔记中没有记录该项):

环境 EGO-Planner ViGO NavRL(无安全层) NavRL
静态 0.45 0.80 0.95 0.65
纯动态 — 3.15 2.70 0.85
混合 — 4.40 4.60 2.10

从这张表可以读出两点:

  • 在静态环境里,NavRL 并不比 EGO-Planner 好(0.65 对 0.45)。它的价值在于动态和混合场景:纯动态环境的碰撞从 ViGO 的 3.15 降到 0.85,混合环境从 4.40 降到 2.10。
  • 去掉安全层后,纯动态环境的碰撞从 0.85 升到 2.70,混合环境从 2.10 升到 4.60。只靠 RL 策略本身还不够稳,安全层在动态环境里几乎是决定性的组件。

3. 机载时延

Jetson Orin NX 上各模块的运行时间:

模块 时延
静态感知 15 ms
动态感知 27 ms
RL 策略 7 ms
安全层 16 ms

合计约 65 ms,对应约 15 Hz,可以实时运行。瓶颈不在策略网络,而在前端感知和安全层。

4. 真机实验

作者在室内布置静态障碍,并让行人朝无人机走来。无人机零样本从仿真迁移到真实平台,在有行人干扰的情况下安全到达了目标。

5. 实验够不够充分

这些实验足以说明“这是一个可部署、在动态环境中有效的 RL 局部导航系统”,但不足以说明“这是动态无人机导航的通用最优方案”:

  • 对比方法不够丰富,缺少更强的 RL 方法和混合方法;
  • 真机实验证明了可行性,但规模有限;
  • 主要指标是碰撞次数,缺少效率、舒适性、死锁率、TTC 裕度等更细的分析;
  • 最大速度只有 2.0 m/s,偏安全导航,不是高速敏捷飞行。

五、局限

局限 原因 可能失败的场景 怎样验证
依赖前端感知质量 策略直接依赖动态障碍的检测、关联与速度估计 多人交错、遮挡、低光、深度噪声大、目标突然加速 做漏检率、测速噪声、感知时延的消融
动态障碍模型过于简化 障碍被抽象成 bounding box / sphere,用局部几何近似 非刚体目标、人群交互、急转弯目标、多障碍博弈 构造不同运动模型的场景,统计安全层触发率与碰撞率
安全层偏保守 只做局部动作投影,不理解长期通行结构 密集人群、窄门会车、短时堵塞 统计死锁率、等待时间、到达时间
状态表示丢失部分信息 射线图和对象级状态高效,但丢掉了纹理、语义和细几何 复杂立体场景、细长障碍、语义约束强的环境 与更丰富的地图或语义状态做消融
实验覆盖面有限 论文重点是先证明能飞、能避障、能上机 室外强光、大场景长航程、高速飞行、密集近距离交互 扩展到更复杂的真实环境和长期测试

其中影响最大的是第一条:真机部署时,这套系统的上限主要由前端感知和安全层共同决定,而不是策略学不学得会。

六、可以继续做的方向

围绕这篇论文继续做研究,应优先选择能解决部署问题、并且能用实验验证的方向,而不是只换一个网络结构。

方向 针对的不足 思路 难度
考虑感知不确定性的安全层 安全层默认感知可信,但真实的检测和测速都有噪声 把检测框、速度估计和跟踪协方差引入 VO 约束,做 risk-aware / chance-constrained shield 中等偏高
对遮挡和短时丢失鲁棒的记忆策略 目标被遮挡后重新出现时,当前策略未必稳 加入 track history、短时记忆或显式意图预测 中等
RL + 短时规划的混合框架 反应式策略加安全层在密集动态环境中可能过于保守,甚至卡住 RL 给出局部意图,再由 MPC、采样或轨迹优化生成短时可执行轨迹 高
面向真机的鲁棒训练 论文证明了能迁移,但对迁移边界分析不足 把真实日志中的噪声、时延、漏检、模糊加入训练,做多种随机化 中等
人类意图建模 目前只处理“障碍在动”,没有建模“障碍想怎么动” 引入行人意图预测和 social navigation 约束 高,且需要系统的人机交互实验

较推荐的组合是:感知不确定性建模 + 安全层升级 + 面向真机的鲁棒训练。这条线直接针对 NavRL 最薄弱的地方,也最容易形成“动态未知环境 + 真机部署”的完整论文故事。

七、总体评价

只看算法新颖性,NavRL 并不出众;但从“系统能不能真正落地”来看,它很有价值。它回答的问题是:RL 能不能和感知、安全机制、机载计算一起,组成一个真的能飞的动态导航系统。

这篇论文值得读,也值得复现,更值得在它暴露出来的问题上继续往前推。复现时建议优先关注这几个模块:状态表示的构造、射线投射的静态编码、动态目标跟踪接口、奖励函数实现、VO 安全层、Isaac Sim 并行训练配置,以及 PX4 / Jetson 的部署链路。