第一章 轨迹规划基础:从梯形到S型,我们到底在规划什么?

大家好,我是你们的老朋友。今天咱们正式开讲《超精密运动控制算法实战解析》的第一章——轨迹规划基础。

说实话,我刚开始做运动控制那会儿,觉得轨迹规划不就是算个加减速嘛,有什么难的?直到有一次,我负责一台高速贴片机的运动系统,结果设备一启动,整个机台都在抖,螺丝都震松了。嗯,从那以后,我再也不敢小看轨迹规划了。

这一章,咱们就把梯形速度曲线、T型速度曲线、S型速度曲线,还有那个让人又爱又恨的加加速度(Jerk),一次性讲透。

1.1 轨迹规划到底在解决什么问题?

先问大家一个问题:电机从A点走到B点,直接给最大速度行不行?

当然不行。你想想看,如果瞬间从0跳到最大速度,那加速度就是无穷大。实际物理系统里,这会导致两个后果:一是电机堵转或丢步,二是机械结构冲击损坏。

所以,轨迹规划的核心任务就三个:

  • 保证运动平滑——不抖、不冲、不震荡
  • 满足物理约束——速度上限、加速度上限、力矩上限
  • 时间最优——在满足约束的前提下,跑得越快越好

说白了,就是给电机规划一条「既能跑得快,又不会散架」的路径。

核心公式:位置、速度、加速度、加加速度之间的关系

位置 p(t) → 一阶导 → 速度 v(t) → 一阶导 → 加速度 a(t) → 一阶导 → 加加速度 j(t)

反过来:j(t) 积分 → a(t) 积分 → v(t) 积分 → p(t)

1.2 梯形速度曲线——最朴素的方案

梯形速度曲线,也叫T型曲线(注意,有些地方把T型和梯形混着叫,我这里统一区分一下)。

它的形状很简单:匀加速段 → 匀速段 → 匀减速段。像个梯形,所以叫梯形速度曲线。

我在项目中第一次用的就是它。为什么?因为好算啊!

梯形曲线的参数只有三个:最大速度 Vmax、加速度 A、减速度 D(通常A=D)。给定总位移S,就能算出三段的时间。

// 梯形速度曲线时间计算(C语言伪代码)
float CalcTrapezoidTime(float S, float Vmax, float A) {
    float ta = Vmax / A;          // 加速时间
    float td = Vmax / A;          // 减速时间(假设A=D)
    float Sa = 0.5 * A * ta * ta; // 加速段位移
    float Sd = Sa;                // 减速段位移
    float Sc = S - Sa - Sd;       // 匀速段位移
    if (Sc < 0) {
        // 还没加速到Vmax就要减速了,属于三角形曲线
        // 这里先不展开
    }
    float tc = Sc / Vmax;
    return ta + tc + td;
}

优点:计算量极小,适合低算力MCU。

缺点:加速度突变。在加速开始、加速结束、减速开始、减速结束这四个点,加速度从0跳变到A或从A跳变到0。这种突变会产生冲击力。

避坑指南:我曾经在一个龙门双驱平台上用梯形曲线,结果每次加减速切换时,两个轴的同步误差瞬间飙到0.1mm。后来换成S型曲线,同步误差直接降到0.01mm以下。所以,但凡对精度有要求的场合,慎用梯形曲线。

1.3 T型速度曲线——其实是个误会

很多初学者会把T型曲线和梯形曲线搞混。我这里明确一下:

T型速度曲线,指的是只有加速和减速段,没有匀速段。形状像个三角形,所以也叫三角形速度曲线。

什么时候用T型?当位移S比较小,还没加速到Vmax就得开始减速了。这时候梯形曲线退化为T型曲线。

T型曲线的计算更简单:

// T型曲线时间计算
float CalcTriangleTime(float S, float A) {
    // 假设A=D,且没有匀速段
    float ta = sqrt(S / A);  // 加速时间
    float td = ta;           // 减速时间
    return ta + td;
}

但注意,T型曲线的加速度突变问题比梯形曲线更严重——因为加减速时间更短,冲击更集中。

1.4 S型速度曲线——加加速度约束的引入

好,重点来了。S型速度曲线,才是工业级运动控制的标配。

为什么叫S型?因为速度曲线像字母S一样平滑过渡。它的核心思想是:对加速度的变化率也做约束,也就是加加速度Jerk。

加加速度Jerk = da/dt,单位是 m/s³。它描述的是加速度变化的快慢。

引入Jerk约束后,速度曲线变成七段:

  1. 加加速度段(Jerk为正,加速度从0增加到Amax)
  2. 匀加速段(加速度保持Amax)
  3. 减加速度段(Jerk为负,加速度从Amax降到0)
  4. 匀速段(速度保持Vmax)
  5. 加减速度段(Jerk为负,加速度从0降到-Amax)
  6. 匀减速段(加速度保持-Amax)
  7. 减减速度段(Jerk为正,加速度从-Amax升到0)

你看,从3段变成了7段,计算复杂度翻了好几倍。但换来的是什么呢?

加速度连续变化,没有突变。这意味着电机电流更平滑,机械振动大幅减小。

我的经验:在半导体封装设备中,Jerk约束通常设为加速度的10~20倍。比如加速度是10 m/s²,那Jerk就设100~200 m/s³。太小了加减速太慢,太大了又失去S型曲线的意义。

1.5 三种曲线对比——一张表看懂

特性 梯形曲线 T型曲线 S型曲线
段数 3段 2段 7段
加速度连续性 不连续(有突变) 不连续(有突变) 连续
Jerk约束
计算复杂度 最低
运动平滑性 最差
适用场景 低精度、低成本 短距离点动 高精度、高速

1.6 知识体系总览

下面这张图,是我自己总结的轨迹规划知识体系。你可以把它当作本章的「地图」:

轨迹规划知识体系 轨迹规划 梯形速度曲线 T型速度曲线 S型速度曲线 3段:加-匀-减 加速度突变 计算简单 2段:加-减 无匀速段 短距离点动 7段:含Jerk约束 加速度连续 高精度场景 核心:在速度、加速度、加加速度之间做权衡

1.7 实际项目中的选择策略

讲了这么多理论,到底怎么选?我给大家一个实战建议:

  • 步进电机+低负载:梯形曲线就够了。我做过一个标签贴标机,步进电机带个小滚轮,梯形曲线跑得稳稳的。
  • 伺服电机+中等负载:建议上S型曲线。Jerk设个合理的值,你会发现设备噪音都小很多。
  • 直线电机+高精度:必须S型曲线,而且Jerk要精细调。我在光刻机工件台上,Jerk的调整精度到了个位数。
  • 短距离频繁启停:T型曲线其实更合适。因为距离太短,S型曲线还没加速就减速了,反而浪费时间。

一个重要的概念:轨迹规划不是越复杂越好。我见过有人非要在点胶机上用七段S型曲线,结果周期时间长了20%,效果却没提升。合适的才是最好的。

1.8 本章小结

这一章我们讲了三种基础速度曲线:梯形、T型、S型。核心区别在于对加速度和加加速度的约束程度。

梯形曲线最简单,但有加速度突变;T型曲线是梯形的特例,用于短距离;S型曲线最平滑,但计算也最复杂。

加加速度Jerk是S型曲线的灵魂。它约束了加速度的变化率,让运动真正变得「柔顺」。

下一章,我会带大家手写一个完整的S型曲线规划器,从数学推导到C代码实现,一步不落。到时候你们会发现,S型曲线其实也没那么神秘。

好,今天就到这里。有问题欢迎在评论区留言,我看到会回复。


专注资料整理