# 6. 轨迹规划综述(Survey) > **本文范围**:局部**轨迹规划**与运动控制的**动机、历史、分类、算法谱系**(含**时空联合**优化)、工程选型与 Autonomy 能力边界。 > 形式化与流水线见 [§0 指南](00_guide.md#07-问题形式化);架构见 [§2](02_architecture.md);控制器索引见 [§5](05_controller_algorithms.md)(§5.2–§5.7 对应 `controller/10_*`–`15_*` 专题)。 --- ## 6.1 综述定位 | 维度 | 本文 | 其他文档 | |------|------|----------| | $J(e,u)$ 形式化、FollowPath 时序 | 摘要 | [§0 指南](00_guide.md#07-问题形式化) · [§2 架构](02_architecture.md) | | MPPI / RPP / DWB / TEB 公式 | 摘要 + 链接 | [§10–§15](controller/10_graceful_controller.md) 专题 | | 几何路径 vs 轨迹、时空联合谱系 | **本文 §6.2.4–§6.6.5** | [Planning 综述](../08_Planning/06_survey.md)(全局几何 · [§6.5.4](../08_Planning/06_survey.md#654-采样优化与反应式未内置)) | | 动机、发展史、分类、选型 | **本文** | — | **建议阅读顺序** | 角色 | 路径 | |------|----------| | 选型 / 集成 | §6.4.4 路径/轨迹 → §6.6.4–§6.6.5 时空联合 → [§0.9.1](00_guide.md#091-局部轨迹与时空联合选型) / [§5.8.1](05_controller_algorithms.md#581-控制器与-checker-配对) → §6.15 决策树 | | 算法研发 | §6.2 → §6.4.4 → §6.6.4–§6.6.5 → §6.7 → 各 §10–§15 | | 背景调研 | §6.5 时间轴 → §6.6.4–§6.6.5 → §6.7.13 预测时空 → §6.13 → §6.18 参考文献 | --- ## 6.2 为什么需要局部运动控制 ### 6.2.1 全局规划 alone 不够 全局规划(Planning)在**静态或低频更新**的全局代价地图上输出几何路径 $\mathcal{P}$,通常假设: - 机器人可瞬时达到路径切向速度(忽略动力学) - 路径足够平滑、航点足够密 - 环境变化慢,重规划周期 1–5 Hz 实际运行中会出现: | gap | 后果 | 局部控制职责 | |------|------|--------------| | 动态障碍 | 全局路径被挡 | 局部 costmap + 避障 critic | | 非完整约束 | DiffDrive 不能横移 | 运动学可行 $(v,\omega)$ | | 动力学限制 | 加减速有上限 | VelocitySmoother / 控制器内约束 | | 定位/地图误差 | 路径与真实环境偏差 | 10–50 Hz 闭环纠偏 | | 路径离散 | 折线、急弯 | Lookahead / 优化带 | 因此导航栈经典分层为:**Planning 给「往哪走」**,**Control 给「现在怎么走」**。 ### 6.2.2 deliberative vs reactive | 范式 | 时间尺度 | 代表 | 在 Autonomy 中 | |------|----------|------|----------------| | deliberative | 秒级 | 全局规划、行为树 | `planning` + `navigator` | | reactive | 50–100 ms | DWA、MPPI、势场 | `control` | | hybrid | 双层 | Nav2 栈 | Planning + Control + 重规划 | 局部控制器本质是 **reactive policy** $\pi(x,\mathcal{P}, \mathcal{C}_{local}) \to u$,在控制周期内可重复计算,对传感器延迟更鲁棒。 ### 6.2.3 与 Planning 的边界 ``` Planning (1–5 Hz) Control (10–50 Hz) ───────────────── ──────────────────── 全局几何路径 Path 速度 cmd_vel 静态/全局 costmap 局部 rolling costmap(可选) 无速度 profile 加速度/曲率约束 IsPathValid → 触发重规划 ProgressChecker → Recovery ``` 二者通过 `planning_msgs::Path` 耦合;路径失效时 Navigator 重调 Planning,**不是** Control 的职责。 ### 6.2.4 几何路径、轨迹与局部轨迹规划 导航文献中常混用 *path* 与 *trajectory*;在 Autonomy 分层下建议区分: | 对象 | 符号 / 表示 | 是否含时间 | 典型产出模块 | |------|-------------|------------|--------------| | **几何路径** | $\mathcal{P}=\{p_i\}\subset SE(2)$ | ❌ | `planning`(NavFn / Theta*) | | **速度剖面** | $(v(s),\,\omega(s))$ 或 $v(t)$ | 部分 | time-scaling、Smoother | | **轨迹** | $\tau(t)=(x,y,\theta)(t)$ 或 $(x,y,\theta,v,\omega)(t)$ | ✅ | 控制器 rollout / 优化输出 | | **时空轨迹** | $\{s_k,\,\Delta t_k\}$ 或 $B$(TEB) | ✅ 显式 | TEB、NMPC、CHOMP | **局部轨迹规划**(本文 Control 层)在几何路径之上补全**可行运动**与(可选)**时间分配**: ``` Planning.Path ──► [纯跟踪] PP/RPP/Graceful ──► cmd_vel(t) ──► [采样] DWB/MPPI rollout ──► 隐式 τ(t) ──► [时空联合] TEB/NMPC/CHOMP ──► τ*(t) + u*(t) ``` - **纯几何跟踪**:只优化当前 $(v,\omega)$,不显式存储整条 $\tau(t)$(RPP、Graceful)。 - **滚动 rollout**:在预测时域内生成离散 $\tau_{0:H}$,执行首步(DWB、MPPI)。 - **时空联合**:决策变量同时含**空间形变**与**时间参数**(或控制序列 $\mathbf{U}_{0:H-1}$),适合动态障碍、加速度/jerk 约束。详见 [§6.6.4](#664-时空联合轨迹规划)。 全局 **SE(2) 路径搜索**(栅格 A*、Hybrid A*)见 [Planning 综述 §6.3](../08_Planning/06_survey.md#631-四维分类法);本文聚焦**局部**与 **kinodynamic / 时空** 族。 --- ## 6.3 在导航栈中的位置 | 子问题 | 模块 | 频率 | |--------|------|------| | 定位 | `localization` | 10–50 Hz | | 全局规划 | `planning` | 1–5 Hz | | **局部控制** | **`control`** | **10–50 Hz** | | 编排 | `navigator` | 事件驱动 | ``` Planning.Path ──→ ControllerServer ──→ cmd_vel ──→ 底盘 ↑ ↑ local/global odom + TF costmap ↓(可选) VelocitySmoother ``` Autonomy `control` 对齐 Nav2 `nav2_controller` + `nav2_velocity_smoother` + Goal/Progress Checker 体系。 --- ## 6.4 问题形式化 ### 6.4.1 状态与控制 差速/全向模型常用 $SE(2)$ 或扩展状态: $$ x = (x, y, \theta, v_x, v_y, \omega_z)^\top, \quad u = (v_x^{cmd}, v_y^{cmd}, \omega_z^{cmd})^\top $$ 给定参考路径 $\mathcal{P}=\{p_0,\ldots,p_N\}$,求 $\pi$ 使跟踪误差与控制代价最小: $$ \min_{\pi} \int_0^T \Big( \|e_p\|_Q^2 + w_\theta e_\theta^2 + u^\top R u \Big) dt $$ 约束 $(x,y)\in\mathcal{C}_{free}$,$|v|\leq v_{max}$,$|a|\leq a_{max}$,DiffDrive 另有 $v_y=0$。 ### 6.4.2 误差定义 **全局误差**:$e_p = [x-x_g,\, y-y_g]^\top$,$e_\theta = \mathrm{AngleDiff}(\theta,\theta_g)$。 **Frenet 误差**(沿路径):$e_y$ 为有符号横向距离,$e_s$ 为弧长误差。几何控制器(PP、Stanley)多在 Frenet 或 lookahead 坐标下设计。 ### 6.4.3 约束与能力矩阵 | 约束 | 说明 | 几何跟踪 | DWB/MPPI | TEB/MPC | |------|------|----------|----------|---------| | 几何避障 | footprint 不碰撞 | 弱/可选 | ✅ | ✅ | | 非完整 | DiffDrive | ✅ | ✅ | ✅ | | 运动学 | $R_{min}$ | RPP/MPPI | 部分 | ✅ | | 动力学 | $a_{max}$ | Smoother | 仿真内 | ✅ | | 时间最优 | $\min T$ | ❌ | 弱 | TEB ✅ | ### 6.4.4 轨迹优化问题(局部) 给定初值路径或 pose 序列,局部轨迹规划常写为: $$ \min_{\tau,\,\mathbf{U}} \; \sum_{k=0}^{H-1} \ell\bigl(x_k,u_k\bigr) + \ell_f(x_H) \quad \text{s.t.}\quad x_{k+1}=f(x_k,u_k),\; (x_k,u_k)\in\mathcal{F} $$ - **$\ell$**:跟踪 $\mathcal{P}$、避障、控制 effort、**时间**($\Delta t_k$ 或 $\|u\|$)。 - **$\mathcal{F}$**:非完整、$v,a,\omega$ 界、碰撞约束(硬约束或罚函数)。 - **与 MPPI**:同一 OCP 结构;MPPI 用路径积分采样近似 $\arg\min$,NMPC/TEB 用 NLP/SQP/LM 显式求解([§15 MPC](controller/15_mpc_controller.md))。 **Time-scaling**(仅对几何路径补时间,不做空间 deform):$s(t)$ 单调,$\dot{s}$ 受 $v_{max}(s)$、$\kappa(s)$ 限制(Bang-coast-bang、S 曲线)。RPP/Graceful 的减速区属于**启发式 time-scaling**,非全局时间最优。 --- ## 6.5 发展时间轴 按五个阶段梳理;对照表见 [§6.5.1](#651-分阶段特征表)。
几何跟踪奠基 · 1980s–1990s
1985
Pure Pursuit
CMU 农业机器人;lookahead 曲率跟踪
1990
Feedback Linearization
非完整系统反馈线性化跟踪
1995
Dynamic Window (DWA)
Fox et al. 速度空间实时避障
1995
Stanley
DARPA Grand Challenge 横向控制
ROS 工程化 · 2000s–2010s
2000s
move_base
global_plan + base_local_planner (DWA/Trajectory Rollout)
2009
TEB
弹性带时空优化;动态障碍
2010
DWB
Critic 插件化 DWA;ROS navigation 标准
2014
MPC 普及
嵌入式 QP/SQP 求解器进入移动机器人
2013
CHOMP
轨迹优化协变梯度;障碍势场 + 平滑
2014
TrajOpt / STOMP
序列凸优化 · 随机轨迹优化并行
Nav2 时代 · 2018–2022
2018
Navigation2
Behavior Tree + 插件化 controller
2019
Regulated Pure Pursuit
Nav2 默认;曲率/障碍/目标速度调节
2017–18
MPPI / Path Integral MPC
Williams et al. 信息论随机 MPC
2022
nav2_mppi_controller
Nav2 官方 MPPI + Critics 生态
平滑与全栈整合 · 2023–至今
2023
Graceful Controller
Nav2 平滑跟踪;Park & Kuipers 2011 工程化
2023
Velocity Smoother 独立节点
Nav2 加速度约束后处理
2024+
Learning / Diffusion Policy
数据驱动局部策略(研究→产品探索)
2025
Autonomy control
Nav2 架构移植;Checker/Smoother 就绪,插件待接
### 6.5.1 分阶段特征表 | 阶段 | 年代 | 代表方法 | 核心突破 | 局限 | |------|------|----------|----------|------| | 几何跟踪 | 1985–1995 | PP, Stanley | 极简、低延迟、可证明局部稳定 | 不避障、无时间剖面 | | 反应式采样 | 1995–2010 | DWA, DWB | 实时局部避障、critic 可组合 | 局部最优、单步/短 horizon | | 轨迹优化 | 2010–2018 | CHOMP, TrajOpt, STOMP | 空间轨迹平滑 + 障碍代价 | 局部最优、初值敏感 | | 时空联合 | 2009–2018 | TEB, timed-elastic, NMPC | **位姿 + $\Delta t$** 联合优化 | 计算量、非凸 | | 随机 MPC | 2017–2022 | MPPI | 非线性+约束统一框架 | batch 算力需求 | | 工程栈 | 2018–至今 | Nav2 插件族 | 产品级组合 | 插件矩阵复杂 | | 学习增强 | 2020–至今 | RL, Diffusion | 大数据泛化 | 安全可解释性 | ### 6.5.2 Autonomy 在技术谱系中的位置 ``` 1995 DWA → 2010 DWB → 2018 nav2_dwb → 2022 nav2_mppi / nav2_regulated_pp │ 2025 Autonomy control ├── Checker ×5 ✅ ├── VelocitySmoother ✅ ├── ControllerServer 骨架 ⏳ └── 插件 RPP/Graceful/MPPI ⏳ ``` Autonomy 定位于 **nav2 兼容的局部控制层**:接口与配置对齐,优先落地 RPP/Graceful,MPPI 为可选重算力方案。 --- ## 6.6 算法分类体系 ### 6.6.1 四维分类 ``` 局部轨迹规划 ├── 按方法 │ ├── 几何:PP, Stanley, Graceful, RPP │ ├── 采样:DWA, DWB, MPPI │ ├── 轨迹优化(空间):CHOMP, TrajOpt, STOMP │ ├── 时空联合:TEB, EB, NMPC, kinodynamic RRT* │ └── 学习:RL, imitation, diffusion ├── 按是否显式时间 │ ├── 无时间剖面:PP, RPP, Graceful │ ├── 隐式(rollout 步长):DWB, MPPI │ └── 显式 $\Delta t$ / $H$:TEB, MPC, CHOMP 离散化 ├── 按感知 │ ├── 纯跟踪(仅路径+odom) │ ├── 障碍感知(local costmap) │ └── 预测性(+ prediction 模块) ├── 按模型 │ ├── 差速 SE(2) │ ├── 全向 SE(2)+vy │ └── Ackermann / 履带 └── 按最优性 ├── 启发式(PP, DWB) ├── 滚动最优(MPC, MPPI) └── 局部 NLP(TEB, TrajOpt) ``` ### 6.6.2 方法—特性矩阵 | 方法族 | 代表 | 避障 | 路径质量 | 实时性 | 调参 | Autonomy | |--------|------|------|----------|--------|------|----------| | 几何跟踪 | PP, RPP, Graceful | 弱–中 | 中–高 | ★★★★★ | 低 | ⏳ RPP/Graceful | | 速度采样 | DWB | 强 | 中 | ★★★★ | 高 | ❌ | | 随机 MPC | MPPI | 强 | 高 | ★★★ | 高 | ⏳ 配置 | | 轨迹优化 | CHOMP, TrajOpt | 强 | 高 | ★★★ | 高 | ❌ | | 时空联合 | TEB | 强 | 高 | ★★★ | 高 | ❌ | | 经典 NMPC | acados, CasADi | 强* | 高 | ★★★ | 很高 | ❌ | | 学习 | End-to-end | 变化 | 变化 | 推理快 | 数据 | ❌ | \* 依赖模型与约束建模质量。 ### 6.6.3 按感知依赖 | 类型 | costmap | odom | 预测 | 代表 | |------|---------|------|------|------| | 纯跟踪 | ❌ | ✅ | ❌ | Pure Pursuit | | 障碍感知 | ✅ | ✅ | ❌ | DWB, MPPI | | 预测避障 | ✅ | ✅ | ✅ | TEB + prediction | ### 6.6.4 时空联合轨迹规划 **动机**:仅跟踪几何路径无法协调**何时**到达路径各点;动态障碍需要预测时间维上的冲突。时空联合方法在优化变量中同时包含**空间配置**与**时间参数**(或等价地,固定 $\Delta t$ 下的控制序列 $\mathbf{U}$)。 | 族 | 决策变量 | 时间如何进入 | 代表 | Nav2 / Autonomy | |----|----------|--------------|------|-----------------| | **Timed Elastic Band** | 位姿 $s_k$ + 段时长 $\Delta t_k$ | 显式 $\Delta t_k$;共弧 + 速度界 | TEB (Rösmann) | 第三方 `teb_local_planner` · ❌ | | **Elastic Band(经典)** | 仅位姿链 | 事后 time-scaling | EB, NavFn 局部 | — | | **MPC / NMPC** | $\mathbf{U}_{0:H-1}$ 或 $x_k$ | 固定 $H\Delta t$ 网格 | acados, CasADi | ❌ · 见 [§15](controller/15_mpc_controller.md) | | **MPPI** | 采样 $\mathbf{U}^{(k)}$ | rollout 步长 $\Delta t$ | nav2_mppi | ⏳ · [§11](controller/11_mppi_controller.md) | | **CHOMP / TrajOpt** | 离散 $x_k$ 或 waypoints | 均匀 $\Delta t$ 或弧长参数 | MoveIt, 研究栈 | ❌ | | **Kinodynamic 搜索** | 状态-时间 $(x,t)$ 图 | 边带 $\Delta t$ | Hybrid A* 局部、RRT* | Planning 层为主 | **与分层栈的关系**: ``` ┌─ 仅空间 deform ─ CHOMP, TrajOpt Planning.Path ──────┼─ 空间 + 显式 Δt ─ TEB └─ 控制序列 u_k ─── MPC, MPPI, DWB ``` - **TEB** 是 Nav2 生态中最典型的**显式时空联合**局部规划器:$B=\{s_1,\Delta T_1,\ldots,s_n\}$(第三方 `teb_local_planner`,Autonomy 未集成)。 - **MPC/MPPI** 不显式优化 $\Delta t_k$,但 $H$ 与 $\Delta t$ 固定时,$\{x_k\}_{0:H}$ 仍是一条**离散时空轨迹**。 - **Planning** 输出的 Path **不含** $t$;时空联合发生在 **Control**(或 move_base 的 *local planner* 角色)。 **选型提示**:动态障碍多、需 jerk/加速度协调 → TEB / MPPI / NMPC;静态窄道、低算力 → RPP / Graceful(几何 + 启发式减速)。 ### 6.6.5 Elastic Band 与时空参数化演进 局部「deform 路径 + 满足约束」的思想可沿**时间是否显式优化**分为三代: | 阶段 | 表示 | 时间 | 代表 | 特点 | |------|------|------|------|------| | **Elastic Band (EB)** | 位姿链 $\{s_k\}$ | 事后 time-scaling | Metzig & Günther, EB 局部规划 | 仅空间 deform;$\Delta t$ 由 $v_{max}$ 导出 | | **Timed EB / TEB** | $s_k$ 与 $\Delta T_k$ 交错 | **优化变量** | Rösmann et al. 2009–2017 | 同一 NLP 协调 kinodynamic + 动态障碍 | | **控制序列 MPC** | $x_k,u_k$ 网格 | 固定 $H\Delta t$ | NMPC, MPPI, DWB | 不显式 $\Delta T_k$,但 $\{x_k\}$ 即离散时空轨迹 | ``` Planning.Path ──► EB:deform {s_k} ──► time-scale ──► cmd_vel ──► TEB:min V({s_k, ΔT_k}) ──► MPC/MPPI:min Σ ℓ(x_k,u_k), x_{k+1}=f(x_k,u_k) ``` - **EB → TEB**:从「先形后时」到「形时同优化」,是 Nav2 生态选用 TEB 而非纯 EB 的主因。 - **TEB vs MPC**:TEB 稀疏 band + LM;MPC 固定 horizon 网格 + SQP/采样。动态障碍多时 TEB 可接 prediction 时间窗;MPC/MPPI 在 critic/约束中编码预测轨迹(见 [§6.7.13](#6713-预测感知时空规划))。 - **Hybrid A***:在 **Planning** 层做 kinodynamic **全局**搜索 $(x,t)$;局部仍常用 TEB/MPPI 跟踪或短 horizon 重优化([Planning §6.5.4](../08_Planning/06_survey.md#654-采样优化与反应式未内置))。 --- ## 6.7 核心算法详解 各算法**动机 → 核心公式 → 优劣 → Nav2/Autonomy 状态**。完整推导见 §10–§15 专题。 ### 6.7.1 Pure Pursuit(1985) **动机**:农业/户外低速场景,只需沿路径走,无需显式避障(障碍由全局规划处理)。 在路径上取 lookahead 距离 $L_d$ 处目标点,几何曲率: $$ \kappa = \frac{2 y^*}{L_d^2}, \quad \omega = \kappa v $$ | 优点 | 缺点 | |------|------| | $O(n)$ 极低延迟 | 不避障 | | 工业验证数十年 | 急弯切内道 | | 参数仅 $L_d$ | 无速度规划 | Autonomy:`controller_utils` 中 `GetLookAheadPoint` 等已就绪,作为 RPP 核心。 ### 6.7.2 Regulated Pure Pursuit(Nav2 2019) **动机**:PP 在急弯、近障碍、近目标时速度过大 → 在 PP 上叠加**曲率调节、障碍减速、接近目标减速**。 $$ v_{cmd} = v_{pref} \cdot f_{curv}(\kappa) \cdot f_{obs}(d_{obs}) \cdot f_{goal}(d_{goal}) $$ Nav2 默认 indoor 控制器。Autonomy Phase 1 推荐首个插件(工具函数已有)。 详见 [§12 RPP](controller/12_rpp_controller.md)。 ### 6.7.3 Stanley(2005 DARPA) **动机**:高速自动驾驶需同时压横向与航向误差。 $$ \delta = e_\theta + \arctan\!\left(\frac{k_e e_y}{v + \varepsilon}\right) $$ 室内 AGV 较少用;Autonomy 未规划移植。 ### 6.7.4 DWA / DWB(1995 / 2010) **动机**:全局路径可能被**新出现的局部障碍**阻断,需在 $(v,\omega)$ 空间快速搜索可行速度。 **DWA**:动态窗口 $\mathcal{V}_d$ = 可达速度 ∩ 安全速度,评分 $G=\sum w_i S_i$。 **DWB**:Nav2 将 DWA **插件化**——Trajectory Generator + 多个 Critic(PathDist, GoalDist, ObstacleFootprint, RotateToGoal…)。 | 优点 | 缺点 | |------|------| | 成熟、生态丰富 | critic 权重调参复杂 | | 实时局部避障 | 高维 (vx,vy,ω) 采样爆炸 | | 可组合行为 | 轨迹前向仿真近似 | Autonomy:未实现;动态避障需求高时可评估移植或直接用 MPPI。 详见 [§13 DWB](controller/13_dwb_controller.md)。 ### 6.7.5 MPPI(2017–2022) **动机**:统一处理非线性动力学、多目标代价、约束,避免手工设计 DWB critic 权重;利用 GPU/多核并行采样。 路径积分近似: $$ u^* \approx \sum_{k=1}^{K} w_k u^{(k)}, \quad w_k = \frac{\exp(-S(u^{(k)})/\lambda)}{\sum_j \exp(-S(u^{(j)})/\lambda)} $$ Nav2 `nav2_mppi_controller`:$K \sim 2000$,$H \sim 56$,多 CostCritic(Obstacle, PathFollow, Goal, PreferForward…)。 | 优点 | 缺点 | |------|------| | 非线性+约束自然融合 | 算力需求大 | | Critics 可扩展 | temperature、noise_std 敏感 | | 支持 Omni/Ackermann | 需与 control_frequency 对齐 | Autonomy:`controller.lua` 已含完整 MPPI 配置;插件待实现。 详见 [§11 MPPI](controller/11_mppi_controller.md)。 ### 6.7.6 TEB(2009–2017) **动机**:经典 Elastic Band 只 deform **位姿**,时间靠事后 scaling;DWB/MPPI 的 rollout **步长固定**但无显式 $\Delta t_k$ 优化。TEB 在 **Timed Elastic Band** 中联合优化 $s_k$ 与 $\Delta T_k$,将 kinodynamic 与避障写入同一稀疏 NLP(Rösmann et al., IROS 2017)。 $$ B = \{ s_1,\, \Delta T_1,\, s_2,\, \ldots,\, \Delta T_{n-1},\, s_n \}, \quad \min_B \tilde{V}(B) = \sum_k \big( \phi_{\mathrm{obs},k} + \phi_{\mathrm{kin},k} + \chi_{\mathrm{time},k} + \ldots \big) $$ | 优点 | 缺点 | |------|------| | **时空联合**,动态障碍可预测 | 非凸,LM 局部最优 | | 显式 $v_k,a_k$ 由 $\Delta T_k$ 导出 | 参数/权重多 | | car-like / 差速共框架 | Autonomy 未集成 | 适合人群、叉车等动态场景;可接 [Prediction](../11_Prediction/08_behavior_prediction.md) 模块。 详见 Rösmann et al. (IROS 2017; IEEE RAM 2017)。 ### 6.7.7 Graceful Controller(2023) **动机**:室内服务机器人要**平滑**到达(初始对齐、减速区、少倒车),比 RPP 更强调 UX。 基于 Park & Kuipers (ICRA 2011) 平滑控制律 + Nav2 工程封装(slowdown_radius、collision check)。 Autonomy 配置已预留,Phase 2 推荐。 详见 [§10 Graceful](controller/10_graceful_controller.md)。 ### 6.7.8 经典 NMPC(与 MPPI 区分) **动机**:显式求解有限时域 OCP,硬约束保证性更好(泊车、高速)。 $$ \min_{\mathbf{U}} \sum_{k=0}^{H-1} \ell(x_k,u_k) + \ell_f(x_H) \quad \text{s.t. 动力学与约束} $$ 求解:SQP / RTI / acados。与 MPPI(采样+softmax)互补。Autonomy 未实现,见 [§15 MPC](controller/15_mpc_controller.md)。 ### 6.7.9 Learning-based 局部控制 | 路线 | 动机 | 现状 | |------|------|------| | 端到端 | 省掉手工 critic | 仿真→真机 gap、安全 | | RL local planner | 自适应复杂环境 | 训练成本高 | | Diffusion policy | 多模态轨迹 | 2024+ 研究热点 | 工程产品仍以 Nav2 经典控制器为主;学习方案多作辅助(启发式、perception-to-cost)。 ### 6.7.10 CHOMP(2009–2013) **动机**:在**固定时间网格**上对离散轨迹 $x_{0:H}$ 做协变梯度下降,用**障碍势场** + **平滑正则** deform 路径,无需手工 DWA 评分权重。 $$ \min_{x_{0:H}} \sum_k \Big( c_{\mathrm{obs}}(x_k) + \lambda \|\nabla x_k\|^2 + \mu \|\nabla^2 x_k\|^2 \Big) $$ | 特点 | 说明 | |------|------| | 空间轨迹优化 | 时间通常均匀 $\Delta t$;**非**显式 $\Delta t_k$ 决策 | | 局部方法 | 初值敏感,易陷局部极小 | | 生态 | 源于 MoveIt! 机械臂;平面移动机器人有移植 | Autonomy 未集成;与 TEB 相比缺少显式 timed band,与 MPPI 相比无约束硬保证。 **文献**:Ratliff et al., *CHOMP: Gradient Optimization Techniques for Efficient Motion Planning*, ICRA 2009;Zucker et al., 2013 协变版本。 ### 6.7.11 TrajOpt / STOMP(2013–2014) **TrajOpt**(Schulman et al.):将碰撞等不等式约束序列凸化(SCS),在 waypoints 上迭代求解**局部轨迹**;适合低维 C-space,移动机器人多用于**离线**或短 horizon 重规划。 **STOMP**(Kalakrishnan et al.):对轨迹加**随机扰动**,用加权更新(与 MPPI 同属随机优化族,但更新对象为**整条轨迹形状**而非控制序列)。 | 方法 | 优化对象 | 与 MPPI/TEB 关系 | |------|----------|------------------| | TrajOpt | waypoint / $x_k$ | 确定性 NLP;无 softmax | | STOMP | 轨迹分布 | 随机采样轨迹;无 MPC 滚动 | | MPPI | $\mathbf{U}_{0:H-1}$ | 滚动 + 路径积分 | | TEB | $s_k,\,\Delta T_k$ | 显式时空联合 | Autonomy 未集成;动态局部场景更常选 **MPPI**(Nav2 官方)或 **TEB**(第三方)。 ### 6.7.12 Time-scaling 与 jerk 约束 **动机**:全局 Path 几何可行但**无速度剖面**;工业 AGV 需限制 $v,a,jerk$(Graceful / 轮椅场景,见 [§10](controller/10_graceful_controller.md))。 常见两阶段: 1. **几何路径** $\mathcal{P}(s)$(Planning 或 Pure Pursuit 隐式) 2. **Time-scaling** $s(t)$:$\dot{s}\leq v_{max}(s)$,$\ddot{s}\leq a_{max}$,有时加 jerk 界 Park & Kuipers (2011) 在平滑控制律上通过 motion target 序列实现**有界 $v,a,jerk$**;Nav2 **VelocitySmoother** 在 $u$ 层做后处理([§4](04_velocity_smoother.md))。这与 TEB/NMPC 的**单阶段时空联合**互补:实现简单 vs 全局协调。 ### 6.7.13 预测感知时空规划 **动机**:静态 costmap 假设障碍不动;行人、叉车需 **$(x,y,t)$ 冲突检测**。Prediction 模块输出障碍未来轨迹 $\hat{o}_j(t)$,局部规划在时空上留 clearance。 | 集成方式 | 做法 | 代表 | |----------|------|------| | **TEB 动态项** | $\phi_{\mathrm{dyn},k}(s_k,t_k)$ 惩罚与 $\hat{o}(t)$ 距离 | `teb_local_planner` + prediction | | **MPPI critic** | rollout 中采样障碍位置 | `ObstacleCritic` + 预测接口 | | **VO / ORCA** | 速度空间半平面约束 | 多机/人群;常与 DWA 结合 | | **重规划触发** | `IsPathValid` + 高频 `GetPlan` | Navigator 默认策略(非显式时空 NLP) | Autonomy:`prediction` 与 `control` 尚未闭环;工程上可先 **Navigator 高频重规划 + MPPI 障碍 critic**,再演进 TEB 式显式时空项。详见 [Prediction 行为预测](../11_Prediction/08_behavior_prediction.md)。 ### 6.7.14 Velocity Obstacles 与 kinodynamic 局部搜索 **Velocity Obstacles (VO)**:在 $(v,\omega)$ 或 $(v_x,v_y)$ 空间剔除 $T$ 秒内与动态障碍碰撞的速度集;**ORCA** 用线性约束近似,适合多智能体局部协调。 $$ \mathcal{V}_{safe} = \mathcal{V}_{max} \setminus \bigcup_j VO_j(x, \hat{o}_j, \hat{v}_j) $$ 与 DWB/MPPI 关系:DWB 在离散 $(v,\omega)$ 采样上可附加 VO 可行性过滤;MPPI 通过 **ObstacleCritic + 预测 rollout** 实现软约束。TEB 则在 band 上写**硬/软时空障碍势**。 **Kinodynamic 局部 RRT\*** / **Hybrid A\***(短 horizon):在 $(x,t)$ 或 $(x,y,\theta,v)$ 上搜索,输出可行轨迹片段;算力高于 TEB/MPPI,多用于泊车、非结构化环境,Autonomy 未内置。全局 Hybrid A* 见 [Planning 综述 §6.2](../08_Planning/06_survey.md#62-autonomy-能力边界)。 --- ## 6.8 辅助组件 局部控制不仅是「算 $(v,\omega)$」,Nav2 将**到达判定、卡住检测、速度后处理**独立为可组合组件。 ### 6.8.1 Goal Checker | 类型 | 判定 | 典型场景 | |------|------|----------| | SimpleGoalChecker | XY + yaw | 默认导航 | | PositionGoalChecker | 仅 XY | 不要求最终朝向 | | StoppedGoalChecker | XY + yaw + $\|v\|<\epsilon$ | 充电对接 | Autonomy ✅ 三种均已实现。见 [§3 Checkers](03_checkers.md)。 ### 6.8.2 Progress Checker 检测机器人是否在**时间窗口内**有足够位移/转角,否则 Navigator 触发 Recovery。 Autonomy ✅ Simple / Pose 两种;时间窗口待完善。 ### 6.8.3 VelocitySmoother **动机**:控制器输出可能阶跃,底盘驱动器/电机有 $a_{max}$ 与 deadband。 约束 $\Delta v$ per cycle,支持 OPEN/CLOSED_LOOP。Autonomy 算法 ✅,节点接线 ⏳。 见 [§4 VelocitySmoother](04_velocity_smoother.md)。 --- ## 6.9 Autonomy control 能力边界 ### 6.9.1 已实现 | 组件 | 状态 | |------|------| | `ControllerInterface` 插件接口 | ✅ | | Goal Checker ×3 | ✅ | | Progress Checker ×2 | ✅ | | VelocitySmoother / OdomSmoother | ✅ | | 几何工具(lookahead、圆-线段交点) | ✅ | | Lua → `ControllerOptions` | ✅ | | `ControllerServer` 骨架 | ⏳ 部分 | ### 6.9.2 待实现(优先级) | 组件 | 优先级 | 说明 | |------|--------|------| | FollowPath 控制循环 | P0 | `ComputeControl()` 等 | | Autolink 插件加载 | P0 | 参照 `PlannerServer` | | RPP / Graceful 插件 | P1 | 首个可用控制器 | | CheckerOptions Lua 接线 | P1 | proto 已有 | | MPPI 插件 | P2 | 可选编译 | | VelocitySmoother 节点 | P2 | pub/sub | ### 6.9.3 与 Nav2 能力矩阵 | 能力 | Nav2 | Autonomy | |------|------|----------| | FollowPath | ✅ | ⏳ | | Regulated PP | ✅ | ❌ | | Graceful | ✅ | ⏳ 配置 | | MPPI | ✅ | ⏳ 配置 | | DWB | ✅ | ❌ | | TEB | ✅ | ❌ | | Goal/Progress Checker | ✅ | ✅ | | Velocity Smoother | ✅ | ✅ 未接线 | --- ## 6.10 工程质量与影响因素 ### 6.10.1 控制频率 | 频率 | 适用 | 说明 | |------|------|------| | 10 Hz | 低算力 / 慢速 AGV | 延迟明显 | | **20 Hz** | **默认推荐** | 与 MPPI `dt=0.05` 一致 | | 50 Hz | 高速 / 全向 | 需更强 CPU/GPU | ### 6.10.2 Lookahead 与容差 | 参数 | 小 | 中 | 大 | |------|----|----|-----| | $L_d$ | 跟踪紧、易抖 | 0.4–0.6 m 常用 | 切弯、平滑 | | `xy_goal_tolerance` | 精度高 | 0.25 m | 易报到达 | | `required_movement_radius` | 易触发 recovery | 0.5 m | 卡住不敏感 | ### 6.10.3 鱼骨图:跟踪质量不佳
上层原因

