第二节 运动控制基础:位置、速度、加速度、加加速度(Jerk)的概念与关系

各位同学,咱们今天聊点最基础的东西。别小看这些概念,我做了这么多年运动控制,发现很多问题都出在对这几个量的理解不够深。说白了,位置、速度、加速度、加加速度,就是描述一个物体怎么动的四个层次。

1. 位置(Position)—— 你在哪?

位置,就是物体在空间中的坐标。在运动控制里,我们通常用 p(t) 表示。比如电机转了多少圈,滑块走了多少毫米。

我个人习惯把位置想象成「脚印」。你每走一步,地上就留下一个脚印。这些脚印连起来,就是运动轨迹。

关键点:位置是时间的函数。我们控制运动,本质上就是控制位置随时间的变化。

2. 速度(Velocity)—— 你走多快?

速度是位置对时间的一阶导数。数学上写:

v(t) = dp(t) / dt

嗯,这里要注意:速度是有方向的。在直线运动里,正负号代表方向。我在项目中遇到过有人把速度和速率搞混,结果调试时发现电机往反方向跑,折腾了半天。

速度决定了「多久能到」。你想想看,同样的距离,速度越快,时间越短。但速度不能突变,否则机器会「咣当」一下——这就是为什么我们需要加速度。

3. 加速度(Acceleration)—— 你加速快不快?

加速度是速度对时间的一阶导数,也是位置的二阶导数:

a(t) = dv(t) / dt = d²p(t) / dt²

加速度决定了力的大小。根据牛顿第二定律 F = ma,加速度越大,需要的力越大。电机选型时,加速度是核心参数之一。

我的经验:加速度设置过大,电机容易过载;设置过小,效率太低。一般我会先按负载的 0.3g 左右试跑,再根据实际温升调整。

但加速度也不能突变。为什么?因为加速度突变意味着力突变,力突变意味着机器会抖动。这就是为什么我们需要第四个量——加加速度。

4. 加加速度(Jerk)—— 你加速的过程平不平滑?

加加速度是加速度对时间的一阶导数,也是速度的二阶导数、位置的三阶导数:

j(t) = da(t) / dt = d²v(t) / dt² = d³p(t) / dt³

加加速度这个名字有点拗口,英文叫 Jerk。说白了,它描述的是「加速度的变化率」。加加速度越大,运动越「生硬」;加加速度越小,运动越「柔和」。

避坑指南:我曾经在一个精密定位项目中,忽略了加加速度的影响。结果设备在高速启停时,末端振动幅度达到 0.5mm,完全无法满足精度要求。后来把加加速度限制在 500 mm/s³ 以内,振动才降下来。

5. 四个量的关系——一张图说清楚

下面这张 SVG 图,展示了位置、速度、加速度、加加速度之间的微分/积分关系。我建议你把它存下来,以后写代码时对照着看。

位置 p(t) 位移 / 角度 速度 v(t) 位置变化率 加速度 a(t) 速度变化率 加加速度 j(t) 加速度变化率 微分 微分 微分 积分 积分 积分 核心关系 v = dp/dt a = dv/dt = d²p/dt² j = da/dt = d³p/dt³ 反向: v = ∫a dt p = ∫v dt 红色箭头:微分 绿色箭头:积分 微分是求导,积分是累加

6. 为什么 S 形曲线需要 Jerk?

传统的梯形速度曲线,只有匀加速、匀速、匀减速三段。加速度在切换点处突变,Jerk 无穷大。结果就是机器「咯噔」一下。

S 形曲线在加速段和减速段加入了 Jerk 的限制。加速度从 0 开始缓慢增加,再缓慢减小到 0。整个过程平滑过渡,没有冲击。

核心思想:梯形曲线控制加速度,S 形曲线控制加加速度。S 形曲线比梯形曲线多了一个「柔化」的维度。

7. 实际项目中的经验值

我整理了一份常用参数范围,供你参考:

参数 符号 单位 典型范围 说明
最大速度 v_max mm/s 100 ~ 1000 取决于电机和负载
最大加速度 a_max mm/s² 500 ~ 5000 0.05g ~ 0.5g
最大加加速度 j_max mm/s³ 500 ~ 50000 越大越硬,越小越软

我的习惯:先按 j_max = a_max × 10 来设置。如果振动明显,再逐步降低 j_max。比如 a_max = 2000 mm/s²,j_max 先设 20000 mm/s³,不行再降到 10000。

8. 代码示例:计算位置、速度、加速度、加加速度

下面这段 Python 代码,演示了如何从位置数据推导出其他三个量。实际项目中,我们经常用编码器采集位置,然后计算速度和加速度。

import numpy as np
import matplotlib.pyplot as plt

# 模拟位置数据(单位:mm)
t = np.linspace(0, 2, 200)  # 时间 0~2 秒
p = 10 * t**3 - 15 * t**4 + 6 * t**5  # S 形位置曲线

# 数值微分计算速度、加速度、加加速度
dt = t[1] - t[0]
v = np.gradient(p, dt)
a = np.gradient(v, dt)
j = np.gradient(a, dt)

# 打印前 5 个点的数据
print("时间(s)  位置(mm)  速度(mm/s)  加速度(mm/s²)  加加速度(mm/s³)")
for i in range(5):
    print(f"{t[i]:.3f}   {p[i]:.3f}   {v[i]:.3f}   {a[i]:.3f}   {j[i]:.3f}")

运行这段代码,你会看到位置平滑变化,速度和加速度从 0 开始缓慢增加,再缓慢归零。加加速度在整个过程中是连续的——这就是 S 形曲线的精髓。

注意:数值微分对噪声很敏感。如果编码器数据有抖动,直接求导会得到毛刺很大的速度和加速度。我一般会先做低通滤波,再计算导数。

9. 小结

位置、速度、加速度、加加速度,这四个量构成了运动控制的完整描述。从位置到加加速度,每求一次导,就多一层「变化率」的信息。反过来,从加加速度积分一次得到加速度,再积分得到速度,再积分得到位置。

S 形曲线之所以比梯形曲线优秀,就是因为它控制了加加速度这个「变化率的变化率」。说白了,就是让机器运动得更温柔、更精准。

嗯,这一节就到这里。记住这四个量的关系,后面讲 S 形曲线规划时,你会觉得豁然开朗。


专注资料整理