07-路径规划与导航-局部规划
作者:姚博文 · 2026-09-15
局部规划
定位: 把"全局路线"变成"安全、平滑、实时可行的速度指令"——DWA(动态窗口法)与 TEB(定时弹性带)两大主流局部规划器的原理、动态窗口概念、避障策略、速度平滑、选型对比, 以及可直接运行的 Python 仿真与 Nav2 参数表。 | 适用: 智能小车/移动机器人开发
**给非专业读者的一段话**: 局部规划器是小车的"反射系统"。全局规划器(如 A\*)在地图上画好一条从 A 到 B 的"路线图", 但现实是动态的: 有人横穿马路、路口突然被堵、车速还有物理限制(不能瞬间从 0 提到满速)。局部规划器每 0.1~0.2 秒做一次决策: "以我现在的速度和加速度, 再看一眼前方的障碍, 接下来 0.1 秒我该以哪个(线速度 v, 角速度 ω)行驶?" 它把每个候选速度在脑内仿真 2~3 秒, 挑出"不撞、对准目标、又快"的那个, 交给速度控制器(PID, 见 `05-控制系统/PID与经典控制.md`)执行。主流算法两个: **DWA**(Dynamic Window Approach, 动态窗口法——"在当前状态够得着的速度窗口里采样打分挑最优", 简单高效好调)和 **TEB**(Timed Elastic Band, 定时弹性带——"把轨迹当一根可拉伸的橡皮带做优化求解", 更平滑、更擅长动态障碍与倒车)。本文把两者讲透: 动态窗口概念、避障策略、速度平滑, 加可运行的仿真代码和智能小车参数速查表。
· * *
1\. 概述
1.1 解决什么问题
局部规划器的输入是 **全局路径**(A\*/D\* Lite 生成的一串位姿点) + **当前状态**(位姿与速度) + **障碍信息**(costmap), 输出是交给速度控制器的 **速度指令 (v, ω)**。它要同时满足三个硬指标:
| 指标 | 含义 | 实现机制 |
| --- | --- | --- |
| 安全(避障) | 不撞障碍, 包括移动的人/物 | 前向仿真 / 轨迹代价优化 + costmap |
| 可行性 | 指令物理上执行得出来(加速度受限) | 动态窗口约束 / 时间分配中的加速度约束 |
| 高效平滑 | 沿路径尽快到达, 且速度不跳变 | 速度项打分 / 平滑性目标函数 + 后处理 |
与全局规划的区别: 全局规划是**低频(重规划 1~5 Hz)、管全局拓扑**; 局部规划是**高频在线(每周期 5~20 Hz)、管实时安全**。局部规划器只需要看全局路径的"下一小段"(典型 1~3 m 前方), 而不是整条路径——这是两级规划解耦的关键。
1.2 在自主导航链路中的位置
全链路图见 `00-路线图/学习路线图.md` §0, 本文处于 planning 环节的下半部分:
· **上游**: 局部规划器消费全局路径的"线段" + 定位给出的当前位姿 + 滚动 costmap。若全局路径被新障碍完全堵死, Nav2 会触发全局重规划或恢复行为(见 §2.5.4)。
· **下游**: 只输出 (v, ω), 不碰轮级控制——那是速度环的事(差速运动学见 `05-控制系统/移动机器人运动学模型.md`, 闭环见 `05-控制系统/PID与经典控制.md`)。
· **同层**: Nav2 的 controller server 可配置多个 FollowPath 控制器(RPP/DWB/TEB), 由行为树(BT)按任务切换, 部署细节见 `07-路径规划与导航/Nav2导航栈.md`。
1.3 验收指标(对应路线图里程碑 D2)
| 指标 | 目标值(典型) | 测量方法 |
| --