4. 多项式速度规划:三次、五次、七次多项式的推导与对比

速度规划里,多项式曲线是最基础也最常用的工具。说白了,就是用一条多项式函数来描述位置随时间的变化。你想想看,机器人从A点走到B点,中间怎么走?多项式给了我们一个很优雅的数学框架。

我个人习惯把多项式速度规划分成三个档次:三次、五次、七次。档次越高,能约束的边界条件越多,轨迹也越平滑。但代价呢?计算量上去了,而且高阶多项式容易在中间段出现不必要的抖动。今天我们就来把这三种多项式掰开揉碎了讲清楚。

核心观点:多项式阶数 = 可独立约束的边界条件数 - 1。三次多项式能约束4个条件,五次能约束6个,七次能约束8个。选哪个,取决于你的任务需要多少个边界条件。

4.1 三次多项式:最简方案

三次多项式长这样:

q(t) = a₀ + a₁·t + a₂·t² + a₃·t³

它有4个未知系数。所以我们能约束4个边界条件。通常我们约束起点和终点的位置和速度:

  • q(0) = q₀, q(T) = q_T
  • q̇(0) = v₀, q̇(T) = v_T

把边界条件代进去,解一个4元线性方程组,就能得到a₀~a₃。我在项目中遇到过用三次多项式做传送带上的抓取动作,效果还不错。但要注意——三次多项式没法约束加速度。这意味着起点和终点的加速度是跳变的,电机那边会感受到一个冲击。

避坑指南:我曾经在一个码垛项目里直接用三次多项式做关节空间规划,结果机器人末端在拐点处剧烈抖动。后来一查,是加速度不连续导致的。如果你的应用对平滑性要求高,三次多项式可能不够用。

4.2 五次多项式:工业标配

五次多项式增加了两个自由度:

q(t) = a₀ + a₁·t + a₂·t² + a₃·t³ + a₄·t⁴ + a₅·t⁵

6个系数,对应6个边界条件。除了位置和速度,我们还能约束起点和终点的加速度:

  • q(0) = q₀, q(T) = q_T
  • q̇(0) = v₀, q̇(T) = v_T
  • q̈(0) = a₀, q̈(T) = a_T

解这个方程组,我建议用矩阵形式写,方便编程实现:

| 1   0    0    0     0     0   |   | a₀ |   | q₀   |
| 1   T   T²   T³   T⁴   T⁵  |   | a₁ |   | q_T  |
| 0   1    0    0     0     0   | × | a₂ | = | v₀   |
| 0   1   2T   3T²  4T³  5T⁴ |   | a₃ |   | v_T  |
| 0   0    2    0     0     0   |   | a₄ |   | a₀   |
| 0   0    2   6T   12T² 20T³|   | a₅ |   | a_T  |

嗯,这里要注意:矩阵求逆在嵌入式平台上可能有点慢。我一般会预先把解析解算好,写成公式直接代入。五次多项式的解析解其实很规整,网上也能查到现成的系数公式。

个人经验:五次多项式是工业机器人最常用的速度规划方式。它保证了加速度连续,电机不会受到冲击。我做过一个焊接机器人项目,用五次多项式做轨迹平滑,焊道质量明显比三次多项式好一个档次。

4.3 七次多项式:追求极致平滑

七次多项式有8个系数:

q(t) = a₀ + a₁·t + a₂·t² + a₃·t³ + a₄·t⁴ + a₅·t⁵ + a₆·t⁶ + a₇·t⁷

除了位置、速度、加速度,我们还能约束加加速度(Jerk):

  • q(0) = q₀, q(T) = q_T
  • q̇(0) = v₀, q̇(T) = v_T
  • q̈(0) = a₀, q̈(T) = a_T
  • q̇̈(0) = j₀, q̇̈(T) = j_T

七次多项式能保证Jerk连续。Jerk是什么?就是加速度的变化率。Jerk不连续,意味着加速度会突变,体现在物理上就是力会突变。对于精密装配、医疗机器人这类场景,Jerk连续是硬要求。

关键理解:三次多项式保证位置和速度连续;五次多项式额外保证加速度连续;七次多项式再额外保证Jerk连续。每提高两次阶数,就能多保证一阶导数的连续性。

4.4 三种多项式对比

特性 三次多项式 五次多项式 七次多项式
系数个数 4 6 8
可约束边界条件 位置、速度 位置、速度、加速度 位置、速度、加速度、Jerk
加速度连续性 不连续 连续 连续
Jerk连续性 不连续 不连续 连续
计算复杂度 低 中 高
适用场景 简单点对点、低精度 工业机器人、通用轨迹 精密装配、医疗、高速高精度

4.5 最小化Jerk的优化目标

为什么要最小化Jerk?你想想看,Jerk大意味着加速度变化剧烈,力变化剧烈。这会导致:

  • 机器人结构产生振动
  • 电机电流波动大,发热严重
  • 末端执行器定位精度下降
  • 机械寿命缩短

最小化Jerk的优化目标函数通常写成:

min J = ∫₀ᵀ (q̇̈(t))² dt

也就是让整个运动过程中Jerk的平方积分最小。有意思的是,在只约束位置和速度边界条件的情况下,最小化Jerk的最优解恰好就是五次多项式。这可不是巧合——五次多项式在数学上就是Jerk最小的轨迹。

深入一点:如果你约束了位置、速度、加速度,再最小化Jerk的导数(也就是Snap),得到的就是七次多项式。这个规律可以一直推下去。我当年做博士论文时推导过这个结论,挺有意思的。

4.6 知识体系总览

下面这张图把三种多项式的关系和选择逻辑梳理清楚了:

多项式速度规划知识体系 三次多项式 4个系数 约束:位置+速度 五次多项式 6个系数 约束:位置+速度+加速度 七次多项式 8个系数 约束:位置+速度+加速度+Jerk 连续性保证 三次:位置连续 ✓ 速度连续 ✓ 加速度不连续 ✗ Jerk不连续 ✗ 五次:位置连续 ✓ 速度连续 ✓ 加速度连续 ✓ Jerk不连续 ✗ 七次:位置连续 ✓ 速度连续 ✓ 加速度连续 ✓ Jerk连续 ✓ 如何选择? 简单点对点、对平滑性无要求 → 三次多项式(计算快) 通用工业应用、需要加速度连续 → 五次多项式(性价比最高) 精密装配、医疗、高速高精度 → 七次多项式(Jerk连续) 如果还嫌不够 → 考虑更高阶或样条曲线(后续章节会讲)

4.7 实际应用建议

说了这么多理论,最后给几条实在的建议:

  1. 能用五次就别用三次。 五次多项式计算量只比三次多一点点,但平滑性提升明显。除非你的控制器算力实在捉急,否则我建议默认选五次。
  2. 七次多项式要慎用。 不是所有场景都需要Jerk连续。我曾经在一个高速分拣项目里用了七次多项式,结果轨迹中间段出现了不必要的波动——高阶多项式容易在约束点之间"乱晃"。后来改回五次,效果反而更好。
  3. 边界条件要合理。 如果你给的速度或加速度边界条件本身就不合理(比如要求1秒内从0加速到10m/s),再高阶的多项式也救不了你。先检查物理可行性。
  4. 考虑分段多项式。 如果整个轨迹很长,不要用一段高阶多项式去拟合。分段用低阶多项式拼接,效果往往更好。这个我们后面章节会详细讲。

最后提醒:多项式速度规划不是万能的。当轨迹需要经过多个路径点时,单纯用一段多项式就不够了。这时候需要用到样条曲线或者梯形速度规划。别把多项式当锤子,看什么都像钉子。