第4章:轨迹规划入门:关节空间 vs 笛卡尔空间规划、梯形速度规划、S形速度规划

大家好,欢迎来到轨迹规划这一章。

说实话,轨迹规划这块内容,是我在做人形机器人项目时,踩坑最多的地方之一。你想想看,一个1米7的大个子,如果轨迹规划没做好,走起路来就像喝醉了酒,那画面……嗯,我经历过。

今天咱们就把这块硬骨头啃下来。我会把关节空间和笛卡尔空间的区别讲透,再把梯形和S形速度规划掰开揉碎了说清楚。

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

先问大家一个问题:你希望机器人末端走直线,还是关节转得顺?

这两个目标,其实对应了两种不同的规划思路。

4.1.1 关节空间规划

说白了,就是只关心每个关节的角度变化。从起始角度到目标角度,我不管末端走什么曲线,我只管关节自己转得舒服。

优点很明显:

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

缺点也致命:

  • 末端轨迹不可控,可能走出一条奇怪的弧线
  • 在狭窄空间里容易撞到东西

我的经验: 在做人形机器人抓取桌面物体时,如果周围没有障碍物,我习惯用关节空间规划。省事,而且计算快。但如果是穿过一个窗户或者架子,那就必须用笛卡尔空间了。

4.1.2 笛卡尔空间规划

这个就反过来了。我不管你关节怎么转,我只要末端走直线、走圆弧,或者走任何我指定的路径。

优点:

  • 末端轨迹精确可控
  • 适合避障和精密操作

缺点:

  • 计算量大,需要实时逆解
  • 可能遇到奇异点,导致关节速度突变

注意: 我曾经在一个项目中,用笛卡尔空间规划让机器人画圆。结果在某个位置,关节突然猛转了一下——因为遇到了奇异点。从那以后,我每次做笛卡尔规划都会先检查奇异点。

4.2 梯形速度规划:简单但够用

好,现在咱们聊聊速度怎么规划。梯形速度规划,是我用得最多的入门级方案。

它的形状就像个梯形:加速段、匀速段、减速段。

// 梯形速度规划核心参数
float v_max = 0.5;    // 最大速度 (m/s)
float a_max = 0.2;    // 最大加速度 (m/s²)
float total_dist = 1.0; // 总位移 (m)

// 计算加速段距离
float acc_dist = v_max * v_max / (2 * a_max);
// 如果总距离不够加速和减速,就变成三角形速度曲线
if (2 * acc_dist > total_dist) {
    // 三角形规划:没有匀速段
    float v_peak = sqrt(a_max * total_dist);
    // ... 后续计算
} else {
    // 梯形规划:有匀速段
    float const_dist = total_dist - 2 * acc_dist;
    float const_time = const_dist / v_max;
    // ... 后续计算
}

你看,代码其实很简单。但要注意一个坑:如果总位移太小,梯形会退化成三角形。我刚开始做的时候没注意这个,结果机器人抖得跟筛子似的。

小技巧: 在实际项目中,我通常会在梯形规划的基础上,加一个起始和结束的平滑过渡。比如起始加速度从0开始慢慢增加,而不是直接跳到最大加速度。这样能减少机械冲击。

4.3 S形速度规划:更顺滑,但更复杂

梯形规划有个问题:加速度突变。你想想看,从加速段切换到匀速段的那一刻,加速度从a_max直接变成0。这会导致什么?

对,冲击力。人形机器人身上有那么多精密传感器,这种冲击会直接影响IMU的数据质量。

S形速度规划就是来解决这个问题的。它把加速度也做了平滑处理,变成了加加速度(Jerk)可控。

// S形速度规划七段式参数
float v_max = 0.5;     // 最大速度
float a_max = 0.2;     // 最大加速度
float j_max = 0.5;     // 最大加加速度 (m/s³)

// 七段式:加加速、匀加速、减加速、匀速、加减速、匀减速、减减速
// 计算各段时间
float t_j = a_max / j_max;  // 加加速度段时间
float t_a = v_max / a_max;  // 加速段时间
// ... 实际计算要复杂得多,这里只展示核心思路

说实话,S形规划的数学推导比梯形复杂不少。但效果是真的好。我在做双足步行的时候,必须用S形规划,否则机器人走两步就开始晃。

对比总结:

特性 梯形速度规划 S形速度规划
计算复杂度 低 中高
加速度连续性 不连续 连续
机械冲击 有 小
适用场景 简单搬运、快速移动 精密操作、人形机器人

4.4 核心知识体系:一张图看懂

下面这张图,是我自己梳理的轨迹规划知识体系。你看完应该能对整体有个把握。

轨迹规划知识体系 关节空间规划 笛卡尔空间规划 梯形速度规划(T型) S形速度规划(S型) 加速段 + 匀速段 + 减速段 加速度突变 → 有冲击 计算简单,实时性好 七段式:加加速/匀加速/减加速... 加速度连续 → 无冲击 计算复杂,适合精密控制 选择建议 简单场景 → 关节空间 + 梯形规划 精密场景 → 笛卡尔空间 + S形规划

4.5 实际项目中的选择策略

说了这么多理论,咱们聊聊实际怎么选。

  1. 如果只是做简单的点到点运动,比如机器人从A点走到B点,中间没有障碍物——我建议用关节空间+梯形规划。省事,够用。
  2. 如果需要末端走特定路径,比如焊接、涂胶、画图——必须用笛卡尔空间。速度规划看精度要求,一般S形更稳。
  3. 做人形机器人步行——我个人的血泪教训:一定要用笛卡尔空间+S形规划。因为人形机器人的质心高度变化很敏感,梯形规划的冲击会让ZMP(零力矩点)剧烈波动,走着走着就倒了。

避坑指南: 我曾经在一个项目中,为了省计算资源,在笛卡尔空间里用了梯形规划。结果机器人末端在拐角处抖了一下,把旁边的一个精密零件碰掉了。从那以后,凡是笛卡尔空间,我必用S形规划。

好了,这一章的内容就到这里。轨迹规划是运动控制的灵魂,关节空间和笛卡尔空间的选择,梯形和S形的取舍,都需要你在实际项目中慢慢体会。

最后说一句: 别怕代码复杂。S形规划的七段式推导确实绕,但你只要把核心公式记住,剩下的就是调参。调参这件事,说白了就是试——我一般先给一个保守的加速度和加加速度,然后慢慢往上加,直到出现抖动再退回来一点。

可可精品资料库