3、轨迹规划基础:关节空间规划 vs 笛卡尔空间规划、梯形速度曲线、S形速度曲线

做机器人控制这些年,我越来越觉得轨迹规划是「灵魂」所在。你想想看,就算电机选得再好、算法再花哨,如果轨迹规划没做好,机器人动起来就像个刚学走路的醉汉——抖、晃、甚至过冲。今天咱们就聊聊轨迹规划里最基础、也最绕不开的两个话题:空间选择与速度曲线。

3.1 关节空间规划 vs 笛卡尔空间规划

先说个我自己的经历。刚入行那会儿,我接了个焊接任务,要求焊枪末端走一条直线。我心想这还不简单?直接在笛卡尔空间插值呗。结果一跑起来,机器人六个轴疯狂抖动,焊出来的焊缝像蚯蚓爬。后来老工程师看了一眼,说:「你试试关节空间规划。」换完之后,整个世界安静了。

为什么会这样?说白了,这两种规划方式的本质区别在于:你在哪个坐标系里描述运动。

3.1.1 关节空间规划

关节空间规划,就是直接对每个关节的角度进行插值。比如从起点关节角 q_start 到终点 q_end,我让每个关节按照自己的速度、加速度限制,独立地走过去。

优点:

  • 计算量小,不需要做逆运动学实时求解
  • 不会遇到奇异点问题
  • 关节运动平滑,适合点到点运动

缺点:

  • 末端轨迹不可控——你以为走直线,实际画了个弧线
  • 不适合对末端姿态有严格要求的场景

我建议:90%的工业应用场景,用关节空间规划就够了。比如码垛、搬运、简单的装配,末端走什么路径不重要,只要起点和终点对就行。

3.1.2 笛卡尔空间规划

笛卡尔空间规划,是在三维空间里直接规划末端的位置和姿态。比如我要让焊枪末端沿着一条直线焊缝移动,那就必须在笛卡尔空间里插值。

但这里有个坑——笛卡尔空间规划需要实时做逆运动学求解。你想想看,每插值出一个笛卡尔点位,就要算一遍 IK,把六个关节角算出来。如果算得慢,或者遇到奇异点,机器人直接就「卡住」了。

我曾经踩过的坑:

有一次做打磨应用,需要在曲面上走等距线。我在笛卡尔空间里每 1ms 插一个点,结果 IK 求解偶尔会跳变,导致机器人末端突然「抖」一下。后来我改成在关节空间里做 NURBS 曲线拟合,反而更稳。所以啊,不是所有「直线路径」都非得用笛卡尔空间。

3.1.3 怎么选?一张表说清楚

场景 推荐空间 原因
点到点搬运 关节空间 简单、快速、无奇异
直线焊接/涂胶 笛卡尔空间 末端路径必须精确
复杂曲面加工 笛卡尔空间 + 平滑预处理 路径精度优先
高速拾放 关节空间 减少计算延迟
避障路径 关节空间 + 路径点约束 灵活性更高

3.2 梯形速度曲线

好,空间选完了,接下来就是怎么让机器人「动起来」。最经典的速度曲线就是梯形——加速段、匀速段、减速段,画出来像个梯形。

我个人习惯叫它「懒人曲线」。为什么?因为实现起来太简单了:

// 梯形速度曲线参数
v_max = 0.5 m/s    // 最大速度
a = 1.0 m/s²       // 加速度
total_distance = 1.0 m

// 计算加速段距离
t_acc = v_max / a
d_acc = 0.5 * a * t_acc²

// 如果总距离不够加速到最大速度
if (2 * d_acc > total_distance) {
    // 三角形曲线:没有匀速段
    t_acc = sqrt(total_distance / a)
    v_peak = a * t_acc
} else {
    // 梯形曲线:有匀速段
    d_const = total_distance - 2 * d_acc
    t_const = d_const / v_max
}

