路径规划与轨迹规划的区别:路径 vs 轨迹、几何路径 vs 时间参数化、约束条件引入

好,我们进入第三章。这一章我打算把两个经常被混为一谈的概念彻底拆开——路径规划和轨迹规划。

说实话,我刚入行那会儿也分不太清。面试时被问到「你做过轨迹规划吗?」我自信满满地说「做过,就是A*加RRT嘛。」面试官笑了笑,没说话。后来我才明白,我那叫路径规划,跟轨迹规划差了整整一个维度。

路径 vs 轨迹:本质差异

先给个最直白的定义:

  • 路径(Path):空间中的一条几何曲线。它只关心「从A到B经过哪些点」,不关心时间。
  • 轨迹(Trajectory):路径 + 时间信息。它告诉你「什么时刻到达哪个位置」,还包含速度、加速度。

你想想看,路径就像一张地图上画出的路线,而轨迹是你在导航软件里看到的那条带时间戳的线——「前方300米,预计到达时间14:23」。

核心区别一句话:路径是几何的,轨迹是运动的。

我在项目中遇到过一位同事,他把路径规划的结果直接发给底层控制器,结果机器人走两步就剧烈抖动。为什么?因为路径只给了位置点序列,没有速度信息,控制器只能靠默认的梯形速度曲线去猜,猜错了就震荡。

几何路径 vs 时间参数化

好,我们深入一层。

几何路径通常用一系列离散点或参数曲线表示:

// 路径:仅包含位置信息
Path = {p0, p1, p2, ..., pn}
其中 pi = (x_i, y_i, z_i) 或 qi = (x_i, y_i, theta_i)

时间参数化则是在路径上附加时间戳或速度信息:

// 轨迹:位置 + 时间
Trajectory = {(p0, t0), (p1, t1), (p2, t2), ..., (pn, tn)}
或者用样条表示:q(t) = f(t),t ∈ [t_start, t_end]

说白了,路径规划的输出是一张「地图路线」,轨迹规划的输出是一张「时刻表」。没有时刻表,你只知道怎么走,不知道走多快、什么时候该停。

维度 路径规划 轨迹规划
输出内容 位置序列 / 几何曲线 位置 + 时间 / 速度 / 加速度
核心问题 避障、连通性、最短路径 平滑性、时间最优、动力学可行
典型算法 A*、RRT、PRM、Dijkstra 多项式插值、梯形速度、S形曲线、TOTG
约束类型 几何约束(障碍物、边界) 运动学/动力学约束(速度限、加速度限、力矩限)
应用场景 地图导航、全局路径搜索 机械臂运动、无人机航迹、自动驾驶

嗯,这里要注意:很多教材把路径规划和轨迹规划当成两个独立模块,但实际工程中它们是串行流水线——先规划路径,再对路径做时间参数化得到轨迹。我习惯把路径规划叫「上游」,轨迹规划叫「下游」。

约束条件引入:从几何到物理的跨越

为什么一定要区分这两个概念?因为约束条件变了。

路径规划只处理几何约束:

  • 不能撞墙
  • 不能碰障碍物
  • 必须在工作空间内

轨迹规划在此基础上,还要处理运动学和动力学约束:

  • 关节速度不能超过电机额定值
  • 加速度不能太大(否则会丢步或抖动)
  • 加加速度(Jerk)要限制(否则末端会振动)
  • 力矩不能超出驱动器能力

我曾经踩过一个坑:给一个六轴机械臂做轨迹规划,路径规划阶段一切正常,但时间参数化时只考虑了速度约束,没考虑加速度约束。结果轨迹下发后,第三个关节在高速转弯时加速度超限,直接触发驱动器过流保护,机器人急停。那次差点把工件撞废。

所以,从路径到轨迹,本质上是从几何空间进入物理空间。路径规划回答「能不能到」,轨迹规划回答「能不能安全、平稳、高效地到」。

一个直观的例子

假设你要让机械臂从A点抓取一个零件,放到B点。

路径规划会给出:

A → 绕过障碍物1 → 经过中间点C → 到达B
路径长度:1.2m

轨迹规划会给出:

t=0s:  位置A, 速度0
t=0.5s: 位置C, 速度0.3m/s
t=1.2s: 位置B, 速度0
最大速度: 0.5m/s (未超限)
最大加速度: 1.2m/s² (在允许范围内)

你看,路径规划只告诉你「走这条路」,轨迹规划告诉你「怎么走、走多快、什么时候减速」。没有轨迹规划,机器人要么走得太慢(效率低),要么走得太猛(出事故)。

知识体系总览

下面这张图把本章的核心逻辑串起来了,我建议你多看几遍:

路径规划 vs 轨迹规划:知识体系 路径规划(Path Planning) 几何空间 · 离散点序列 · 避障 输出:路径点集 {p₀, p₁, ..., pₙ} 约束:几何约束(障碍物、边界) 典型算法:A*、RRT、PRM、Dijkstra 轨迹规划(Trajectory Planning) 时间空间 · 速度/加速度 · 平滑 输出:时间参数化 q(t) = f(t) 约束:运动学/动力学约束 典型算法:多项式插值、S形曲线、TOTG 串行流水线 核心差异 路径:几何的,只关心「能不能到」 → 轨迹:运动的,关心「怎么安全高效地到」 几何约束:障碍物、边界、连通性 物理约束:速度、加速度、力矩、Jerk 约束升级 💡 路径规划是轨迹规划的前置步骤,两者缺一不可

我的个人习惯:在项目初期,我会先用路径规划快速验证「这条路能不能走通」,确认可行后再做轨迹规划。如果上来就做完整的轨迹规划,调参会非常痛苦——你根本不知道是路径有问题还是时间参数化有问题。

避坑指南

最后分享几个我踩过的坑:

  1. 不要用路径规划的结果直接驱动电机。路径点之间没有速度信息,电机要么急停急启,要么震荡。必须做时间参数化。
  2. 注意路径的连续性。如果路径本身有尖角(比如A*走出来的折线),直接做时间参数化会导致速度方向突变。我一般会先做路径平滑(比如B样条拟合),再做轨迹规划。
  3. 约束条件要分层引入。先加速度约束,再加加速度约束,最后加力矩约束。一次性全加上,出了问题你都不知道是哪个约束在作怪。