第二章:全局路径规划与局部路径规划:区别与联系、典型算法概览、参数整定的重要性

大家好,欢迎来到《路径规划实战》的第二讲。

上一章我们聊了路径规划的基本概念,很多同学反馈说「全局」和「局部」这两个词听着有点绕。嗯,这很正常。我刚开始接触机器人时,也花了很长时间才搞明白它们到底在干什么。

说白了,全局路径规划是「看地图,定大方向」;局部路径规划是「看眼前,躲障碍」。两者缺一不可。今天我们就来彻底拆解它们。

2.1 全局路径规划 vs 局部路径规划:到底有什么区别?

先讲个我自己的经历。几年前我做一款仓储机器人,地图是提前建好的。我让机器人从A点到B点取货,全局规划器算出一条最优路径。结果呢?走到一半,地上突然多了个纸箱。全局路径没变,机器人直接撞上去了。

为什么会这样?因为全局规划器只认「静态地图」,它不知道动态障碍物。这时候就需要局部规划器上场了——它实时感知周围环境,临时绕开纸箱,再回到全局路径上。

两者的核心区别,我总结成一张表:

对比维度 全局路径规划 局部路径规划
输入信息 静态地图(先验已知) 传感器数据(实时感知)
规划范围 起点到终点(全图) 当前视野范围(几米内)
计算频率 低(一次或低频更新) 高(10Hz~50Hz)
输出结果 一系列路径点(粗路径) 速度指令(v, ω)
典型算法 A*, Dijkstra, RRT DWA, TEB, MPC

你想想看,全局规划像不像你出门前用手机地图规划路线?而局部规划就像你开车时看后视镜、打方向盘。两者配合,才能安全到达目的地。

2.2 典型算法概览

这部分我挑几个最常用的算法,讲讲它们的核心思想和适用场景。每个算法我都踩过坑,所以会多聊几句实战经验。

2.2.1 全局规划算法

A* 算法

A* 是我用得最多的全局规划算法。它结合了 Dijkstra 的「保证最优」和贪心算法的「快速收敛」。核心公式很简单:f(n) = g(n) + h(n)。g(n) 是起点到当前点的实际代价,h(n) 是当前点到终点的估计代价。

我个人习惯用欧几里得距离做 h(n),因为计算快,而且对于网格地图效果不错。但要注意:如果 h(n) 估计过高,A* 会退化成 Dijkstra,速度变慢;如果 h(n) 估计过低,可能找不到最优路径。

避坑指南: 我曾经在复杂迷宫中用曼哈顿距离做启发函数,结果路径绕了一大圈。后来换成欧几里得距离,效果立竿见影。选启发函数时,一定要结合地图的拓扑结构。

Dijkstra 算法

Dijkstra 是 A* 的「老大哥」。它没有启发函数,只靠 g(n) 来搜索。优点是保证找到最短路径,缺点是搜索范围太大,效率低。

说实话,在大多数机器人场景中,我很少直接用 Dijkstra。除非地图特别小,或者对最优性要求极高。否则 A* 的性价比更高。

RRT(快速随机搜索树)

RRT 是一种基于采样的算法。它在地图中随机撒点,逐步构建一棵树,直到树梢触及终点。优点是能处理高维空间和非凸障碍物,缺点是不保证最优,路径往往很「抖」。

我记得有一次做机械臂路径规划,环境非常复杂,A* 算到超时都没出结果。换成 RRT,几秒钟就找到了一条可行路径。虽然路径不太平滑,但至少能动了。后续再用平滑算法优化一下就好。

2.2.2 局部规划算法

DWA(动态窗口法)

DWA 的核心思想是:在速度空间(v, ω)中采样,模拟未来几秒的运动轨迹,然后选一条「最好」的轨迹。评价标准通常包括:朝向目标、避开障碍、速度平滑。

