路径规划与轨迹规划的区别:路径 vs 轨迹、时间参数化、运动学约束的引入
很多刚入行的朋友问我:「路径规划和轨迹规划,不就是一回事吗?」
嗯,我刚开始做机器人那会儿也这么想。直到有一次,我写了一个路径规划算法,让机械臂走一条很漂亮的曲线,结果一跑起来,关节电机嘎嘎响,末端抖得像筛糠。那时候我才意识到——路径和轨迹,完全是两码事。
路径 vs 轨迹:本质差异
先给个最直白的定义:
- 路径:空间中的一条几何曲线。它只关心「从哪到哪」,不关心怎么走。
- 轨迹:带时间信息的路径。它告诉你「什么时刻,机器人应该在哪个位置,速度是多少」。
说白了,路径是静态的几何问题,轨迹是动态的运动问题。
核心区别一句话:路径 = 空间几何;轨迹 = 空间几何 + 时间 + 运动学约束。
我习惯用一个比喻来理解:路径就像地图上画的一条公路,轨迹则是你开车时每个时刻的车速、油门、刹车。地图一样,但老司机和菜鸟开出来的轨迹完全不同。
| 对比维度 | 路径规划 | 轨迹规划 |
|---|---|---|
| 输入 | 起点、终点、障碍物 | 路径 + 时间约束 + 运动学约束 |
| 输出 | 点序列 (x₁,y₁,z₁) → (x₂,y₂,z₂) → ... | 时间参数化序列 (t₁, q₁, v₁, a₁) → ... |
| 是否包含速度 | 否 | 是 |
| 是否包含加速度 | 否 | 是 |
| 典型算法 | A*, RRT, PRM | 梯形速度规划、S形速度规划、多项式插值 |
时间参数化:给路径装上「时钟」
路径规划完成后,你得到了一堆离散点。但机器人不能直接吃这些点——它需要知道每个点该在什么时候到达。
时间参数化,就是把路径上的几何位置映射到时间轴上。最常见的做法是引入一个参数 s(t),表示路径的「进度」。s=0 是起点,s=1 是终点,s(t) 随时间单调递增。
举个例子,假设路径长度是 1 米,你希望机器人用 2 秒走完。最简单的参数化就是线性映射:
s(t) = t / 2, t ∈ [0, 2]
位置 p(t) = p(s(t)) = p(t/2)
速度 v(t) = dp/dt = (dp/ds) * (ds/dt)
但线性映射有个问题——起点和终点速度突变。你想想看,机器人从静止瞬间跳到某个速度,电机受得了吗?
我曾经踩过的坑:第一次做 AGV 路径跟踪时,我直接用线性时间参数化,结果小车在起点猛地一冲,差点把货架上的零件甩下来。后来我才知道,时间参数化必须考虑速度的连续性。
实际工程中,我们常用梯形速度曲线或 S 形速度曲线来做时间参数化。梯形曲线有加速、匀速、减速三段;S 形曲线则加了加加速度(jerk)约束,让运动更平滑。
运动学约束的引入:让轨迹「可执行」
路径规划只管「能不能走通」,轨迹规划要管「能不能走好」。这个「好」字,就体现在运动学约束上。
常见的运动学约束包括:
- 速度上限:电机有额定转速,关节不能转太快
- 加速度上限:电机扭矩有限,加速度不能太大
- 加加速度上限:避免冲击,延长机械寿命
- 关节位置极限:机械限位,不能超程
这些约束在路径规划阶段是看不到的。路径规划只关心几何可达性,而轨迹规划必须把这些「硬杠杠」加进去。
我的个人习惯:在轨迹规划阶段,我会先做一次「约束检查」——把路径上的每个点映射到关节空间,看看速度、加速度是否超限。如果超限,要么降低速度,要么重新规划路径。这个步骤能省掉很多调试时间。
从路径到轨迹的完整流程
下面这张图展示了从路径规划到轨迹规划的完整链路:
一个实战案例:从路径到轨迹的转换
假设我们有一条路径,由三个点组成:A(0,0) → B(1,0) → C(1,1)。路径规划只输出这些点。现在要做轨迹规划。
第一步:路径参数化
计算路径总长:AB 段 1 米,BC 段 1 米,总长 2 米。定义 s 从 0 到 1。
s = 0 → 位置 A(0,0)
s = 0.5 → 位置 B(1,0)
s = 1.0 → 位置 C(1,1)
第二步:时间参数化
设定总时间 T=4 秒,采用梯形速度曲线:加速 1 秒,匀速 2 秒,减速 1 秒。
t ∈ [0,1]: 加速段, s(t) = 0.125 * t²
t ∈ [1,3]: 匀速段, s(t) = 0.125 + 0.25*(t-1)
t ∈ [3,4]: 减速段, s(t) = 0.875 + 0.25*(t-3) - 0.125*(t-3)²
第三步:运动学约束检查
假设关节 1 的速度上限是 0.5 rad/s。计算轨迹在关节空间的速度:
v₁(t) = dq₁/dt = (dq₁/ds) * (ds/dt)
如果发现某个时刻 v₁ > 0.5,就需要调整时间参数化——要么延长总时间,要么修改速度曲线。
实战经验:我一般会预留 20% 的速度裕量。比如电机额定速度 1 rad/s,我按 0.8 rad/s 做约束。这样即使负载变化或摩擦增大,轨迹仍然安全。
路径规划与轨迹规划的协同工作
在实际系统中,路径规划和轨迹规划不是孤立的。它们需要协同工作:
- 路径规划先输出一条无碰撞的几何路径
- 路径平滑对离散点做插值,生成连续曲线(B样条、贝塞尔曲线等)
- 轨迹规划在平滑路径上做时间参数化,加入运动学约束
- 轨迹跟踪控制器根据轨迹生成控制指令,驱动电机
这里有个容易忽略的点:路径平滑的质量直接影响轨迹规划的可行性。如果路径上有尖锐拐角,即使时间参数化做得再好,关节加速度也可能瞬间爆表。
我曾经踩过的坑:有一次路径规划输出了一条「之」字形路径,拐角接近 90 度。我花了很多精力优化时间参数化,结果发现无论怎么调,关节加速度都超限。最后回头重新做了路径平滑,问题才解决。所以我现在做项目,一定会先检查路径的曲率分布。
总结一下
路径规划和轨迹规划的区别,说白了就是「画地图」和「开车」的区别。路径规划告诉你路在哪,轨迹规划告诉你油门怎么踩、刹车什么时候点。
在实际工程中,我建议你把这两个模块分开设计。路径规划专注几何可达性,轨迹规划专注运动可行性。接口处定义好路径的数据结构(点序列 + 曲率信息),这样两个模块可以独立迭代,互不干扰。
嗯,这一章就到这里。记住:路径是骨架,轨迹是血肉。只有骨架没有血肉,机器人动不起来;只有血肉没有骨架,机器人会撞墙。