路径与规划

  • 航点过疏/过密
  • 全局路径急弯
  • 重规划滞后
  • Path 坐标系错误

控制器与参数

  • 控制器选型不当
  • lookahead 不匹配速度
  • MPPI critic 权重失衡
  • max_vel 与地图不匹配

机器人模型

  • footprint 偏差
  • 非完整未建模
  • 滑移/打滑
局部跟踪质量不佳
下层原因

感知与地图

  • local costmap 延迟
  • 膨胀不足
  • 动态障碍未入图

定位与 TF

  • odom 漂移
  • map→odom 跳变
  • 控制频率 < 定位频率

执行与平滑

  • VelocitySmoother 过限
  • deadband 过大
  • 底盘 PID 饱和
### 6.10.4 因素—对策速查 | 分支 | 症状 | 对策 | |------|------|------| | 路径 | 切弯、振荡 | 增大 $L_d$;Planning 换 Theta* | | 控制器 | 贴障、卡住 | 换 MPPI/DWB;调 ObstacleCritic | | 定位 | 路径相对漂移 | 查 TF;提高 control 频率 | | 平滑 | 起步慢、到不了 | 调 `max_accel`;CLOSED_LOOP | | Checker | 早报到达 | 收紧 tolerance 或 StoppedGoalChecker | 更多见 [§0.19 排错](00_guide.md#019-故障排查)。 --- ## 6.11 算法复杂度对比 | 算法 | 复杂度 | 20 Hz 典型耗时 | 内存 | |------|--------|----------------|------| | Pure Pursuit | $O(n)$ | < 0.1 ms | 低 | | Regulated PP | $O(n)$ | < 0.5 ms | 低 | | Graceful | $O(n)$ | < 1 ms | 低 | | DWB | $O(n_{traj}\cdot n_{sample})$ | 1–5 ms | 中 | | MPPI ($2000\times56$) | $O(K\cdot H)$ | 5–20 ms | 高 | | TEB | $O(n_b \cdot n_{iter})$ | 10–50 ms | 中 | | CHOMP / TrajOpt | $O(H \cdot n_{iter})$ | 10–80 ms | 中 | | NMPC | $O(n_x^3 H)$ | 5–30 ms | 中–高 | \* 随 CPU/GPU、costmap 大小变化。 --- ## 6.12 与其他模块的耦合 ``` planning ──Path──► controller_server ──cmd_vel──► 底盘 │ ↑ ↑ global costmap local costmap │ ↑ map ◄──scan── perception │ localization ──odom/TF──► controller │ navigator ──FollowPath──► controller ◄──goal/progress check──┘ ``` | 模块 | 数据 | 说明 | |------|------|------| | `planning` | `Path` | 全局参考 | | `map` | global/local costmap | MPPI/DWB 避障 | | `localization` | odom, TF | 闭环 | | `navigator` | FollowPath, recovery | 编排 | | `prediction` | 动态障碍(可选) | TEB/MPPI 扩展 | --- ## 6.13 业界生态 ### 6.13.1 Nav2 控制器生态 | 控制器 | 包 | 算法 | Autonomy | |--------|-----|------|----------| | Regulated PP | nav2_regulated_pure_pursuit | 几何+调节 | ⏳ | | Graceful | nav2_graceful_controller | 平滑跟踪 | ⏳ 配置 | | MPPI | nav2_mppi_controller | 随机 MPC | ⏳ 配置 | | DWB | nav2_dwb_controller | DWA+critics | ❌ | | Rotation Shim | nav2_rotation_shim | 对齐辅助 | ❌ | | TEB | teb_local_planner (3rd party) | 弹性带 | ❌ | ### 6.13.2 其他框架 | 框架 | 局部控制 | 特点 | |------|----------|------| | Navigation2 | 插件多种 | ROS 2 标准 | | Autonomy | 对齐 Nav2 | autolink | | ROS 1 move_base | DWA/TEB | legacy | | Apollo | MPC + 规划 | 自动驾驶 | | Isaac Sim / Nav2 | MPPI GPU | 仿真验证 | --- ## 6.14 工程选型矩阵 | 场景 | 推荐控制器 | Goal Checker | 关键参数 | |------|-----------|--------------|----------| | 室内差速通用 | Graceful / RPP | SimpleGoalChecker | lookahead 0.4–0.6 m | | 动态避障 | MPPI | SimpleGoalChecker | batch_size 2000 | | 窄通道 | Graceful + collision | SimpleGoalChecker | `use_collision_detection` | | 充电对接 | RPP / Graceful | StoppedGoalChecker | tolerance 0.05 m | | 只到位置 | 任意 | PositionGoalChecker | — | | 低算力嵌入式 | RPP / PP | SimpleGoalChecker | 10 Hz | | 全向机器人 | MPPI (Omni) | SimpleGoalChecker | `vy_std > 0` | | 仿真调试 | RPP | SimpleGoalChecker | OPEN_LOOP smoother | | 高速户外 | Stanley / MPC | StoppedGoalChecker | 模型精确 | | 人群密集 | MPPI / TEB | SimpleGoalChecker | 高 obstacle critic;时空联合 | | 需显式 $\Delta t$ / jerk 协调 | TEB / NMPC | StoppedGoalChecker | 见 §6.6.4 | **Autonomy 当前建议**:FollowPath 循环完成后,**Phase 1** 上 RPP 验证闭环;**Phase 2** Graceful;**Phase 3** MPPI。Checker + Smoother 可先行单元测试。 --- ## 6.15 选型决策树 ``` 需要沿 Path 跟踪并输出 cmd_vel? ├── 否 → 非 control 职责(behavior / manipulation) └── 是 ├── 环境动态障碍多? │ ├── 是 → 需时空联合? → TEB / NMPC;否则 MPPI / DWB │ └── 否 │ ├── 强调平滑 UX? → Graceful │ ├── 要低延迟/嵌入式? → RPP / Pure Pursuit │ └── 默认 → RPP(Nav2 默认等价) ├── 全向底盘? → MPPI Omni 模型 ├── 充电/精密停靠? → StoppedGoalChecker └── 算力/频率 ├── MPPI 需 GPU 或多核 + ≥20 Hz └── RPP/Graceful 10–20 Hz 即可 ``` --- ## 6.16 未来趋势与路线图
2025 Autonomy
Checker+Smoother 就绪
2026 RPP / Graceful
首个插件
2027 MPPI 可选
GPU 加速
2028 Prediction
+ MPPI/TEB
2029+ 学习辅助
critic / policy
| 方向 | 说明 | |------|------| | GPU MPPI | batch 10k+,Isaac/Nav2 验证 | | 规划-控制联合 OCP | 单 NLP 替代 Path + Controller 分层(研究多、产品少) | | 显式时空 + 预测 | Prediction 模块 → TEB/MPPI 动态约束 | | Semantic control | 语义地图调速(人行道/坡道) | | 多机协调 | 速度障碍、MAPF 与 local trajectory 结合 | | Safe RL / Diffusion traj | 学习生成 $\tau(t)$,约束校验器兜底 | --- ## 6.17 术语表 | 术语 | 英文 | 说明 | |------|------|------| | 局部轨迹规划 | Local Trajectory Planning | 输出 $\tau(t)$ 或 $u(t)$;Nav2 中常称 local planner / controller | | 几何路径 | Geometric Path | $\mathcal{P}\subset SE(2)$,无时间 | | 时空轨迹 | Spatiotemporal Trajectory | 含 $t$ 或 $\Delta t_k$ 的 $\tau$ | | 时空联合优化 | Spatiotemporal / Kinodynamic Planning | 同时优化空间与时间(TEB、NMPC) | | Timed Elastic Band | TEB | 位姿 + $\Delta T_k$ 交错参数化 | | Elastic Band | EB | 仅位姿链;时间后处理 | | Velocity Obstacle | VO / ORCA | 动态障碍速度可行集 | | 轨迹优化 | Trajectory Optimization | CHOMP, TrajOpt, STOMP | | Time-scaling | Time Scaling | 固定几何路径,只求 $s(t)$ | | 轨迹跟踪 | Trajectory Tracking | 沿 Path/$\tau$ 闭环 | | Lookahead | Look-ahead Distance | 前瞻 $L_d$ | | 动态窗口 | Dynamic Window | 可达速度集 $\mathcal{V}_d$ | | Critic | Critic Function | DWB/MPPI 评分项 | | 非完整约束 | Nonholonomic | DiffDrive $v_y=0$ | | Path Integral MPC | MPPI | 采样型随机 MPC | | Stateful Checker | — | XY 达标后只检 yaw | --- ## 6.18 参考文献 **教材** 1. [Siegwart et al., *Autonomous Mobile Robots* (2011)](https://mitpress.mit.edu/9780262015356/autonomous-mobile-robots/) 2. [Rawlings & Mayne, *Model Predictive Control* (2009)](https://sites.engineering.ucsb.edu/~jbraw/mpc/) **里程碑论文** | 年份 | 文献 | 贡献 | |------|------|------| | 1992 | [Coulter, Pure Pursuit (CMU-RI-TR-92-01)](https://www.ri.cmu.edu/publications/implementation-of-the-pure-pursuit-path-tracking-algorithm/) | PP | | 1997 | [Fox et al., DWA (IEEE RAM)](https://doi.org/10.1109/100.580977) | 动态窗口 | | 2006 | [Thrun et al., Stanley (JFR)](https://doi.org/10.1002/rob.20147) | 横向控制 | | 2009 | [Ratliff et al., CHOMP (ICRA)](https://doi.org/10.1109/ICRA.2009.5204119) | 梯度轨迹优化 | | 2011 | [Kalakrishnan et al., STOMP (ICRA)](https://doi.org/10.1109/ICRA.2011.5980198) | 随机轨迹优化 | | 2011 | [Park & Kuipers, Smooth Control (ICRA)](https://doi.org/10.1109/ICRA.2011.5980227) | Graceful 理论基础 | | 2013 | [Zucker et al., CHOMP covariant (IJRR)](https://doi.org/10.1177/0278364912469264) | 协变轨迹优化 | | 2014 | [Schulman et al., TrajOpt (IJRR)](https://doi.org/10.1177/0278364914528137) | 序列凸轨迹优化 | | 2017 | [Rösmann et al., TEB (IEEE RAM)](https://doi.org/10.1109/MRA.2016.2582927) | 时空弹性带 | | 1998 | [Fiorini & Shiller, VO (IJRR)](https://doi.org/10.1177/027836498901800402) | 速度障碍 | | 2011 | [van den Berg et al., ORCA (IROS)](https://doi.org/10.1109/IROS.2011.6096362) | 多智能体局部避障 | | 2017 | [Williams et al., IT-MPC (ICRA)](https://ieeexplore.ieee.org/document/7989202) | MPPI | | 2022 | [Macenski et al., Nav2 (Science Robotics)](https://www.science.org/doi/10.1126/scirobotics.abm6074) | 工程栈 | **工程** - [Navigation2 Controllers](https://docs.nav2.org/configuration/packages/configuring-controller-server.html) - [nav2_mppi_controller](https://github.com/ros-navigation/navigation2/tree/main/nav2_mppi_controller) - [nav2_graceful_controller](https://github.com/ros-navigation/navigation2/tree/main/nav2_graceful_controller) --- ## 6.19 相关文档 - [§0 指南](00_guide.md) · [§2 架构](02_architecture.md) - [§3 Checkers](03_checkers.md) · [§4 Smoother](04_velocity_smoother.md) · [§5 控制器总览](05_controller_algorithms.md#581-控制器与-checker-配对) - [Planning 综述](../08_Planning/06_survey.md)(全局几何 · [§6.5.4](../08_Planning/06_survey.md#654-采样优化与反应式未内置)) · [Navigator 综述](../16_Navigator/06_survey.md) - [Prediction 行为预测](../11_Prediction/08_behavior_prediction.md)(动态障碍 · TEB/MPPI 扩展)