一、路径规划到底在规划什么?
说实话,我刚入行那会儿,觉得路径规划不就是「从A点到B点找条路」嘛。后来被现实狠狠教育了几次——有一次在仓库里,我的AGV明明规划出了最短路径,结果卡在货架中间动弹不得。嗯,从那以后我才真正理解,路径规划远没想象中那么简单。
路径规划,说白了就是:在给定的环境中,找出一条从起点到终点的可行路径,同时满足某些性能指标。这里的「可行」很关键——你不能撞墙、不能压线、不能和障碍物亲密接触。
我个人习惯把路径规划拆成三个核心问题:
- 我在哪?——定位问题,你得知道起点
- 我要去哪?——目标设定,终点坐标
- 我怎么去?——路径搜索,核心算法
你想想看,第三个问题才是我们真正要啃的硬骨头。而「怎么去」又分成了两个流派:全局规划和局部规划。下面我详细说说。
二、全局路径规划 vs 局部路径规划
这两个概念,我建议你从「地图信息是否完整」这个角度去理解。
2.1 全局路径规划
全局规划,也叫离线规划。它假设你手里有一张完整的地图——障碍物位置、道路宽度、可行区域,全都已知。算法在这张静态地图上算出一条从起点到终点的路径。
我在项目中遇到过最典型的场景:工厂投产前,我们先拿到CAD图纸,把货架、工作台、通道全部标注好。然后让AGV跑全局规划,生成一条「理论上最优」的路径。
常用的全局规划算法有:
- A*算法——最经典,启发式搜索,效率高
- Dijkstra——保证最短路径,但慢
- RRT/RRT*——适合高维空间,随机采样
但全局规划有个致命弱点:它假设环境是静态的。一旦出现动态障碍物——比如突然有人走过、叉车临时停靠——全局路径就废了。
2.2 局部路径规划
局部规划,也叫在线规划。它只依赖传感器实时感知的局部环境信息(比如激光雷达扫描到的2米范围),在全局路径的引导下,实时调整行驶轨迹。
我经常跟团队说:全局规划负责「大方向」,局部规划负责「躲坑」。
常见的局部规划方法:
- DWA(动态窗口法)——在速度空间采样,选最优轨迹
- TEB(时间弹性带)——优化轨迹的时间与空间
- MPC(模型预测控制)——带约束的滚动优化
2.3 两者的关系
全局规划和局部规划不是二选一,而是配合使用。我画了一张图帮你理解:
你看,全局规划先算出一条粗路径,局部规划再根据实时感知做微调。两者缺一不可。
三、路径规划的评价指标
路径好不好,不能光凭感觉。我一般用三个核心指标来评价:
3.1 最短路径
这是最直观的指标——路径总长度最小。但我要提醒你:最短路径 ≠ 最优路径。
举个例子,我在一个密集仓储项目里,A*算出来的最短路径要从两个货架中间挤过去。路径确实短,但AGV每次经过都要减速到0.1m/s,生怕刮蹭。结果总耗时反而更长。
3.2 时间最优
时间最优考虑的是「从起点到终点需要多久」。它比最短路径更实用,因为时间 = 距离 / 速度,而速度受曲率、障碍物密度影响。
我常用的时间最优评价函数长这样:
J = ∫ (w₁·v(t) + w₂·κ²(t) + w₃·δ²(t)) dt
其中:
v(t)——速度,越大越好κ(t)——曲率,越小越好(转弯减速)δ(t)——与障碍物的距离,越大越安全
说白了,时间最优就是在安全和效率之间找平衡。
3.3 平滑度
平滑度这个指标,新手容易忽略。但做过实车调试的人都知道——不平滑的路径,机器人根本跑不起来。
平滑度通常用路径的曲率变化率(jerk)来衡量。曲率突变的地方,机器人要么急刹,要么甩尾。
我评估平滑度时看三个维度:
| 指标 | 含义 | 理想值 |
|---|---|---|
| 最大曲率 | 路径最弯处的弯曲程度 | < 0.2 m⁻¹ |
| 曲率变化率 | 曲率的变化速度 | < 0.5 m⁻¹/s |
| 路径连续性 | 至少C²连续(曲率连续) | C²及以上 |
四、三个指标的权衡
你可能会问:这三个指标能不能同时做到最优?
答案是:不可能。最短路径往往不平滑,平滑路径可能绕远路,时间最优又可能牺牲安全性。
我个人的做法是:
- 先保证安全性——路径不能碰障碍物,这是底线
- 再追求平滑度——让机器人能稳定跟踪
- 最后优化时间——在安全和平滑的基础上,尽量快
这个优先级顺序,是我在多次现场调试中总结出来的。你想想看,一条路径再短再快,如果机器人跑着跑着就撞了,那还有什么意义?
好了,这一章的内容就到这里。路径规划的定义、全局与局部的区别、三个核心评价指标,我都结合自己的实战经验讲了一遍。下一章我们会深入A*算法的实现细节,到时候手撕代码,敬请期待。