2. 运动学基础:位置、速度、加速度、加加速度(Jerk)的定义与关系

各位同学,大家好。我是你们这门课的主讲。今天咱们来聊聊运动学基础。你可能会觉得,这玩意儿不是高中物理就学过吗?别急,在机器人轨迹规划里,这些概念会被玩出花来。尤其是那个加加速度,也就是Jerk,很多新手就是栽在它上面。

我个人习惯,在讲任何算法之前,先把物理模型掰扯清楚。因为后面所有的数学公式、优化目标,追根溯源,都离不开这几个基本量。说白了,你连“位置”怎么变成“速度”都搞不清楚,那后面谈“平滑”就是空中楼阁。

2.1 四个核心物理量

我们先从最直观的“位置”说起。在机器人学里,位置通常指关节角度或者末端执行器在笛卡尔空间里的坐标。我习惯用 s(t) 来表示一维的位置,如果是多维,那就是向量 p(t)。

  • 位置 (Position):s(t) 或 p(t)。描述物体在空间中的“点”。单位:米 (m) 或弧度 (rad)。
  • 速度 (Velocity):v(t) = ds/dt。位置对时间的一阶导数。描述位置变化的快慢。单位:m/s 或 rad/s。
  • 加速度 (Acceleration):a(t) = dv/dt = d²s/dt²。速度对时间的一阶导数,位置的二阶导数。描述速度变化的快慢。单位:m/s² 或 rad/s²。
  • 加加速度 (Jerk):j(t) = da/dt = d³s/dt³。加速度对时间的一阶导数,位置的三阶导数。描述加速度变化的快慢。单位:m/s³ 或 rad/s³。

核心要点: Jerk 是衡量轨迹“柔顺性”的关键指标。加速度突变会产生冲击力,而 Jerk 直接量化了这个突变的剧烈程度。在高速高精度的机器人应用中,控制 Jerk 比控制加速度更重要。

我记得刚入行那会儿,做码垛机器人。为了追求节拍,我把加速度拉得很高,结果每次加减速的时候,机器人末端抖得跟筛糠似的。后来一查,是 Jerk 太大了,电机力矩跟不上。从那以后,我设计轨迹必看 Jerk 曲线。

2.2 运动学方程:从微分到积分

这四个量之间,本质上是微分和积分的关系。我们假设运动是连续的,并且我们已知初始状态。那么,给定加速度曲线,我们可以通过积分得到速度和位置。

为什么会这样?你想想看,速度是位置的导数,那反过来,位置就是速度的积分。同理,加速度是速度的导数,速度就是加速度的积分。这是一个完整的链条。

假设我们已知初始位置 s₀、初始速度 v₀,以及加速度函数 a(t),那么:

v(t) = v₀ + ∫₀ᵗ a(τ) dτ
s(t) = s₀ + ∫₀ᵗ v(τ) dτ

如果加速度是恒定的,也就是 a(t) = a,那公式就简化成我们高中熟悉的匀加速运动:

v(t) = v₀ + a·t
s(t) = s₀ + v₀·t + 0.5·a·t²

但在轨迹规划里,我们很少用恒定加速度。因为那样 Jerk 在起点和终点是无穷大(瞬间跳变)。我们更常用的是多项式曲线,比如 S 形曲线,来保证 Jerk 连续。

我的小技巧: 在实际代码中,我很少直接对连续函数做积分。我通常用离散时间步长 dt 来做数值积分。比如:v[i+1] = v[i] + a[i] * dt。虽然会有累积误差,但只要 dt 足够小(比如 1ms),效果完全够用。

2.3 知识体系与核心逻辑

为了让你更直观地理解这四个量之间的关系,我画了一张图。这张图是我做课程时必讲的,它清晰地展示了从位置到 Jerk 的微分链,以及从 Jerk 到位置的积分链。

运动学量微分/积分关系图 位置 s(t) 单位: m / rad 速度 v(t) 单位: m/s 加速度 a(t) 单位: m/s² 加加速度 j(t) 单位: m/s³ 微分 d/dt 微分 d/dt 微分 d/dt 积分 ∫ dt 积分 ∫ dt 积分 ∫ dt 向下箭头:对时间求导(微分) 向上箭头:对时间累积(积分) 注意:Jerk 是加速度的导数,是轨迹平滑性的关键指标

这张图你看懂了吗?从上往下看,是微分过程,每一步都让物理量变得更“高阶”。从下往上看,是积分过程,每一步都让物理量变得更“宏观”。

2.4 为什么 Jerk 如此重要?

嗯,这里要注意。很多教科书只讲到加速度就停了。但在机器人领域,Jerk 才是真正的“隐形杀手”。

我曾经调试过一个协作机器人,在轨迹末端总是有肉眼可见的抖动。我检查了位置、速度、加速度曲线,都很完美。最后把 Jerk 曲线打印出来一看,好家伙,在终点前 0.1 秒,Jerk 值冲到了 5000 m/s³。这相当于在极短时间内,加速度发生了剧烈跳变。电机物理上跟不上这个指令,于是产生了震荡。

避坑指南: 我曾经因为忽略了 Jerk 约束,导致机器人末端执行器在高速运动中产生谐振,差点撞坏了夹具。从那以后,我设计的所有轨迹,都会显式地加入 Jerk 的上下限约束。记住:没有 Jerk 约束的轨迹规划,都是耍流氓。

2.5 运动学方程在离散时间下的实现

在实际的嵌入式系统里,我们没法处理连续函数。我们只能处理离散的时间点。假设我们的控制周期是 dt,那么离散运动学方程长这样:

// 假设已知当前状态 s, v, a, 以及目标 Jerk j
// 更新下一时刻的状态
void updateKinematics(double &s, double &v, double &a, double j, double dt) {
    a += j * dt;          // 加速度积分
    v += a * dt;          // 速度积分
    s += v * dt;          // 位置积分
    // 注意:这里用的是欧拉积分,精度一般。高阶应用建议用 RK4。
}

这个代码片段虽然简单,但它是所有轨迹跟踪算法的基础。你想想看,无论多复杂的 S 形曲线、多项式曲线、B 样条曲线,最终落到电机驱动器上的,都是这种离散的积分过程。

物理量 符号 定义 单位 在轨迹规划中的意义
位置 s 空间坐标 m / rad 轨迹的最终目标
速度 v 位置变化率 m/s 决定运动效率,受电机最大转速限制
加速度 a 速度变化率 m/s² 决定启停冲击,受电机最大力矩限制
加加速度 j 加速度变化率 m/s³ 决定轨迹柔顺性,受机械结构刚度限制

好了,这一章的内容就到这里。记住这四个量的定义和它们之间的微分积分关系。这是后面所有章节的基石。下一章,我们会把这些概念应用到具体的轨迹曲线中,看看如何用数学公式生成一条平滑的路径。

可可精品资料库