3. 运动控制基础:位置、速度、加速度、加加速度(Jerk)、S型曲线与梯形曲线
各位同学,欢迎来到第三讲。
说实话,运动控制里最基础的东西,就是这几个物理量:位置、速度、加速度、加加速度。你想想看,不管多复杂的电子凸轮曲线,底层拆开来看,无非就是这几个量在变化。
我个人习惯把这一讲叫做「运动控制的四层楼」。为什么?因为位置是地面,速度是第一层,加速度是第二层,加加速度(Jerk)是第三层。每一层都建立在前一层的基础上。
3.1 从位置到加加速度:四个物理量的关系
先看一张表,把它们的数学关系理清楚:
| 物理量 | 符号 | 单位 | 数学定义 | 物理意义 |
|---|---|---|---|---|
| 位置 | s | mm 或 ° | 基础量 | 物体在空间中的坐标 |
| 速度 | v | mm/s 或 °/s | v = ds/dt | 位置变化的快慢 |
| 加速度 | a | mm/s² 或 °/s² | a = dv/dt | 速度变化的快慢 |
| 加加速度 | j | mm/s³ 或 °/s³ | j = da/dt | 加速度变化的快慢 |
嗯,这里要注意:加加速度(Jerk)这个词,很多教材里也叫「跃度」。我个人更喜欢叫它「冲击度」,因为它的物理意义就是——你坐在机器上,感觉到的「顿挫感」有多大。
核心观点:位置连续,速度不一定连续;速度连续,加速度不一定连续;加速度连续,加加速度不一定连续。而电子凸轮要做的,就是让这些量尽可能连续。
3.2 梯形曲线:简单但粗暴
梯形速度曲线,是运动控制里最经典的曲线之一。为什么叫梯形?你看它的速度曲线形状,就像一个梯形。
它的运动过程分三段:
- 加速段:从0加速到目标速度,加速度恒定
- 匀速段:保持目标速度运行
- 减速段:从目标速度减速到0,减速度恒定
我在项目中遇到过很多次,新手工程师一上来就用梯形曲线。为什么?因为简单啊!计算量小,参数少,容易理解。
但梯形曲线有个致命问题——加速度突变。你想想看,在加速段结束的瞬间,加速度从最大值直接跳变到0。这个突变会产生什么?会产生一个无穷大的加加速度(Jerk)。
避坑指南:我曾经在一个高速贴片机项目里,用了梯形曲线做凸轮。结果机器在加速段结束的瞬间,整个机架都在抖。后来一测,那个位置的加速度突变直接导致了机械共振。从那以后,我对梯形曲线就格外小心了。
3.3 S型曲线:平滑的进阶方案
S型曲线,说白了就是给梯形曲线「加了个圆角」。它把加速度的突变,变成了一个平滑的过渡。
S型曲线的速度曲线长什么样?它不再是梯形,而是像字母「S」一样平滑地上升和下降。
它的运动过程分七段:
- 加加速段:加加速度为正,加速度从0开始增加
- 匀加速段:加加速度为0,加速度保持最大值
- 减加速段:加加速度为负,加速度减小到0
- 匀速段:速度保持最大值
- 加减速段:加加速度为负,加速度从0开始反向增加
- 匀减速段:加加速度为0,减速度保持最大值
- 减减速段:加加速度为正,减速度减小到0
你可能会问:「七段?这也太复杂了吧?」
没错,S型曲线的参数确实比梯形曲线多。但换来的是什么?是加加速度的连续性。整个运动过程中,加加速度j是有限值,不会出现无穷大的冲击。
个人经验:我建议在以下场景优先考虑S型曲线:
- 负载对冲击敏感(比如玻璃基板搬运)
- 高速高精度定位(比如芯片封装)
- 机械结构刚性不足(容易共振)
3.4 梯形 vs S型:怎么选?
直接上对比表,一目了然:
| 对比项 | 梯形曲线 | S型曲线 |
|---|---|---|
| 加速度连续性 | 不连续(有突变) | 连续 |
| 加加速度 | 无穷大(在转折点) | 有限值 |
| 运动时间 | 较短 | 稍长(约多10%~20%) |
| 计算复杂度 | 低 | 中等 |
| 机械冲击 | 大 | 小 |
| 适用场景 | 低速、刚性好的系统 | 高速、高精度、柔性系统 |
说白了,没有绝对的好坏。我个人的选择原则是:
- 如果系统刚性足够好,速度不高,梯形曲线完全够用
- 如果对振动和精度有要求,老老实实上S型曲线
3.5 代码实现:梯形曲线 vs S型曲线
光说不练假把式。我们直接看代码,感受一下两者的区别。
先看梯形曲线的位置规划:
def trapezoidal_profile(t, T_acc, T_const, T_dec, v_max):
"""
梯形速度曲线位置规划
t: 当前时间
T_acc: 加速段时间
T_const: 匀速段时间
T_dec: 减速段时间
v_max: 最大速度
"""
T_total = T_acc + T_const + T_dec
if t <= T_acc:
# 加速段:匀加速
a = v_max / T_acc
s = 0.5 * a * t * t
elif t <= T_acc + T_const:
# 匀速段
s = 0.5 * v_max * T_acc + v_max * (t - T_acc)
elif t <= T_total:
# 减速段:匀减速
t_dec = t - T_acc - T_const
a = v_max / T_dec
s = 0.5 * v_max * T_acc + v_max * T_const + v_max * t_dec - 0.5 * a * t_dec * t_dec
else:
s = 0.5 * v_max * T_acc + v_max * T_const + 0.5 * v_max * T_dec
return s
再看S型曲线的位置规划(简化版,只考虑加加速和减加速段):
def s_curve_profile(t, T_j, T_a, T_v, v_max, a_max):
"""
S型曲线位置规划(简化版)
t: 当前时间
T_j: 加加速段时间
T_a: 加速段时间(含加加速和减加速)
T_v: 匀速段时间
v_max: 最大速度
a_max: 最大加速度
"""
T_total = 2 * T_j + T_a + T_v
if t <= T_j:
# 加加速段:jerk为正
j = a_max / T_j
s = (1/6) * j * t * t * t
elif t <= T_a:
# 匀加速段:jerk为0
t1 = t - T_j
s = (1/6) * a_max * T_j * T_j + 0.5 * a_max * T_j * t1 + 0.5 * a_max * t1 * t1
elif t <= T_a + T_j:
# 减加速段:jerk为负
t2 = t - T_a
s = (1/6) * a_max * T_j * T_j + 0.5 * a_max * T_j * T_j + a_max * T_j * t2 - (1/6) * (a_max/T_j) * t2 * t2 * t2
elif t <= T_a + T_j + T_v:
# 匀速段
s = ... # 篇幅原因,省略后续段
else:
s = ... # 篇幅原因,省略后续段
return s
注意:上面的S型曲线代码只展示了前三个段。完整的七段代码比较长,但核心思想是一样的——通过控制加加速度j,让加速度a平滑变化。
3.6 加加速度(Jerk)的物理意义
最后,我想单独聊聊加加速度这个量。很多教材把它一笔带过,但我觉得它才是运动控制的灵魂。
加加速度的物理意义是什么?
- 它决定了加速度的变化率
- 它直接影响了机械系统的振动
- 它决定了运动过程的「舒适度」
我记得有一次调试一个精密定位平台,梯形曲线跑起来总是有微小的过冲。后来我把加加速度限制在某个值以下,过冲问题就解决了。为什么?因为加加速度限制了加速度的变化速度,让伺服系统有足够的时间去响应。
实用技巧:在实际项目中,我通常这样设置加加速度:
- 先根据机械系统的固有频率,估算一个安全的加加速度上限
- 然后在这个上限内,选择尽可能大的加加速度,以缩短运动时间
- 最后通过实际测试微调
好了,这一讲的内容就到这里。位置、速度、加速度、加加速度,这四个量构成了运动控制的基础。梯形曲线简单直接,S型曲线平滑优雅。怎么选,看你的系统需求。
下一讲,我们会深入电子凸轮的核心——如何用数学曲线来描述这些运动规律。到时候,你会发现,今天讲的这些基础,全都会用上。