4. 路径规划与轨迹规划的区别
说实话,我刚入行那会儿,也搞混过这两个概念。
那时候领导让我做个「轨迹规划」,我吭哧吭哧搞了条路径出来。结果机器人一跑,急停急启,抖得像筛糠。领导看了直摇头:「你这是路径,不是轨迹。」
嗯,今天咱们就把这事彻底掰扯清楚。
4.1 路径 vs 轨迹:本质区别
先给个最直白的定义:
- 路径(Path):只关心「走哪条路」,不关心「怎么走」。
- 轨迹(Trajectory):不仅关心「走哪条路」,还关心「每个时刻走到哪、速度多快、加速度多大」。
说白了,路径是几何问题,轨迹是时间问题。
我举个例子你就明白了。你从家走到公司,地图上画一条线——那是路径。但如果你说「我8点出门,8点05分到路口,8点20分到公司,前5分钟慢走,中间10分钟快走,最后5分钟再慢下来」——这就是轨迹。
核心区别一句话:
路径 = 空间上的曲线
轨迹 = 路径 + 时间信息 + 运动状态
我在做AGV项目时遇到过一个问题:两辆小车在同一条路径上相向而行,路径规划说「没问题,路够宽」。结果真跑起来,一辆急刹一辆急加速,差点撞上。为什么?因为路径规划没考虑时间上的同步。后来我改成轨迹规划,给每辆车分配了时间槽,问题就解决了。
4.2 时间参数化:给路径加上「时钟」
路径是一条几何曲线,通常用参数 s 表示。s 可以是弧长,也可以是归一化参数(0到1)。
但轨迹不一样。轨迹是时间的函数:
路径:P(s) = [x(s), y(s), z(s)],s ∈ [0, 1]
轨迹:T(t) = [x(t), y(t), z(t)],t ∈ [0, T]
时间参数化,就是把路径参数 s 映射到时间 t 上。这个映射关系决定了机器人怎么走。
举个例子:
- 如果 s = t / T(线性映射),那就是匀速运动。
- 如果 s = (t/T)^2(二次映射),那就是加速运动。
- 如果 s 是更复杂的函数,那就是变速运动。
你想想看,为什么需要时间参数化?因为真实世界有物理限制。电机有最大转速,关节有最大加速度,你不能让机器人瞬间从0加速到1m/s。时间参数化就是把这些约束考虑进去。
我的经验:
做时间参数化时,一定要先检查路径的曲率。曲率大的地方,速度要降下来。我曾经在一个急弯处没做速度限制,结果机器人直接甩出去了——嗯,那次测试把旁边的纸箱撞飞了好几个。
4.3 S形速度曲线:平滑才是王道
说到速度曲线,最常见的两种是梯形和S形。
梯形速度曲线:加速-匀速-减速三段。简单粗暴,但问题在于加速度突变。从0加速到最大速度那一刻,加速度从0跳变到某个值,会产生冲击力(Jerk)。
S形速度曲线:加加速-匀加速-减加速-匀速-加减速-匀减速-减减速七段。加速度连续变化,没有突变,运动更平滑。
我画个图你就明白了:
看到没?梯形在拐角处有尖点,那就是加速度突变的地方。S形曲线圆润平滑,加速度连续变化。
S形速度曲线的数学表达式通常用分段多项式表示。我给出一个简单的实现:
def s_curve_profile(t, T, v_max, a_max, j_max):
"""
S形速度曲线生成
t: 当前时间
T: 总时间
v_max: 最大速度
a_max: 最大加速度
j_max: 最大加加速度
"""
# 计算各阶段时间点
ta = a_max / j_max # 加加速/减加速时间
tv = T - 2 * ta # 匀速时间
if t <= ta:
# 加加速阶段
v = 0.5 * j_max * t**2
elif t <= ta + tv:
# 匀速阶段
v = v_max
elif t <= T:
# 减加速阶段
t_dec = t - (ta + tv)
v = v_max - 0.5 * j_max * t_dec**2
else:
v = 0
return v
注意:
S形曲线虽然平滑,但计算量比梯形大。在嵌入式平台上跑的时候,要注意实时性。我建议把曲线参数提前算好,存成查找表,运行时直接查表插值。
4.4 路径规划 vs 轨迹规划:一张图说清楚
下面这张图总结了整个知识体系:
这张图把两者的关系说得很清楚了。路径规划是轨迹规划的前置步骤,轨迹规划在路径的基础上加上时间维度和运动约束。
4.5 实战中的选择建议
说了这么多,到底什么时候用路径规划,什么时候用轨迹规划?
我的建议是这样的:
| 场景 | 用路径规划就够了 | 必须用轨迹规划 |
|---|---|---|
| 低速移动(< 0.5 m/s) | ✅ 可以 | ❌ 没必要 |
| 高速移动(> 1 m/s) | ❌ 会抖动 | ✅ 必须 |
| 机械臂点到点 | ✅ 简单场景 | ✅ 高精度场景 |
| AGV/AMR导航 | ❌ 容易急停 | ✅ 推荐 |
| 无人机航点飞行 | ❌ 会飘 | ✅ 必须 |
避坑指南:
我曾经在一个项目中偷懒,只做了路径规划没做轨迹规划。结果机器人每次转弯都像在漂移,货物全甩出去了。后来老老实实加了S形速度曲线,问题才解决。所以我的建议是——除非你的应用对平滑性完全没要求,否则还是上轨迹规划吧。
好了,这一章的内容就到这。路径和轨迹的区别,说白了就是「走哪」和「怎么走」的区别。下一章咱们聊聊具体的轨迹生成算法,到时候会用到今天讲的时间参数化和S形曲线。
可可精品资料库