梯形曲线最大的优点是:计算量极小,适合嵌入式实时系统。我在 STM32 上跑过,一个定时器中断里就能算完。

但缺点也很明显——加速度在拐点处突变。你想想看,从加速段切换到匀速段那一瞬间,加速度从 a 直接跳到 0,这会导致机器人产生冲击。轻则抖动,重则损坏减速机。

我的经验:

梯形曲线适合对速度要求不高、负载较轻的场景。比如小型桌面机器人、教育机器人。但如果是重载(比如 50kg 以上的工业机器人),我建议你直接跳过梯形,用 S 形。

3.3 S形速度曲线

S形速度曲线,说白了就是给梯形曲线「加了个圆角」。它把加速度的变化也做了平滑处理——加速度从 0 逐渐增加到 a_max,再逐渐减到 0。这样速度曲线就变成了 S 形。

S形曲线通常分 7 段:

  1. 加加速段(jerk > 0)
  2. 匀加速段(jerk = 0)
  3. 减加速段(jerk < 0)
  4. 匀速段
  5. 加减速段(jerk < 0)
  6. 匀减速段(jerk = 0)
  7. 减减速段(jerk > 0)

嗯,听着复杂,但核心就一个参数——加加速度(Jerk)。Jerk 越小,曲线越平滑,但运动时间越长。

// S形曲线关键参数
v_max = 0.5 m/s
a_max = 1.0 m/s²
j_max = 5.0 m/s³   // 加加速度限制

// 计算各段时间(简化版)
t_j = a_max / j_max          // 加加速段时间
t_a = v_max / a_max - t_j    // 匀加速段时间(如果存在)
// 实际实现需要判断是否达到最大加速度

S形曲线的优势:

  • 加速度连续变化,无冲击
  • 适合高速、高精度、重载场景
  • 减少机械振动和磨损

代价:

  • 计算量比梯形大 3-5 倍
  • 运动时间略长(同样距离下)
  • 参数调优需要经验

我记得有一次做半导体晶圆搬运,晶圆薄得像纸片,稍微抖一下就碎了。梯形曲线根本不敢用,一加速晶圆就滑。换成 S 形曲线之后,把 Jerk 调到 2.0 m/s³,整个运动过程丝滑得像抹了油。嗯,从那以后我对 S 形曲线就「路转粉」了。

3.4 一张图看懂本章知识体系

下面这张 SVG 图,把关节空间 vs 笛卡尔空间、梯形 vs S 形的关系梳理清楚了。我建议你保存下来,以后做方案选型时直接对照。

轨迹规划基础:核心知识体系 轨迹规划 空间选择 速度曲线 关节空间规划 直接对关节角插值 笛卡尔空间规划 对末端位姿插值 梯形速度曲线 加速度突变 S形速度曲线 加速度连续 选型口诀 点到点用关节+梯形,路径精确用笛卡尔+S形

3.5 实际选型建议

最后,我结合自己的项目经验,给你几个「拿来就能用」的建议:

  • 如果做原型验证:先用关节空间 + 梯形曲线,跑通了再优化。别一上来就搞 S 形,调参能调到你怀疑人生。
  • 如果做产品量产:直接上 S 形曲线。虽然开发周期多两天,但客户体验好太多。我见过太多因为抖动被退货的案例了。
  • 如果做精密加工:笛卡尔空间 + S 形曲线是标配。别省这点计算量,省下来的计算量都会变成废品率。
  • 如果做高速拾放:关节空间 + 梯形曲线就够了。速度是王道,末端路径稍微偏一点没关系。

注意:无论选哪种方案,一定要在仿真环境里先跑一遍。我曾经偷懒没仿真,直接上真机,结果轨迹规划有个边界条件没处理好,机器人直接撞到夹具上。嗯,那次之后我学乖了。

好了,轨迹规划的基础就聊到这儿。下一节咱们会深入讲「多段轨迹的平滑切换」,那才是真正考验功力的时候。


可可精品资料库