第一章 轨迹规划基础:从梯形到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约束后,速度曲线变成七段:
- 加加速度段(Jerk为正,加速度从0增加到Amax)
- 匀加速段(加速度保持Amax)
- 减加速度段(Jerk为负,加速度从Amax降到0)
- 匀速段(速度保持Vmax)
- 加减速度段(Jerk为负,加速度从0降到-Amax)
- 匀减速段(加速度保持-Amax)
- 减减速度段(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 知识体系总览
下面这张图,是我自己总结的轨迹规划知识体系。你可以把它当作本章的「地图」:
1.7 实际项目中的选择策略
讲了这么多理论,到底怎么选?我给大家一个实战建议:
- 步进电机+低负载:梯形曲线就够了。我做过一个标签贴标机,步进电机带个小滚轮,梯形曲线跑得稳稳的。
- 伺服电机+中等负载:建议上S型曲线。Jerk设个合理的值,你会发现设备噪音都小很多。
- 直线电机+高精度:必须S型曲线,而且Jerk要精细调。我在光刻机工件台上,Jerk的调整精度到了个位数。
- 短距离频繁启停:T型曲线其实更合适。因为距离太短,S型曲线还没加速就减速了,反而浪费时间。
一个重要的概念:轨迹规划不是越复杂越好。我见过有人非要在点胶机上用七段S型曲线,结果周期时间长了20%,效果却没提升。合适的才是最好的。
1.8 本章小结
这一章我们讲了三种基础速度曲线:梯形、T型、S型。核心区别在于对加速度和加加速度的约束程度。
梯形曲线最简单,但有加速度突变;T型曲线是梯形的特例,用于短距离;S型曲线最平滑,但计算也最复杂。
加加速度Jerk是S型曲线的灵魂。它约束了加速度的变化率,让运动真正变得「柔顺」。
下一章,我会带大家手写一个完整的S型曲线规划器,从数学推导到C代码实现,一步不落。到时候你们会发现,S型曲线其实也没那么神秘。
好,今天就到这里。有问题欢迎在评论区留言,我看到会回复。