端到端的导航技术NeuPAN论文讲解
端到端的导航技术NeuPAN 深度剖析
作者:Frank Fan(2025-06-01)
记录这篇论文的初衷: 最近在尝试实现一个类似的工作即端到端的机器人导航(要能够穿过窄通道的场景),朋友推荐了这篇论文,虽然它其实并非一个纯粹的端到端,但看作者的demo视频效果已经很不错了,就解读下吧。
目录
- 引言
- 问题定义
- 理论基础
- DUNE 网络
- NRMP 控制器
- 端到端调参
- 系统集成
- 代码结构
- 仿真与实车
- 调参指南
- 实验结果
- FAQ
- 总结
- 参考文献
1 引言:为什么要做无图导航
在传统移动机器人导航中,“建图-定位-规划”流水线非常成熟,但在密集动态环境(仓库、配送中心、拥挤人群 …)下有明显痛点:
- 即时性不足 — 地图维护耗时,延迟导致规划错位;
- 计算开销大 — 高分辨率地图 + 全局搜索,复杂度飙升;
- 鲁棒性差 — 环境小变化就需重建图,系统易卡死。
无图导航(Map-Free Navigation) 思路:直接依赖实时传感器(LiDAR / 点云),跳过显式建图。
本文聚焦 NeuPAN (Neural Proximal Augmented Navigation):
- 用 局部距离场 LDF 强化碰撞约束;
- 把对偶迭代展开成轻量网络 DUNE;
- 在 MPC 中嵌入 LDF 正则,形成 NRMP;
- 最终 30 Hz 实时运行。
2 问题定义
2.1 输入输出
-
输入
- 时刻 t t t:
- 机器人状态 s t = [ x t , y t , θ t ] ⊤ \mathbf{s}_t=[x_t,y_t,\theta_t]^{\!\top} st=[xt,yt,θt]⊤
- 点云 P t = { p t i } i = 1 N , p t i ∈ R 3 \mathcal{P}_t=\{\mathbf{p}^i_t\}_{i=1}^N,\;\mathbf{p}^i_t\in\mathbb{R}^3 Pt={pti}i=1N,pti∈R3
- 目标位姿 s goal \mathbf{s}_{\text{goal}} sgoal
- 时刻 t t t:
-
输出
- Horizon H H H 的控制序列
U t = { u t 0 , … , u t H − 1 } , u t h = [ v t h ω t h ] U_t=\bigl\{\mathbf{u}^0_t,\dots,\mathbf{u}^{H-1}_t\bigr\},\quad \mathbf{u}^h_t=\begin{bmatrix}v^h_t\\\omega^h_t\end{bmatrix} Ut={ut0,…,utH−1},uth=[vthωth]
- Horizon H H H 的控制序列
2.2 约束
-
运动学 (差速)
x t + 1 = x t + v t cos θ t Δ t , y t + 1 = y t + v t sin θ t Δ t , θ t + 1 = θ t + ω t Δ t . \begin{aligned} x_{t+1}&=x_t+v_t\cos\theta_t\,\Delta t,\\ y_{t+1}&=y_t+v_t\sin\theta_t\,\Delta t,\\ \theta_{t+1}&=\theta_t+\omega_t\,\Delta t. \end{aligned} xt+1yt+1θt+1=xt+vtcosθtΔt,=yt+vtsinθtΔt,=θt+ωtΔt. -
碰撞安全
∥ c ( s t ) − p t i ∥ 2 ≥ D safe , i = 1 … N . \bigl\|\mathbf{c}(\mathbf{s}_t)-\mathbf{p}^i_t\bigr\|_2\ge D_{\text{safe}},\quad i=1\dots N. c(st)−pti 2≥Dsafe,i=1…N. -
软约束 — 平滑/能耗/跟踪;
-
实时性 — 整体延迟 ≤ 33 ms \le{}33\text{ ms} ≤33 ms (30 Hz)。
3 理论基础:碰撞约束 → 局部距离场
3.1 从距离约束到 SOCP
对单点距离:
g i ( s ) = ∥ [ x , y ] ⊤ − p i ∥ 2 − D safe ≥ 0. g_i(\mathbf{s})=\|\,[x,y]^{\!\top}-\mathbf{p}^i\|_2-D_{\text{safe}}\ge0. gi(s)=∥[x,y]⊤−pi∥2−Dsafe≥0.
引入二阶锥,可写成凸 SOCP。
3.2 对偶形式
把 N N N 个约束写成拉格朗日对偶,得到对偶变量 { μ i , λ i } \{\mu_i,\boldsymbol\lambda_i\} {μi,λi};
可行当且仅当对偶最优值 ≥ 0 \ge0 ≥0。 μ i \mu_i μi 越大表示点 i i i 越危险。
3.3 局部距离场 (LDF)
定义
L ( p i ; s ) = ( μ i ∗ , λ i ∗ ) \mathcal{L}(\mathbf{p}^i;\mathbf{s})=\bigl(\mu_i^*,\boldsymbol{\lambda}_i^*\bigr) L(pi;s)=(μi∗,λi∗)
并用 PIBCD 迭代并行求解。迭代少量步即够准确。
4 DUNE 网络:把对偶迭代展开成 6 层 MLP
“梯度上升 + 投影” ➜ 线性层 + ReLU/Clamp
-
输入特征 [ Δ x , Δ y , n x , n y , D safe ] \bigl[\Delta x,\Delta y,n_x,n_y,D_{\text{safe}}\bigr] [Δx,Δy,nx,ny,Dsafe]
-
单层计算
mu_next = ReLU( fc_mu([mu_prev, feat]) ) lam_hat = fc_lam([lam_prev, feat]) lam_next = projection(lam_hat, mu_next)
-
6 层 + hidden dim 32 → 20 k 点推理 ≈ 1 ms(GPU)。
5 NRMP:把 LDF 嵌进 MPC
在 MPC 基础代价 J base J_{\text{base}} Jbase上,加 LDF 正则项。
J LDF = α ∑ h = 0 H − 1 ∑ i = 1 N μ i [ ( c h − p i ) ⋅ n i − D safe ] . J_{\text{LDF}}=\alpha\sum_{h=0}^{H-1}\sum_{i=1}^N \mu_i\bigl[\bigl(\mathbf{c}_h-\mathbf{p}^i\bigr)\!\cdot\!\mathbf{n}^i-D_{\text{safe}}\bigr]. JLDF=αh=0∑H−1i=1∑Nμi[(ch−pi)⋅ni−Dsafe].
再加近端项
b k 2 ∣ s h − s ˉ h ∣ 2 \frac{b_k}{2}|s_h - \bar{s}_h|^2 2bk∣sh−sˉh∣2
以保证收敛。整个问题降为 凸 QP,OSQP 求解耗时 1–3 ms。
6 端到端可学习 (Meta-Learning)
可训练参数包括: DUNE 权重 \textbf{DUNE 权重} DUNE 权重以及
α , b k , Q , R \alpha,\quad b_k,\quad Q,\quad R α,bk,Q,R
外环损失为:
碰撞次数 + 到达时间 + 能耗 \text{碰撞次数} + \text{到达时间} + \text{能耗} 碰撞次数+到达时间+能耗
使用 CVXPYLayers \textbf{CVXPYLayers} CVXPYLayers 或 有限差分 \textbf{有限差分} 有限差分 方法获取梯度。
7 系统集成
点云下采样与法向估计(Open3D)
DUNE(GPU) → \rightarrow → μ , λ \mu, \lambda μ,λ
NRMP(CPU 上使用 OSQP)
以 30 Hz 的频率,通过 ROS 节点发布 /cmd_vel
8 代码结构
neupan/├─ launch/├─ src/│ ├─ neupan_node.py # 主循环│ ├─ dune_inference.py # DUNE│ ├─ nrmp_solver.py # MPC(QP)│ └─ preprocess.py├─ models/dune.py└─ scripts/train_dune.py
9 仿真与实车
- ROS-Stage 差速机器人
- Gazebo + Unitree 轮腿
- LGSVL 自动驾驶
- 实车 Jetson AGX — DUNE TorchScript + OSQP 多线程。
10 关键超参
类别 | 名称 | 建议 | 备注 |
---|---|---|---|
DUNE | num_layers | 6–8 | 层数越多越准但慢 |
DUNE | hidden_dim | 32 | 16 会欠拟合 |
NRMP | H | 10–20 | 1–2 s 预测窗 |
NRMP | $\alpha$ | 1–5 | 越大越保守 |
NRMP | $b_{\text{init}}!/b_{\max}$ | 20 / 150 | 控制收敛步幅 |
11 实验结果
场景 | 方法 | 成功率 % | 平均时长 s | MPC 均耗 ms |
---|---|---|---|---|
Stage-corridor | A*+PP | 85 | 15.2 | — |
Stage-corridor | NeuPAN | 100 | 11.2 | 2.8 |
Gazebo-Unitree | ORB-SLAM2+TEB | 90 | 14.5 | — |
Gazebo-Unitree | NeuPAN | 96 | 10.8 | 3.1 |
12 FAQ
-
OSQP 超时 → 点云采样:
M ≤ 1000 M \leq 1000 M≤1000
放宽参数设置为eps_rel = 1e-2
。 -
DUNE 预测漂 → 增加数据量 / hidden_dim
-
轨迹抖动 → 减小 $\alpha$、增 $b_{\text{init}}$
13 总结
- LDF = 对偶距离;DUNE 把求解写成 6 层网络;
- NRMP = MPC + LDF 正则,QP 实时;
- ROS 30 Hz 实测 OK。
14 参考文献
- Han Z. “NeuPAN: Dual-regularized End-to-End Navigation”, RA-L 2025.
- Lynch K. Modern Robotics, CUP 2017.
- CVXPY Tutorial — https://www.cvxpy.org/tutorial/
- OSQP Docs — https://osqp.org/docs/
代码仓库:https://github.com/yourname/neupan
一句话总结
“碰撞约束 ➜ SOCP 对偶 ➜ LDF ➜ MLP ➜ QP”
我们先把“撞没撞”这个硬约束 软化 成带权重的惩罚,再把“权重”丢给一个小网络实时估;最后让标准优化器带着这堆“权重”去求解控制。如此就把“几万条非线性约束”的大难题压缩成 “一次 1-3 ms 的小 QP”。这就是 NeuPAN 能 30 Hz 跑实时的秘诀,也是它能做端到端训练的根本原因。