轨迹规划基础:路径规划 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度

我曾经在一个焊接机器人项目里吃过亏。路径规划完美避开了所有障碍,时间参数化也做了。结果一跑,机器人末端速度超过了焊枪的允许范围,焊缝质量一塌糊涂。后来我才意识到——约束检查必须在轨迹生成阶段做,不能等到仿真验证再发现。

怎么处理这些约束?我常用的方法是可行速度区间法:

  1. 先把路径离散成N个点
  2. 在每个点计算满足所有约束的速度上限
  3. 用动态规划找到一条平滑的速度曲线

代码大概长这样:

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

注意:千万别忘了检查加速度约束!很多新手只限制速度,结果加速度超了,电机直接过流保护。我当年就犯过这个错,烧了两个伺服驱动器才长记性。

知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以看到,路径规划输出的是几何路径,经过时间参数化加上运动学约束,最终生成可执行的轨迹。

路径规划 几何路径 (x,y,z) 时间参数化 s(t) 速度曲线 运动学约束 速度/加速度限制 可执行轨迹 (x,y,z,t,v,a) 约束检查反馈 图:从路径规划到轨迹生成的完整流程 虚线表示约束检查的反馈回路,确保生成的轨迹物理可行

实际项目中的避坑指南

最后分享几个实战经验:

  • 先仿真再真机:我习惯在仿真里把轨迹跑100遍,各种边界条件都测到,才敢上真机。仿真验证加速迭代,这话一点不假。
  • 约束要留余量:电机标称速度100rpm,我一般只用到80rpm。为什么?因为真实负载、摩擦、温度都会影响性能。留20%余量是行业惯例。
  • 时间参数化不是越复杂越好:三次多项式够用就别用五次。复杂曲线调试起来太痛苦,而且收益有限。

一句话总结:路径规划给你「路」,时间参数化给你「节奏」,运动学约束保证「能跑」。三者缺一不可。

嗯,今天就聊到这儿。记住,仿真验证的核心目的就是提前发现轨迹规划的问题。你在仿真里多花一小时,现场就能省一天。

可可精品资料库