3、轨迹抖动分析:加加速度(Jerk)对轨迹平滑度的影响,抖动的频域分析
做机器人控制这些年,我踩过最大的坑之一,就是「轨迹看着挺顺,一跑起来就抖」。
你想想看,位置曲线光滑,速度曲线也连续,为什么实际电机就是嘎嘎响?
答案往往藏在加速度的导数里——也就是加加速度,Jerk。
3.1 加加速度(Jerk)到底是什么
先给个定义。加加速度是加速度对时间的导数:
Jerk = da/dt = d²v/dt² = d³p/dt³
单位是 m/s³。说白了,它描述的是「加速度变化的快慢」。
我刚开始做六轴机器人时,总觉得只要加速度限幅做好就万事大吉。直到有一次,一台 50kg 负载的机器人在高速搬运时,末端抖得跟筛子似的。查了半天,发现加速度虽然没超限,但 Jerk 峰值高达 8000 m/s³——电机电流指令在 2ms 内从 10A 跳变到 -8A,驱动器直接过流报警。
核心结论:加速度决定「力的大小」,加加速度决定「力的变化率」。后者才是抖动的直接诱因。
3.2 Jerk 对轨迹平滑度的量化影响
我们来看一个简单的梯形速度规划。假设从 0 加速到 1 m/s,加速度 1 m/s²,加速时间 1s。
如果 Jerk 无限大(理想梯形),加速度在起点和终点瞬间跳变:
- 起点:加速度从 0 跳到 1 m/s²,Jerk = ∞
- 终点:加速度从 1 跳到 0 m/s²,Jerk = -∞
实际物理系统里,这相当于给机械结构一个「冲击力」。关节齿轮、同步带、减速器都会因此产生弹性形变,然后回弹——这就是抖动的根源。
如果给 Jerk 加一个限幅,比如 10 m/s³,加速度会变成斜坡上升/下降:
| 参数 | Jerk 无限大(梯形) | Jerk 限幅(S形) |
|---|---|---|
| 加速度变化 | 阶跃跳变 | 斜坡渐变 |
| 力冲击 | 大 | 小 |
| 轨迹平滑度 | 差 | 好 |
| 运动时间 | 短 | 略长(约 5%~15%) |
| 典型抖动频率 | 宽频带激励 | 低频为主 |
嗯,这里要注意:S 形规划不是万能的。Jerk 限幅太小,轨迹会变得「肉」,响应慢;Jerk 限幅太大,又起不到平滑效果。我个人习惯把 Jerk 限幅设为加速度限幅的 5~10 倍,再根据实际抖动情况微调。
3.3 抖动的频域分析——为什么时域看不出来
有一次我在调试一个 SCARA 机器人,时域轨迹看着完美——位置误差 0.1mm,速度曲线光滑。但实际运行时机身一直在微颤。我盯着波形图看了半小时,愣是没找到问题。
后来把加速度信号做了 FFT 变换,才真相大白:
# 伪代码示意:对加速度信号做 FFT
accel_signal = load_trajectory_data('scara_run1.csv')
fs = 1000 # 采样率 1kHz
N = len(accel_signal)
freq = np.fft.fftfreq(N, 1/fs)
fft_mag = np.abs(np.fft.fft(accel_signal))
# 找到峰值频率
peak_idx = np.argmax(fft_mag[1:N//2])
print(f"主抖动频率: {freq[peak_idx]:.2f} Hz")
结果发现,在 47Hz 处有一个明显的能量峰值。而 SCARA 的第二关节固有频率正好是 45~50Hz——轨迹的 Jerk 激励起了机械共振。
经验之谈:时域看抖动,就像用肉眼找针。频域分析才是放大镜。我建议每个轨迹调试环节都做一次 FFT,哪怕你觉得轨迹已经很好了。
3.4 Jerk 激励与机械共振的关系
为什么 Jerk 会激励起共振?
你想想看,机械结构本质上是一个低通滤波器。位置指令经过伺服系统,再经过机械传动,高频分量会被衰减。但 Jerk 的阶跃变化会产生宽频带的激励信号——就像敲钟一样,一锤下去,所有频率都被敲响了。
具体来说:
- 加速度阶跃:能量集中在低频,但高频拖尾长
- Jerk 阶跃:能量分布更广,高频分量更强
- Jerk 连续变化:能量集中在规划带宽内,高频被抑制
所以,控制 Jerk 的本质,就是控制激励信号的带宽。把激励带宽压低到机械结构的第一阶共振频率以下,抖动自然消失。
注意:不要以为把 Jerk 设成 0 就万事大吉。Jerk=0 意味着加速度恒定,但加速度的起点和终点仍然有 Jerk 冲击。真正的平滑,是让 Jerk 连续且有限。
3.5 频域指标:如何量化抖动
光说「抖」不够,得有个量化标准。我常用的几个频域指标:
| 指标 | 定义 | 工程意义 |
|---|---|---|
| 能量集中频率 | FFT 幅值谱中能量最高的频率 | 判断是否接近机械共振点 |
| 带宽 B₉₀ | 包含 90% 能量的频率范围 | 激励信号的频带宽度 |
| 高频衰减率 | 20Hz 以上频段的能量占比 | 高频抖动的严重程度 |
| Jerk 峰值 | 轨迹中 Jerk 的最大绝对值 | 冲击力的直接度量 |
我在项目里一般定两个阈值:
- Jerk 峰值 < 500 m/s³(轻载)或 < 200 m/s³(重载)
- 高频能量占比 < 5%(相对总能量)
超过其中一个,就得回头调速度规划参数了。
3.6 知识体系总览
下面这张图把 Jerk、抖动和频域分析的关系串起来了:
3.7 实战建议:从 Jerk 到 FFT 的调试流程
最后,分享一个我常用的调试流程:
- 先看时域:画出加速度曲线,检查有没有阶跃跳变。有的话,先加 Jerk 限幅。
- 再看频域:采集一段稳定运行的加速度信号,做 FFT。重点关注 10~100Hz 频段。
- 对比共振点:把 FFT 峰值频率和机械结构的模态分析结果对比。如果重合,说明 Jerk 激励起了共振。
- 调整 Jerk 限幅:降低 Jerk 限幅值,直到 FFT 中对应频率的峰值下降 80% 以上。
- 验证总时间:确保运动周期增加不超过 10%,否则需要权衡。
我曾经在一个焊接机器人项目上,用这套流程把抖动从 ±0.5mm 降到了 ±0.05mm。前后只改了三个参数:Jerk 限幅从 5000 降到 800,加速度斜坡时间从 50ms 提到 120ms,末端负载的振动能量直接降了一个数量级。
说白了,抖动优化没有银弹。但只要你掌握了 Jerk 和频域分析这两把刀,大部分问题都能切得动。