轨迹规划基础:路径规划 vs 轨迹规划,时间参数化与运动学约束
大家好,我是老张。今天咱们聊聊轨迹规划里最基础、也最容易搞混的两个概念——路径规划和轨迹规划。说实话,我见过不少刚入行的工程师,把这两个混为一谈,结果调试的时候踩了大坑。
路径规划 vs 轨迹规划:到底差在哪?
先问个问题:你让机器人从A点走到B点,中间绕过障碍物。这算路径规划还是轨迹规划?
答案是——路径规划。它只关心「走哪条路」,不关心「怎么走」。比如RRT、A*这些算法,输出的是一系列空间点:(x0, y0) → (x1, y1) → ... → (xn, yn)。至于每个点什么时候到、速度多快,它不管。
那轨迹规划呢?它多了一个维度——时间。说白了,轨迹 = 路径 + 时间戳。比如:
路径点: (0,0) → (1,0) → (2,0)
轨迹: t=0s 在 (0,0),t=1s 在 (1,0),t=2s 在 (2,0)
你看,轨迹规划不仅告诉你「去哪」,还告诉你「什么时候到」。这个区别在仿真验证里特别重要。我有个项目,路径规划跑得好好的,一上真实机器人就抖得厉害。为什么?因为路径规划没考虑速度和加速度,电机根本跟不上。
核心区别一句话:路径规划是几何问题,轨迹规划是时间问题。
时间参数化:给路径加上「节奏」
好,现在我们有了一条路径。怎么把它变成轨迹?这就用到时间参数化。
最常见的做法是用一个参数 s 来表示路径的进度。比如 s=0 是起点,s=1 是终点。然后我们定义 s(t) 随时间的变化规律。
举个简单的例子——梯形速度曲线:
阶段1:加速段 s(t) = 0.5 * a * t²
阶段2:匀速段 s(t) = v * t
阶段3:减速段 s(t) = v*t - 0.5 * a * t²
我个人习惯用三次多项式做时间参数化。为什么?因为它能保证位置和速度都连续。你想想看,如果速度不连续,电机就会「咯噔」一下,这在精密装配里是致命的。
小技巧:在仿真阶段,我建议先用梯形速度曲线验证。它简单、直观,出问题容易定位。等算法稳定了,再换更复杂的S形曲线。
运动学约束:别让机器人「超速」
时间参数化不是随便写的。你得考虑机器人的运动学约束。说白了,就是机器人能跑多快、能加多大加速度。
常见的约束包括:
- 关节速度限制:每个关节的电机转速上限
- 关节加速度限制:电机能承受的加加速度
- 末端执行器速度限制:比如焊接枪的移动速度不能太快
- 笛卡尔空间约束:比如工具不能倾斜超过30度
我曾经在一个焊接机器人项目里吃过亏。路径规划完美避开了所有障碍,时间参数化也做了。结果一跑,机器人末端速度超过了焊枪的允许范围,焊缝质量一塌糊涂。后来我才意识到——约束检查必须在轨迹生成阶段做,不能等到仿真验证再发现。
怎么处理这些约束?我常用的方法是可行速度区间法:
- 先把路径离散成N个点
- 在每个点计算满足所有约束的速度上限
- 用动态规划找到一条平滑的速度曲线
代码大概长这样:
def compute_feasible_velocity(path, constraints):
# path: 路径点列表
# constraints: 包含 v_max, a_max 等
N = len(path)
v_upper = [inf] * N
for i in range(N):
# 计算关节空间速度限制
jacobian = compute_jacobian(path[i])
v_joint = constraints['joint_v_max'] / jacobian
v_upper[i] = min(v_upper[i], v_joint)
# 计算末端速度限制
v_upper[i] = min(v_upper[i], constraints['end_v_max'])
# 动态规划找最优速度曲线
v_opt = dynamic_programming(v_upper, constraints['a_max'])
return v_opt
注意:千万别忘了检查加速度约束!很多新手只限制速度,结果加速度超了,电机直接过流保护。我当年就犯过这个错,烧了两个伺服驱动器才长记性。
知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以看到,路径规划输出的是几何路径,经过时间参数化加上运动学约束,最终生成可执行的轨迹。
实际项目中的避坑指南
最后分享几个实战经验:
- 先仿真再真机:我习惯在仿真里把轨迹跑100遍,各种边界条件都测到,才敢上真机。仿真验证加速迭代,这话一点不假。
- 约束要留余量:电机标称速度100rpm,我一般只用到80rpm。为什么?因为真实负载、摩擦、温度都会影响性能。留20%余量是行业惯例。
- 时间参数化不是越复杂越好:三次多项式够用就别用五次。复杂曲线调试起来太痛苦,而且收益有限。
一句话总结:路径规划给你「路」,时间参数化给你「节奏」,运动学约束保证「能跑」。三者缺一不可。
嗯,今天就聊到这儿。记住,仿真验证的核心目的就是提前发现轨迹规划的问题。你在仿真里多花一小时,现场就能省一天。