路径与轨迹:你真的分得清吗?

做机器人规划,第一个绕不开的概念就是「路径」和「轨迹」。很多新手甚至工作一两年的工程师,嘴上说着不一样,真到写代码时就把两者混为一谈。我见过不止一次,有人在路径规划器里硬塞时间约束,结果要么规划失败,要么跑出来的运动一卡一卡的。

说白了,路径和轨迹是两件完全不同的事。一个只管「走哪条路」,另一个还要管「怎么走」。今天我们就把它彻底掰扯清楚。

路径(Path)的定义

路径,就是一系列空间位置的集合。它只描述机器人从起点到终点要经过哪些点,完全不关心速度、加速度这些时间信息。

举个例子:你从家走到公司,在地图上画一条线,这条线就是路径。它可以是直线,也可以绕个弯,但这条线上没有任何「什么时候到」「走多快」的信息。

路径的数学表示:
路径 P = {p₁, p₂, p₃, ..., pₙ},其中每个 pᵢ 是机器人关节空间或笛卡尔空间中的一个位姿点。

我个人习惯把路径看作「几何问题」。你只需要关心:有没有撞到障碍物?路径是否平滑?转折点是否合理?至于机器人实际跑起来是快是慢,那是轨迹的事。

一个小技巧: 当你只做路径规划时,可以暂时忽略所有动力学约束。先把「能不能走通」搞定,再考虑「怎么走得好」。

轨迹(Trajectory)的定义

轨迹 = 路径 + 时间信息。它给路径上的每一个点都贴上了时间标签,告诉机器人「你必须在什么时刻到达哪个位置」。

还是刚才的例子。从家到公司,路径是那条线。轨迹则是:8:00 出门,8:05 到路口,8:12 过红绿灯,8:20 到公司门口。每个点都绑定了时间。

轨迹的数学表示:
轨迹 T = {(p₁, t₁), (p₂, t₂), (p₃, t₃), ..., (pₙ, tₙ)},其中 tᵢ 是到达 pᵢ 的时刻。

轨迹规划要解决的核心问题是:给定一条路径,如何分配时间,让机器人运动既快又稳,还不超出电机的能力范围?

我记得有一次做六轴机械臂的码垛项目,路径规划跑得挺顺,结果一上轨迹就抖得厉害。查了半天,原来是加速度曲线没处理好,电机瞬间扭矩超限了。嗯,这就是典型的「路径没问题,轨迹没做好」。

时间参数化的意义

你可能会问:为什么非要加个时间?直接让机器人沿着路径匀速走不行吗?

不行。原因有三:

  1. 物理限制: 电机有最大速度、最大加速度。匀速运动在拐弯处会产生巨大的向心加速度,可能直接让电机过载。
  2. 任务需求: 焊接、涂胶这类工艺,要求末端在特定区域保持恒定速度,其他地方可以快速通过。没有时间参数化,你根本控制不了这些细节。
  3. 避障与协同: 多机器人协同作业时,每个机器人的运动必须严格同步。时间参数化是同步的基础。
我曾经踩过的坑: 在一个 AGV 调度项目中,我偷懒没做时间参数化,直接让所有 AGV 按路径匀速跑。结果两辆车在交叉口同时到达,谁也过不去。后来加了时间参数化,给每辆车分配了不同的时间窗口,问题才解决。别学我。

时间参数化的本质,就是把「几何路径」映射到「时间轴」上。这个映射不是随便给的,它要满足运动学约束(速度、加速度限制)和任务约束(特定位置的速度要求)。

路径规划与轨迹规划的关系

这两者的关系,我习惯用一个简单的流程来理解:

  1. 先做路径规划: 在无障碍空间中找到一条可行路径。这一步只关心几何可行性。
  2. 再做轨迹规划: 在已确定的路径上,分配时间信息,生成速度、加速度曲线。这一步关心动力学可行性。

路径规划是轨迹规划的前提。路径都没找到,谈何轨迹?但反过来,路径规划的结果会直接影响轨迹规划的质量。一条弯弯绕绕的路径,轨迹规划再怎么优化也跑不快。

核心区别一句话总结:
路径规划回答「能不能到」,轨迹规划回答「怎么到得好」。

下面这张图可以帮你直观理解两者的关系:

路径规划 vs 轨迹规划 路径规划 输入:起点、终点、障碍物 输出:空间点序列(路径) 约束:几何可行、无碰撞 轨迹规划 输入:路径 + 时间约束 输出:时间-位置-速度曲线 约束:速度/加速度/力矩限制 路径作为输入 关键理解 路径规划只关心「空间可行性」 轨迹规划在路径基础上增加「时间维度」

实际项目中的选择

做项目时,到底先做路径规划还是轨迹规划?其实不是绝对的。我总结了几种常见场景:

场景 路径规划 轨迹规划 说明
简单移动 直线插补 梯形速度曲线 点到点搬运,要求不高
复杂避障 RRT / A* S形速度曲线 环境复杂,需要绕行
高精度工艺 B样条曲线 时间最优轨迹 焊接、涂胶,速度要恒定
多机协同 优先级路径 同步时间规划 多台机器人同时工作
我的建议: 刚开始做项目时,先把路径规划和轨迹规划分开实现。路径规划器只输出路径点,轨迹规划器只处理时间分配。等系统跑通了,再考虑联合优化。这样调试起来思路清晰,出了问题也容易定位。

你想想看,如果一开始就把两者混在一起,路径规划器里塞了速度约束,轨迹规划器里又去改路径点,最后代码改得面目全非,谁也看不懂。我早期就吃过这个亏,后来学乖了,各司其职,反而效率更高。

好了,路径和轨迹的区别就讲到这里。记住一句话:路径是几何的,轨迹是时间的。搞清楚了这一点,后面的内容你会学得轻松很多。