3、轨迹规划入门:关节空间与笛卡尔空间轨迹规划,梯形速度与S型速度曲线

各位同学,今天我们来聊聊轨迹规划。

说实话,刚入行那会儿,我觉得轨迹规划不就是让机器人从A点走到B点嘛,有什么难的?直到我第一次在现场调试,机器人“哐”的一声撞上了夹具边缘……嗯,从那以后,我再也不敢小看这个环节了。

轨迹规划,说白了就是回答三个问题:走哪条路?走多快?怎么停?今天我们就从这两个空间和两种速度曲线入手,把基础打牢。

3.1 关节空间 vs 笛卡尔空间:两条完全不同的路

先问大家一个问题:你让机器人末端画一条直线,它真的会走直线吗?

答案是不一定。这取决于你在哪个空间做规划。

3.1.1 关节空间轨迹规划

关节空间规划,就是直接控制每个关节的角度变化。比如从关节角q1变到q2,我只需要让每个电机平滑地转过去就行。

优点很明显:

  • 计算量小,实时性好
  • 不会遇到奇异点问题
  • 关节运动自然、平滑

缺点呢?

  • 末端轨迹不可控——你以为走直线,实际走的是一条弧线
  • 容易撞到周围障碍物
我的经验:在码垛、搬运这类对路径形状没要求的场景,我习惯用关节空间规划。省事、稳定、不出幺蛾子。

3.1.2 笛卡尔空间轨迹规划

笛卡尔空间规划,就是直接控制末端在三维空间中的位置和姿态。比如让焊枪沿着焊缝走一条直线,或者让涂胶头画一个圆弧。

优点:

  • 末端路径精确可控
  • 适合焊接、切割、涂胶等工艺

缺点:

  • 计算量大,需要实时逆解
  • 可能遇到奇异点——关节突然“抽风”
  • 关节速度可能超限
避坑指南:我曾经在一条焊接产线上,用笛卡尔空间规划直线路径,结果机器人走到某个位置时,第六轴突然疯狂旋转——这就是遇到了奇异点。后来我加了奇异点规避算法,才彻底解决。

3.2 梯形速度曲线:简单粗暴,但够用

梯形速度曲线,也叫T型曲线。它的速度变化分三段:加速→匀速→减速。形状像个梯形,所以得名。

为什么用梯形?因为电机不能瞬间从0跳到最大速度,需要时间加速。同样,也不能瞬间刹停,需要减速缓冲。

来看一个典型的梯形速度曲线参数:

参数 符号 说明
最大速度 v_max 电机允许的最高转速
加速度 a 加速阶段的加速度
减速度 d 减速阶段的减速度
总位移 s 从起点到终点的距离

梯形曲线的核心公式很简单:

// 加速段位移
s_acc = 0.5 * v_max² / a

// 减速段位移  
s_dec = 0.5 * v_max² / d

// 匀速段位移
s_const = s - s_acc - s_dec

// 总时间
t_total = v_max/a + s_const/v_max + v_max/d
注意:如果s_acc + s_dec > s,说明距离太短,根本到不了最大速度。这时候就是“三角形速度曲线”——只有加速和减速,没有匀速段。

梯形曲线最大的问题是什么?加速度突变。在加速结束的瞬间,加速度从a突然变成0,会产生冲击力。对于重载机器人,这种冲击可能导致抖动甚至损坏工件。

3.3 S型速度曲线:丝般顺滑

S型曲线就是为了解决梯形曲线的“硬伤”而生的。它增加了加加速度(Jerk)的概念,让加速度也平滑变化。

S型曲线分七段:

  1. 加加速段(Jerk为正,加速度增加)
  2. 匀加速段(加速度恒定)
  3. 减加速段(Jerk为负,加速度减小到0)
  4. 匀速段(速度恒定)
  5. 加减速段(Jerk为负,加速度反向增加)
  6. 匀减速段(减速度恒定)
  7. 减减速段(Jerk为正,减速度减小到0)

你想想看,七段规划听起来复杂,但实际效果确实好。我在做精密装配项目时,必须用S型曲线——梯形曲线那一下冲击,会把精密零件震歪。

S型曲线的参数更多:

参数 符号 说明
最大速度 v_max 同梯形曲线
最大加速度 a_max 加速度的峰值
最大加加速度 j_max Jerk的峰值,控制平滑度
总位移 s 同梯形曲线

代码实现比梯形复杂不少,这里给一个核心片段:

// S型曲线位置计算(简化版)
double s_curve_position(double t, double s, double v_max, double a_max, double j_max) {
    // 计算各阶段时间
    double t_a = a_max / j_max;          // 加加速时间
    double t_v = v_max / a_max;          // 匀加速时间(理想情况)
    // ... 实际需要根据位移调整
    
    // 分段计算位置
    if (t < t_a) {
        // 加加速段:s = 1/6 * j * t³
        return 1.0/6.0 * j_max * t * t * t;
    } else if (t < t_a + t_v) {
        // 匀加速段
        // ...
    }
    // ... 其他段类似
}
实用建议:如果项目对运动平滑度要求不高,用梯形曲线就够了。S型曲线虽然好,但参数调起来很麻烦。我个人习惯:重载、精密场景用S型;轻载、快速场景用梯形。

3.4 两种空间 × 两种曲线 = 四种组合

实际项目中,我们经常需要组合使用:

  • 关节空间 + 梯形曲线:最常用,适合大多数搬运、码垛
  • 关节空间 + S型曲线:重载机器人,减少冲击
  • 笛卡尔空间 + 梯形曲线:简单直线路径,如涂胶
  • 笛卡尔空间 + S型曲线:精密焊接、装配,路径和速度都要求高

下面这张图展示了本章的知识体系,帮你理清思路:

轨迹规划知识体系 轨迹规划 规划空间 速度曲线 关节空间 笛卡尔空间 梯形曲线 S型曲线 计算量小 路径不可控 路径精确 有奇异点风险 加速度突变 实现简单 平滑无冲击 参数调校复杂 四种组合:关节+梯形 | 关节+S型 | 笛卡尔+梯形 | 笛卡尔+S型 根据场景需求灵活选择

3.5 选型建议:到底用哪个?

很多新手会纠结这个问题。我的建议很简单:

  • 先看路径要求:末端路径必须精确吗?是→笛卡尔空间;否→关节空间
  • 再看负载和精度:负载重或精度高?是→S型曲线;否→梯形曲线
  • 最后看控制器算力:算力够吗?不够就降级用梯形
一句话总结:关节空间+梯形曲线是“万金油”,笛卡尔空间+S型曲线是“高配版”。从简单的开始,遇到问题再升级。

好了,轨迹规划的基础就讲到这里。下一节我们会深入代码实现,手把手教你写一个完整的梯形曲线规划器。到时候见!


专注资料整理