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 梯形曲线:简单但粗暴

梯形速度曲线,是运动控制里最经典的曲线之一。为什么叫梯形?你看它的速度曲线形状,就像一个梯形。

它的运动过程分三段:

  1. 加速段:从0加速到目标速度,加速度恒定
  2. 匀速段:保持目标速度运行
  3. 减速段:从目标速度减速到0,减速度恒定

我在项目中遇到过很多次,新手工程师一上来就用梯形曲线。为什么?因为简单啊!计算量小,参数少,容易理解。

但梯形曲线有个致命问题——加速度突变。你想想看,在加速段结束的瞬间,加速度从最大值直接跳变到0。这个突变会产生什么?会产生一个无穷大的加加速度(Jerk)。

避坑指南:我曾经在一个高速贴片机项目里,用了梯形曲线做凸轮。结果机器在加速段结束的瞬间,整个机架都在抖。后来一测,那个位置的加速度突变直接导致了机械共振。从那以后,我对梯形曲线就格外小心了。

3.3 S型曲线:平滑的进阶方案

S型曲线,说白了就是给梯形曲线「加了个圆角」。它把加速度的突变,变成了一个平滑的过渡。

S型曲线的速度曲线长什么样?它不再是梯形,而是像字母「S」一样平滑地上升和下降。

它的运动过程分七段:

  1. 加加速段:加加速度为正,加速度从0开始增加
  2. 匀加速段:加加速度为0,加速度保持最大值
  3. 减加速段:加加速度为负,加速度减小到0
  4. 匀速段:速度保持最大值
  5. 加减速段:加加速度为负,加速度从0开始反向增加
  6. 匀减速段:加加速度为0,减速度保持最大值
  7. 减减速段:加加速度为正,减速度减小到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型曲线平滑优雅。怎么选,看你的系统需求。

下一讲,我们会深入电子凸轮的核心——如何用数学曲线来描述这些运动规律。到时候,你会发现,今天讲的这些基础,全都会用上。