2. 运动学基础:位置、速度、加速度、加加速度(Jerk)的数学关系与物理意义
各位同学,咱们今天聊点最基础,但也最容易被忽视的东西——运动学中的几个核心物理量。说实话,我见过不少刚入行的工程师,一上来就盯着PID参数调,结果轨迹跑起来抖得跟筛糠似的。问题出在哪?往往就是对这几个基本量的物理意义没吃透。
你想想看,机器人运动控制,本质上就是在跟时间打交道。位置怎么变、速度怎么变、加速度怎么变,甚至加速度的变化率怎么控制,这些决定了你的设备能不能跑得稳、停得准、寿命长。今天我就把这几层关系掰开了揉碎了讲清楚。
2.1 从位置到加加速度:一条链上的四个环
我们先看一个最简单的场景:一个电机带着负载从A点走到B点。在这个过程中,我们关心的物理量有四个,它们之间是连续的微分/积分关系。
| 物理量 | 符号 | 单位 | 数学定义 | 物理意义 |
|---|---|---|---|---|
| 位置 | \( p(t) \) | m 或 rad | 基础量 | 物体在空间中的坐标 |
| 速度 | \( v(t) \) | m/s 或 rad/s | \( v = \frac{dp}{dt} \) | 位置变化的快慢 |
| 加速度 | \( a(t) \) | m/s² 或 rad/s² | \( a = \frac{dv}{dt} = \frac{d^2p}{dt^2} \) | 速度变化的快慢 |
| 加加速度 | \( j(t) \) | m/s³ 或 rad/s³ | \( j = \frac{da}{dt} = \frac{d^3p}{dt^3} \) | 加速度变化的快慢 |
说白了,这就是一条链:位置对时间求一次导是速度,再求一次是加速度,再求一次就是加加速度(Jerk)。反过来,加加速度积分得到加速度,加速度积分得到速度,速度积分得到位置。
核心要点:在运动控制中,我们通常不是直接控制位置,而是通过控制加速度(力/力矩)来间接控制速度和位置。而加加速度,决定了这个控制过程的“柔顺度”。
2.2 为什么加加速度(Jerk)如此重要?
很多初学者会问:我控制好速度和加速度不就行了吗?为什么要关心Jerk?
嗯,这里我要讲一个我亲身踩过的坑。几年前我做一台高速贴片机,加速度设得挺高,速度曲线看着也漂亮。结果一跑起来,机器末端抖得厉害,贴片精度死活达不到。查了三天,最后发现是加加速度太大了——加速度从0瞬间跳到最大值,相当于给机械结构来了一记“冲击锤”。
加加速度的物理意义,其实就是冲击力的变化率。根据牛顿第二定律 \( F = ma \),如果加速度突变,意味着力也突变。而力的突变,会激发机械结构的固有频率,产生振动。
避坑指南:我曾经在调试一个六轴机器人时,发现末端轨迹在拐角处总有过冲。后来把加加速度限制从 5000 rad/s³ 降到 2000 rad/s³,过冲直接消失了。记住:Jerk 越大,冲击越大,振动越明显。尤其是对于有柔性关节或长臂展的机器人,Jerk 控制是必修课。
2.3 梯形速度曲线 vs S形速度曲线
理解了上面的关系,我们来看两种最经典的轨迹规划方式。我直接上代码,大家感受一下区别。
2.3.1 梯形速度曲线(Trapezoidal Profile)
梯形曲线只有匀加速、匀速、匀减速三段。它的加速度是方波,加加速度是无穷大(在切换点)。
// 梯形速度曲线示例(伪代码)
float t_acc = 0.5; // 加速时间
float t_const = 1.0; // 匀速时间
float t_dec = 0.5; // 减速时间
float v_max = 100; // 最大速度
// 位置计算
if (t < t_acc) {
// 匀加速段:位置是时间的二次函数
p = 0.5 * a_max * t * t;
v = a_max * t;
a = a_max;
j = 0; // 但切换点处j为无穷大
} else if (t < t_acc + t_const) {
// 匀速段
p = p_acc_end + v_max * (t - t_acc);
v = v_max;
a = 0;
j = 0;
} else {
// 匀减速段
p = p_const_end + v_max * (t - t_acc - t_const) - 0.5 * a_max * (t - t_acc - t_const)^2;
v = v_max - a_max * (t - t_acc - t_const);
a = -a_max;
j = 0;
}
你看,梯形曲线简单、计算量小,但问题也很明显:加速度突变。在加速段结束的瞬间,加速度从 \( a_{max} \) 直接跳到0,加加速度理论上无穷大。这会导致什么?机械振动、冲击、甚至电机过流。
2.3.2 S形速度曲线(S-Curve Profile)
S形曲线在梯形的基础上,增加了加加速度的限制。它把加速度的变化过程也“软化”了。
// S形速度曲线示例(伪代码)
// 加加速度限制 j_max,加速度限制 a_max,速度限制 v_max
float t_jerk = a_max / j_max; // 加加速度段时间
// 以加速段为例,分为三个阶段:
// 阶段1:加加速度为正,加速度从0增加到a_max
if (t < t_jerk) {
j = j_max;
a = j_max * t;
v = 0.5 * j_max * t * t;
p = (1/6) * j_max * t * t * t;
}
// 阶段2:加加速度为0,加速度保持a_max
else if (t < t_acc - t_jerk) {
j = 0;
a = a_max;
v = v_jerk_end + a_max * (t - t_jerk);
p = p_jerk_end + v_jerk_end * (t - t_jerk) + 0.5 * a_max * (t - t_jerk)^2;
}
// 阶段3:加加速度为负,加速度从a_max减小到0
else {
j = -j_max;
a = a_max - j_max * (t - (t_acc - t_jerk));
v = v_acc_mid + a_max * (t - (t_acc - t_jerk)) - 0.5 * j_max * (t - (t_acc - t_jerk))^2;
p = ... // 三次多项式
}
我的建议:对于大多数工业应用,尤其是码垛、搬运、焊接这类对精度和寿命有要求的场景,我强烈建议使用S形曲线。虽然计算量比梯形大一些,但换来的是更小的振动、更长的机械寿命。我自己做项目时,除非是极高速的拾取应用(比如每分钟200次以上),否则一律上S形。
2.4 加加速度的工程约束
在实际系统中,加加速度不是随便设的。它受到几个因素的制约:
- 机械结构刚度:刚度越低,允许的Jerk越小。我调过一台旧机床,结构松垮,Jerk超过800就抖,最后限制在300才稳定。
- 电机转矩响应:伺服电机的电流环响应速度有限,Jerk太大意味着转矩指令变化太快,电机可能跟不上。
- 减速器间隙:RV减速器或谐波减速器都有回程间隙。Jerk过大时,齿轮撞击会产生异响和磨损。
- 负载变化:抓取不同重量的工件时,同样的Jerk产生的冲击力不同。我习惯在程序中加一个负载自适应系数,根据当前负载动态调整Jerk限值。
| 应用场景 | 典型Jerk范围 | 说明 |
|---|---|---|
| 高精度磨削 | 50 - 200 rad/s³ | 表面质量要求极高,必须极柔顺 |
| 通用六轴机器人 | 500 - 2000 rad/s³ | 兼顾效率和稳定性 |
| 高速并联机器人 | 3000 - 8000 rad/s³ | 轻负载、高刚度,可以接受较大Jerk |
| SCARA机器人 | 1000 - 4000 rad/s³ | 水平关节刚度好,垂直方向需注意 |
2.5 小结:从数学到工程的一步之遥
好了,今天的内容就到这里。总结一下:
- 位置、速度、加速度、加加速度是一条微分链,理解它们的关系是轨迹规划的基础。
- 加加速度(Jerk)是衡量运动“柔顺度”的关键指标,直接影响机械振动和寿命。
- 梯形曲线简单但有冲击,S形曲线柔顺但计算量大,根据实际需求选择。
- 工程中Jerk的设定要综合考虑刚度、电机响应、减速器间隙和负载变化。
说实话,这些内容看起来简单,但真正能在项目中用好的人并不多。我见过太多工程师把Jerk设成0(相当于梯形曲线),然后抱怨机器人抖。其实只要稍微花点心思在加加速度上,很多问题都能迎刃而解。
下一节,我们会深入讨论轨迹规划中的多项式插补方法,包括三次多项式、五次多项式以及它们的优缺点。到时候我会结合一个实际的项目案例——一条手机壳打磨产线的轨迹优化,给大家讲讲怎么在效率和柔顺性之间找到平衡点。
咱们下节课见。