4、多项式曲线(二):五次多项式曲线的推导、特性与适用场景

上一章我们聊完了三次多项式,说白了就是「位置+速度」四个边界条件。但实际项目中你会发现,三次曲线在启停瞬间,加速度是跳变的。嗯,这个问题在高速凸轮系统里很要命。

我印象很深,有一次调试一台包装机,速度一上去,机器就开始抖。查了半天,不是机械间隙,也不是伺服增益,问题就出在加速度突变上。从那以后,我对五次多项式就格外重视。

4.1 为什么需要五次多项式?

三次多项式只能保证位置和速度连续。加速度呢?它不连续。加速度突变意味着什么?意味着力突变,意味着冲击。

五次多项式多了两个自由度。它能同时约束位置、速度、加速度。六个边界条件,六个系数,刚刚好。

核心差异一句话:

  • 三次多项式:位置、速度连续,加速度跳变
  • 五次多项式:位置、速度、加速度全部连续

你想想看,如果你的凸轮从动件在运动过程中,加速度突然变一下,那冲击力就直接传到机构上了。轻则振动,重则磨损。五次多项式就是来解决这个问题的。

4.2 五次多项式的数学推导

五次多项式的一般形式长这样:

s(t) = C0 + C1·t + C2·t² + C3·t³ + C4·t⁴ + C5·t⁵

速度、加速度、加加速度(Jerk)依次求导:

v(t) = C1 + 2·C2·t + 3·C3·t² + 4·C4·t³ + 5·C5·t⁴
a(t) = 2·C2 + 6·C3·t + 12·C4·t² + 20·C5·t³
j(t) = 6·C3 + 24·C4·t + 60·C5·t²

六个未知数,需要六个方程。我们通常用起点和终点的位置、速度、加速度来约束。

假设运动时间归一化到 [0, 1],起点 t=0,终点 t=1:

边界条件 起点 (t=0) 终点 (t=1)
位置 s s₀ s₁
速度 v v₀ v₁
加速度 a a₀ a₁

代入后得到方程组:

s₀ = C0
v₀ = C1
a₀ = 2·C2

s₁ = C0 + C1 + C2 + C3 + C4 + C5
v₁ = C1 + 2·C2 + 3·C3 + 4·C4 + 5·C5
a₁ = 2·C2 + 6·C3 + 12·C4 + 20·C5

解这个方程组,得到系数:

C0 = s₀
C1 = v₀
C2 = a₀ / 2
C3 = 20·(s₁ - s₀) - (8·v₁ + 12·v₀) - (3·a₀ - a₁) / 2
C4 = 30·(s₀ - s₁) + (14·v₁ + 16·v₀) + (3·a₀ - 2·a₁) / 2
C5 = 12·(s₁ - s₀) - 6·(v₁ + v₀) - (a₀ - a₁) / 2

看着有点复杂,但实际用的时候,大部分情况起点和终点的速度、加速度都是零。代入 v₀=v₁=a₀=a₁=0,公式会简化很多:

C0 = s₀
C1 = 0
C2 = 0
C3 = 10·(s₁ - s₀)
C4 = -15·(s₁ - s₀)
C5 = 6·(s₁ - s₀)

这个简化形式在实际项目中非常常用。我一般把它存成模板函数,直接调。

4.3 五次多项式的特性分析

五次多项式最大的优点就是加速度连续。但凡事都有代价。

个人经验:五次多项式的加速度曲线是抛物线形状,最大值出现在中间位置。设计时要注意校核峰值加速度是否超过机构允许范围。

我们来看一下各阶曲线的形状特点:

曲线阶次 形状 连续性 特点
位置 s(t) S 形 C2 连续 平滑无拐点突变
速度 v(t) 钟形 C1 连续 起止为零,中间峰值
加速度 a(t) 抛物线 C0 连续 起止为零,中间有极值
加加速度 j(t) 直线 不连续 存在跳变

注意看,加加速度(Jerk)虽然存在跳变,但加速度是连续的。对于大多数工业应用,加速度连续已经足够。只有在对振动极其敏感的场合,才需要考虑更高阶的曲线。

4.4 适用场景与避坑指南

五次多项式最适合哪些场景?我总结了几条:

  • 高速启停运动:比如贴片机的取放头,需要快速启停且不能有冲击
  • 精密定位:比如数控机床的进给轴,加速度突变会影响加工精度
  • 重载搬运:负载大时,加速度突变可能造成工件滑落或机构损坏

我曾经踩过的坑:有一次在高速分度机构上用了五次多项式,结果发现加速度峰值太高,电机扭矩不够。后来加了速度限制,把运动时间拉长才解决。所以用五次多项式之前,一定要先算峰值加速度。

另外,五次多项式不适合以下情况:

  • 对计算资源敏感的系统:虽然计算量不大,但在老式 PLC 上频繁调用还是有点吃力
  • 需要严格限制加加速度的场合:如果 Jerk 也必须连续,那就得上七次多项式了
  • 简单点位运动:如果只是低速、轻载的 A 到 B 移动,三次多项式就够用

4.5 知识体系总览

下面这张图把五次多项式的核心逻辑串起来了:

五次多项式曲线知识体系 五次多项式曲线知识体系 五次多项式 数学推导 特性分析 适用场景 一般形式 边界条件 系数求解 加速度连续 峰值校核 Jerk跳变 高速启停 精密定位 重载搬运 核心优势:加速度连续,消除冲击 代价:峰值加速度较高,需提前校核

4.6 代码实现示例

最后给一段实际可用的代码。这是我在 C 语言项目里常用的五次多项式计算函数:

// 五次多项式位置计算(归一化时间 t ∈ [0,1])
// s0: 起始位置, s1: 终止位置
// v0: 起始速度, v1: 终止速度
// a0: 起始加速度, a1: 终止加速度
double quintic_s(double t, double s0, double s1,
                 double v0, double v1,
                 double a0, double a1) {
    double dt = s1 - s0;
    double t2 = t * t;
    double t3 = t2 * t;
    double t4 = t3 * t;
    double t5 = t4 * t;
    
    double C0 = s0;
    double C1 = v0;
    double C2 = a0 / 2.0;
    double C3 = 20.0 * dt - (8.0*v1 + 12.0*v0) - (3.0*a0 - a1) / 2.0;
    double C4 = 30.0 * (-dt) + (14.0*v1 + 16.0*v0) + (3.0*a0 - 2.0*a1) / 2.0;
    double C5 = 12.0 * dt - 6.0*(v1 + v0) - (a0 - a1) / 2.0;
    
    return C0 + C1*t + C2*t2 + C3*t3 + C4*t4 + C5*t5;
}

实际项目中,我通常把起止速度加速度都设为零,然后调用简化版本。这样代码更干净,计算也更快。

小技巧:如果运动时间不是归一化的,记得先做时间缩放。把实际时间 t_actual 除以总时间 T,得到归一化时间 t = t_actual / T,然后再代入公式。位置结果也要乘以总位移。

五次多项式是工程中最常用的平滑曲线之一。它比三次多项式多了一层加速度连续性,又比七次多项式简单实用。掌握好它,你的凸轮曲线设计就能上一个台阶。