4. 路径规划问题定义:最短路径、避障约束、平滑度指标
好,咱们进入正题。路径规划听起来高大上,其实说白了就是回答三个问题:怎么走最近?怎么不撞墙?怎么走得舒服? 这三个问题,对应到数学上就是三个核心指标——最短路径、避障约束、平滑度指标。
我刚开始做路径规划那会儿,踩过一个坑。当时只盯着最短路径算,结果规划出来的路径贴着障碍物边缘走,机器人一执行就卡住。嗯,后来我才明白,这三个指标缺一不可。
4.1 最短路径:距离怎么算?
最短路径,这是最直观的目标。但「最短」的定义其实有好几种,你得根据场景选。
- 欧几里得距离:直线距离,√((x₁-x₂)²+(y₁-y₂)²)。适合开阔空间,但忽略障碍物。
- 曼哈顿距离:|x₁-x₂|+|y₁-y₂|。适合网格地图,比如城市街区。
- 切比雪夫距离:max(|x₁-x₂|,|y₁-y₂|)。适合允许对角线移动的网格。
我个人习惯在蚁群算法里用欧几里得距离作为启发式信息。为什么?因为蚁群模拟的是真实蚂蚁,蚂蚁走的是连续空间,不是网格。你想想看,蚂蚁会拐弯,不会只走直角。
但注意,最短路径≠最优路径。我在项目中遇到过,单纯追求最短,结果路径穿过狭窄通道,机器人根本过不去。所以,必须加上避障约束。
4.2 避障约束:别撞上!
避障约束,说白了就是路径上的每个点都不能落在障碍物内部。这个约束在数学上很好表达:
对于路径上的任意点 P(x,y):
如果 P 在障碍物 O 内部 → 该路径无效
如果 P 在障碍物 O 边界 → 视情况(一般也视为无效)
但实际做的时候,有个细节很多人忽略——机器人是有尺寸的。你不能把机器人当成一个点来处理。
在蚁群算法里,避障约束怎么加?很简单:
- 在状态转移概率中,禁止选择落入障碍物的下一节点
- 或者给落入障碍物的路径一个极大的惩罚值(比如 10⁶)
我建议用第一种方法,直接禁止。因为惩罚值法会让蚂蚁「试错」,浪费计算资源。
4.3 平滑度指标:别让机器人「抽风」
这个指标,说实话,很多初学者会忽略。但实际部署时,平滑度比最短路径还重要。
什么叫平滑?就是路径的转弯角度不能太陡。你想想看,一个机器人如果每走一步就转个 90° 弯,电机受得了吗?电池扛得住吗?
平滑度的量化方式有很多,我常用的是转角累积惩罚:
平滑度 S = Σ |θᵢ - θᵢ₋₁|
其中 θᵢ 是第 i 段路径的方向角
这个值越小,路径越平滑。理想情况下,S=0 就是一条直线。
4.4 三个指标的权衡:多目标优化
好,现在三个指标都有了。但问题来了——它们往往是冲突的。最短路径可能不平滑,平滑路径可能绕远路。怎么办?
这就引出了多目标优化。我个人的做法是:
- 分层法:先保证避障(硬约束),再优化长度和平滑度(软约束)
- 加权法:总目标 = w₁×长度 + w₂×平滑度,w₁+w₂=1
- Pareto 前沿法:不设权重,直接找一组非劣解
实际项目中,我大部分时候用加权法。简单、直观、好调参。
4.5 知识体系总览
下面这张图,把咱们刚才讲的内容串起来了。你看一眼,心里就有谱了。
4.6 实际项目中的权衡策略
讲完理论,咱们聊聊实战。我在一个仓储机器人项目里,遇到过这样的场景:
| 场景 | 最短路径权重 | 避障约束 | 平滑度权重 |
|---|---|---|---|
| 空旷仓库 | 0.7 | 硬约束 | 0.3 |
| 密集货架区 | 0.3 | 硬约束+膨胀 | 0.7 |
| 走廊通道 | 0.5 | 硬约束 | 0.5 |
你看,不同场景下权重完全不一样。密集货架区为什么平滑度权重要高?因为频繁转弯容易撞到货架,而且电机磨损大。
好了,这一节的内容就到这儿。记住这三个指标,后面咱们写蚁群算法代码时,会反复用到它们。