4. 路径规划问题定义:最短路径、避障约束、平滑度指标

好,咱们进入正题。路径规划听起来高大上,其实说白了就是回答三个问题:怎么走最近?怎么不撞墙?怎么走得舒服? 这三个问题,对应到数学上就是三个核心指标——最短路径、避障约束、平滑度指标。

我刚开始做路径规划那会儿,踩过一个坑。当时只盯着最短路径算,结果规划出来的路径贴着障碍物边缘走,机器人一执行就卡住。嗯,后来我才明白,这三个指标缺一不可。

4.1 最短路径:距离怎么算?

最短路径,这是最直观的目标。但「最短」的定义其实有好几种,你得根据场景选。

  • 欧几里得距离:直线距离,√((x₁-x₂)²+(y₁-y₂)²)。适合开阔空间,但忽略障碍物。
  • 曼哈顿距离:|x₁-x₂|+|y₁-y₂|。适合网格地图,比如城市街区。
  • 切比雪夫距离:max(|x₁-x₂|,|y₁-y₂|)。适合允许对角线移动的网格。

我个人习惯在蚁群算法里用欧几里得距离作为启发式信息。为什么?因为蚁群模拟的是真实蚂蚁,蚂蚁走的是连续空间,不是网格。你想想看,蚂蚁会拐弯,不会只走直角。

核心公式:路径总长度 L = Σ d(i, i+1),其中 d 是相邻节点间的距离。

但注意,最短路径≠最优路径。我在项目中遇到过,单纯追求最短,结果路径穿过狭窄通道,机器人根本过不去。所以,必须加上避障约束。

4.2 避障约束:别撞上!

避障约束,说白了就是路径上的每个点都不能落在障碍物内部。这个约束在数学上很好表达:

对于路径上的任意点 P(x,y):
  如果 P 在障碍物 O 内部 → 该路径无效
  如果 P 在障碍物 O 边界 → 视情况(一般也视为无效)

但实际做的时候,有个细节很多人忽略——机器人是有尺寸的。你不能把机器人当成一个点来处理。

我曾经踩过的坑:把机器人当质点规划路径,结果路径贴着墙走,机器人实际宽度比路径宽,直接卡住。后来我学会了「膨胀障碍物」——把障碍物边界向外扩展机器人半径,这样规划出来的路径天然安全。

在蚁群算法里,避障约束怎么加?很简单:

  • 在状态转移概率中,禁止选择落入障碍物的下一节点
  • 或者给落入障碍物的路径一个极大的惩罚值(比如 10⁶)

我建议用第一种方法,直接禁止。因为惩罚值法会让蚂蚁「试错」,浪费计算资源。

4.3 平滑度指标:别让机器人「抽风」

这个指标,说实话,很多初学者会忽略。但实际部署时,平滑度比最短路径还重要。

什么叫平滑?就是路径的转弯角度不能太陡。你想想看,一个机器人如果每走一步就转个 90° 弯,电机受得了吗?电池扛得住吗?

平滑度的量化方式有很多,我常用的是转角累积惩罚

平滑度 S = Σ |θᵢ - θᵢ₋₁|

其中 θᵢ 是第 i 段路径的方向角

这个值越小,路径越平滑。理想情况下,S=0 就是一条直线。

我的经验:在蚁群算法的适应度函数里,把平滑度作为一个加权项。比如总代价 = α×长度 + β×平滑度。α和β怎么调?我一般先设 α=1, β=0.5,然后根据仿真结果微调。

4.4 三个指标的权衡:多目标优化

好,现在三个指标都有了。但问题来了——它们往往是冲突的。最短路径可能不平滑,平滑路径可能绕远路。怎么办?

这就引出了多目标优化。我个人的做法是:

  1. 分层法:先保证避障(硬约束),再优化长度和平滑度(软约束)
  2. 加权法:总目标 = w₁×长度 + w₂×平滑度,w₁+w₂=1
  3. Pareto 前沿法:不设权重,直接找一组非劣解

实际项目中,我大部分时候用加权法。简单、直观、好调参。

4.5 知识体系总览

下面这张图,把咱们刚才讲的内容串起来了。你看一眼,心里就有谱了。

路径规划问题定义:三大核心指标 路径规划问题 最短路径 欧几里得距离 曼哈顿距离 切比雪夫距离 避障约束 点障碍检测 膨胀障碍物 硬约束/惩罚函数 平滑度指标 转角累积惩罚 曲率约束 加权优化 多目标权衡:分层法 / 加权法 / Pareto前沿法

4.6 实际项目中的权衡策略

讲完理论,咱们聊聊实战。我在一个仓储机器人项目里,遇到过这样的场景:

场景 最短路径权重 避障约束 平滑度权重
空旷仓库 0.7 硬约束 0.3
密集货架区 0.3 硬约束+膨胀 0.7
走廊通道 0.5 硬约束 0.5

你看,不同场景下权重完全不一样。密集货架区为什么平滑度权重要高?因为频繁转弯容易撞到货架,而且电机磨损大。

一句话总结:最短路径是目标,避障约束是底线,平滑度是体验。三者缺一不可,但权重因场景而异。

好了,这一节的内容就到这儿。记住这三个指标,后面咱们写蚁群算法代码时,会反复用到它们。


专注资料整理