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(相当于梯形曲线),然后抱怨机器人抖。其实只要稍微花点心思在加加速度上,很多问题都能迎刃而解。

下一节,我们会深入讨论轨迹规划中的多项式插补方法,包括三次多项式、五次多项式以及它们的优缺点。到时候我会结合一个实际的项目案例——一条手机壳打磨产线的轨迹优化,给大家讲讲怎么在效率和柔顺性之间找到平衡点。

咱们下节课见。