我刚开始用 DWA 时,总觉得参数调不好。机器人要么转圈圈,要么急刹车。后来发现,问题出在「评价权重」上。权重调大了,机器人会过度避障,原地打转;权重调小了,又容易撞墙。

注意: DWA 的预测时间窗口很关键。窗口太短,机器人反应过激;窗口太长,计算量暴增。我一般设 2~3 秒,具体要看机器人的速度和传感器范围。

TEB(时间弹性带)

TEB 是 DWA 的「进阶版」。它把路径看作一条「弹性带」,通过优化轨迹上的点来同时满足:路径最短、速度平滑、避障安全。TEB 能处理更复杂的约束,比如非完整约束(差速轮、阿克曼转向)。

我个人觉得 TEB 比 DWA 更「聪明」,但调参也更麻烦。它的参数多达几十个,比如轨迹点数量、优化权重、障碍物膨胀半径等。调不好时,机器人会「抖动」或者「绕远路」。

2.3 参数整定的重要性

讲到这里,你可能已经发现了:算法是骨架,参数是血肉。同样的算法,参数不同,效果天差地别。

我见过太多同学,算法选对了,但参数没调好,最后怪算法不行。其实,参数整定才是路径规划的「内功」。

举个例子。A* 算法中,启发函数的权重系数 w 可以调节搜索的「贪婪程度」。w=1 时是标准 A*,w>1 时搜索更快但可能非最优。我曾经在一个项目中,把 w 从 1.0 调到 1.2,搜索时间从 5 秒降到了 0.8 秒,路径长度只增加了 3%。这个 trade-off 值不值得?完全看场景。

再比如 DWA 的三个评价权重:

  • 朝向权重:让机器人朝着目标走。权重太大,机器人会忽略障碍物。
  • 避障权重:让机器人远离障碍物。权重太大,机器人会绕远路。
  • 速度权重:让机器人保持匀速。权重太大,机器人会「懒得」减速转弯。

这三个权重的比例,我一般从 1:1:1 开始调,然后根据实际表现微调。如果机器人频繁撞墙,就加大避障权重;如果机器人绕远路,就减小避障权重。没有万能公式,全靠经验和观察。

核心观点: 参数整定不是「玄学」,而是有方法论的。先理解每个参数的含义,再通过仿真和实车实验逐步调整。我建议你每次只改一个参数,记录效果,形成自己的「调参日志」。

2.4 知识体系框架

为了帮你理清思路,我画了一张框架图。它展示了全局规划与局部规划的关系,以及典型算法的定位。

路径规划知识体系 全局路径规划 输入:静态地图 输出:路径点序列 频率:低(一次或低频) 局部路径规划 输入:传感器数据 输出:速度指令 (v, ω) 频率:高(10~50Hz) 提供参考路径 典型算法 • A*(启发式搜索) • Dijkstra(广度优先) • RRT(随机采样) 典型算法 • DWA(动态窗口法) • TEB(时间弹性带) • MPC(模型预测控制) 参数整定:连接算法与实战的桥梁 理解参数含义 → 仿真调试 → 实车验证 → 迭代优化

从图中你可以看到,全局规划负责「大方向」,局部规划负责「微操」。两者通过参考路径连接起来。而参数整定,则是让这套系统真正跑起来的关键。

2.5 小结

这一章我们聊了全局与局部规划的区别,也看了几个经典算法的特点。说实话,算法本身并不难,难的是怎么让它们在真实机器人上稳定工作。

我建议你从 A* + DWA 这个组合开始练手。A* 负责全局路径,DWA 负责局部避障。先跑通仿真,再上实车。调参时别急,一次只改一个参数,记录下效果。慢慢你就会找到感觉。

我的小习惯: 每次调参前,我都会先问自己三个问题:这个参数控制什么?调大或调小会有什么影响?当前机器人的表现是哪个指标不满足?想清楚了再动手,效率高很多。

下一章,我们会深入 A* 算法的代码实现,手把手教你写一个可用的全局规划器。到时候见。

可可精品资料库