3、轨迹规划概述:全局路径规划 vs 局部轨迹规划、S型与梯形速度规划

大家好,我是老张。今天咱们聊聊轨迹规划。

说实话,很多刚入行的朋友容易把「路径规划」和「轨迹规划」混为一谈。我刚开始做AGV那会儿也犯过这个错——以为规划出一条路就完事了。结果呢?车是能走,但要么急停急起把货物晃倒,要么转弯时直接冲出路线。嗯,这里面的门道,咱们今天一次说透。

核心区别一句话:路径规划告诉你「走哪条路」,轨迹规划告诉你「怎么走这条路」。

轨迹规划知识体系 全局路径规划 局部轨迹规划 A* / Dijkstra RRT / PRM 拓扑地图 栅格地图 DWA 动态窗口 TEB 时间弹性带 MPC 模型预测 人工势场法 速度规划:梯形 vs S型

3.1 全局路径规划:先看地图再出发

全局路径规划,说白了就是「先看地图,再定路线」。AGV在启动之前,需要知道整个环境长什么样——哪里有墙、哪里有货架、哪里是通道。然后算法基于这张静态地图,算出一条从起点到终点的可行路径。

我个人习惯把全局规划比作「导航软件里的路线推荐」。你输入目的地,高德给你三条路:最快的、最堵的、红绿灯最少的。AGV的全局规划也是类似,只不过它要考虑的是路径长度、转弯次数、是否经过狭窄区域等等。

实战经验:我在做仓储AGV项目时,遇到过一个问题——全局路径规划出来的路线太「理想化」了。算法觉得走直线最短,但实际通道中间有个柱子,车根本过不去。后来我学乖了,在代价函数里加入了「安全距离惩罚项」,路径才变得靠谱。

常用的全局规划算法有这些:

  • A*算法:最经典,启发式搜索,效率高。我90%的项目都用它。
  • Dijkstra:A*的祖宗,保证最优但慢。适合小地图。
  • RRT / RRT*:随机采样,适合高维空间或非结构化环境。
  • PRM:概率路线图,适合静态环境多次查询。

但注意,全局规划有个致命弱点——它假设地图是静态的。如果路上突然出现一个人、一辆叉车,全局规划是不知道的。这时候就需要局部轨迹规划上场了。

3.2 局部轨迹规划:边走边看

局部轨迹规划,你可以理解为「实时避障」。AGV一边沿着全局路径走,一边用激光雷达或视觉传感器感知周围环境。发现障碍物?立刻重新规划一小段轨迹,绕过去。

我经常跟团队说:全局规划是「战略」,局部规划是「战术」。战略定大方向,战术处理突发情况。

避坑指南:我曾经在一个项目中,局部规划的频率设得太低(只有5Hz),结果AGV撞上了突然出现的纸箱。后来我把频率提到20Hz,同时加了速度限制——如果障碍物太近,先急刹再重新规划。记住:局部规划的反应速度,直接决定了AGV的安全性。

常见的局部规划方法:

  • DWA(动态窗口法):在速度空间采样,选最优轨迹。简单高效,我入门时第一个学的就是它。
  • TEB(时间弹性带):把轨迹看作一条「橡皮筋」,优化它的形状。适合复杂环境。
  • MPC(模型预测控制):预测未来几步,滚动优化。效果好但计算量大。
  • 人工势场法:目标点产生引力,障碍物产生斥力。容易陷入局部极小值,慎用。

3.3 速度规划:让AGV「丝滑」运动

路径规划好了,轨迹也调整了,但还有一个关键问题——速度怎么给?

你想想看,如果AGV从静止直接跳到1m/s,电机瞬间输出最大扭矩,会发生什么?轻则货物倾倒,重则电机过载烧毁。所以我们需要速度规划,让速度平滑变化。

这里有两个经典的速度曲线:梯形速度规划S型速度规划

3.3.1 梯形速度规划

梯形速度曲线,顾名思义,速度-时间图像像一个梯形。它分为三个阶段:匀加速、匀速、匀减速。

优点:简单、计算量小、容易实现。

缺点:加速度在拐点处突变,产生「冲击」(Jerk无限大)。

// 梯形速度规划示例(伪代码)
float v_max = 1.0;   // 最大速度 m/s
float a = 0.5;       // 加速度 m/s²
float d = 0.5;       // 减速度 m/s²
float s_total = 5.0; // 总位移 m

// 计算加速段和减速段距离
float s_acc = v_max * v_max / (2 * a);
float s_dec = v_max * v_max / (2 * d);

if (s_acc + s_dec <= s_total) {
    // 能达到最大速度
    float s_cruise = s_total - s_acc - s_dec;
    // 三段式:加速-匀速-减速
} else {
    // 达不到最大速度,只有加速和减速
    // 两段式:加速-减速
}

什么时候用梯形?我个人建议:对舒适度要求不高、负载较轻、或者计算资源有限的场景。比如小型搬运AGV、巡检机器人。

3.3.2 S型速度规划

S型速度曲线,在梯形的基础上增加了「加加速度」(Jerk)控制。加速度不再是突变,而是平滑变化。速度-时间图像像字母「S」。

优点:运动极其平滑,无冲击,适合精密操作或载人场景。

缺点:参数多(7段甚至更多),计算复杂,实时性稍差。

// S型速度规划核心参数
float v_max = 1.0;    // 最大速度
float a_max = 0.5;    // 最大加速度
float j_max = 2.0;    // 最大加加速度

// 7段式S型曲线:
// 加加速 - 匀加速 - 减加速 - 匀速 - 加减速 - 匀减速 - 减减速

我记得有一次做医疗AGV项目,车上要运送精密仪器。梯形规划一启动,仪器就报警「加速度超限」。换成S型规划后,问题立刻解决。说白了,S型就是「梯形的高级版」,用计算量换舒适度。

对比项 梯形速度规划 S型速度规划
加速度变化 突变(阶跃) 平滑(连续)
加加速度(Jerk) 无限大 有限值可控
计算复杂度 中高
适用场景 普通搬运、巡检 精密操作、载人、高速
实时性 一般

我的选择策略:如果项目预算紧、MCU性能弱,用梯形。如果客户对「平稳性」有明确要求(比如运输玻璃、液体),必须上S型。没有绝对的好坏,只有合不合适的场景。

3.4 全局与局部的配合:一个实际案例

最后分享一个我实际做过的案例。某电商仓库的AGV项目,环境是2000平米的货架区。

全局规划:先用A*在已知地图上算出一条主路径,避开所有固定货架。

局部规划:AGV运行时,激光雷达检测到前方有临时堆放的包裹。DWA算法立刻介入,在局部范围内重新规划轨迹,绕开包裹后再回到全局路径上。

速度规划:考虑到货物是普通纸箱,我用了梯形速度规划,最大速度1.2m/s,加速度0.4m/s²。跑起来很稳,没有出现货物倾倒的情况。

嗯,这就是轨迹规划的全貌。全局定方向,局部躲障碍,速度保平稳。三者缺一不可。