4. 凸轮曲线数学基础:多项式插值、样条曲线、三角函数曲线

说实话,很多做运动控制的工程师,一听到“数学基础”四个字就头大。我当年刚入行时也一样,觉得能调通伺服就行,管它什么多项式。直到有一次,我负责一台高速贴片机的凸轮曲线设计,设备一跑起来,振动大得像要散架。老工程师看了一眼我的曲线数据,只说了一句:“你这加速度不连续,机器不抖才怪。”

从那以后,我老老实实把数学基础补上了。今天这章,咱们就聊聊凸轮曲线背后最核心的三种数学工具:多项式插值、样条曲线和三角函数曲线。说白了,它们就是用来“造曲线”的三种手艺。

核心观点:凸轮曲线的本质,是用数学函数描述“从位置A到位置B,速度、加速度、加加速度怎么变”。选对数学工具,你的机器就稳;选错了,振动、冲击、过冲全来了。

凸轮曲线数学基础 — 三大工具 凸轮曲线数学基础 多项式插值 样条曲线 三角函数曲线 多项式插值 • 位置/速度/加速度连续 • 阶数越高,曲线越平滑 • 适合短行程、高精度 • 阶数过高易产生龙格现象 样条曲线 • 分段低阶多项式拼接 • 避免龙格现象 • 局部修改不影响全局 • 适合长行程、复杂轨迹 三角函数曲线 • 天然平滑,无冲击 • 速度/加速度连续 • 适合高速、低振动 • 计算量稍大

4.1 多项式插值:最直接的曲线构造法

多项式插值,说白了就是“给几个点,画一条光滑曲线穿过它们”。你给定起点和终点的位置、速度、加速度,多项式就能帮你算出一条满足所有条件的曲线。

我个人的习惯是,先搞清楚你需要几阶多项式。为什么?因为每个约束条件对应一个系数。举个例子:

  • 3次多项式(立方曲线):只能约束位置和速度(4个系数,4个条件)
  • 5次多项式:可以约束位置、速度、加速度(6个系数,6个条件)
  • 7次多项式:再加加加速度约束(8个系数,8个条件)

你想想看,如果只约束位置和速度,加速度在端点处会突变。机器一启动就是“哐”的一下,这就是冲击的来源。

实战建议:做电子凸轮时,我建议至少用5次多项式。它能保证加速度连续,这对大多数工业应用已经够用了。7次多项式虽然更平滑,但计算量大了不少,而且对系统带宽要求更高。

5次多项式的标准形式长这样:

// 5次多项式通用形式
// s(t) = a0 + a1*t + a2*t² + a3*t³ + a4*t⁴ + a5*t⁵

// 约束条件(t=0 和 t=T 时刻)
// s(0) = 0,     v(0) = 0,     a(0) = 0
// s(T) = S,     v(T) = 0,     a(T) = 0

// 解出来的系数(归一化时间 u = t/T)
// s(u) = S * (10*u³ - 15*u⁴ + 6*u⁵)

这段代码看着简单,但背后有门道。系数 10、-15、6 不是随便来的,它们是解6元一次方程组的结果。我在项目中经常用这个公式,因为它能保证起停时速度、加速度都为零,机器动作特别“柔”。

注意:多项式阶数不是越高越好。阶数超过9次后,曲线会在端点附近出现剧烈振荡,这叫“龙格现象”。我曾经见过有人用15次多项式做凸轮,结果曲线在中间段抖得像心电图,机器根本没法用。

4.2 样条曲线:分段拼接的艺术

多项式插值有个硬伤:如果你要经过很多个点,用一个高次多项式去拟合,龙格现象会让你崩溃。怎么办?分段处理。

样条曲线的思路很简单:把整个行程切成若干小段,每段用一个低阶多项式(通常是3次)去拟合,然后在拼接处保证位置、速度、加速度连续。这就是“分段低阶、整体高阶”的效果。

我记得有一次做一台包装机的凸轮,行程有3000多个点。如果用单一多项式,阶数得几千次,根本算不出来。用样条曲线,每段只用3次多项式,3000段拼起来,整条曲线平滑得像丝绸。

最常用的是三次样条(Cubic Spline):

特性 三次样条 B样条 NURBS
每段阶数 3次 3次(可调) 3次(可调)
连续性 C²(加速度连续) C²(加速度连续) C²(加速度连续)
局部控制 差(改一点影响全局) 好(局部修改) 好(局部修改)
适用场景 数据点密集、平滑要求高 需要局部调整 需要精确控制形状

我个人偏爱B样条。为什么?因为它的“局部性”太实用了。你想想看,调试凸轮曲线时,经常是某个局部段振动偏大,需要微调。用三次样条,改一个点整条曲线都得重算;用B样条,只影响附近几段,其他部分纹丝不动。

关键区别:三次样条是“插值”——曲线必须穿过所有给定点;B样条是“逼近”——曲线被控制点“吸引”但不一定穿过。做凸轮时,如果你有精确的路径要求,用三次样条;如果你只关心曲线形状的平滑性,用B样条更灵活。

4.3 三角函数曲线:天生的平滑大师

说到三角函数曲线,很多人第一反应是正弦曲线。没错,正弦曲线确实是最基础的三角函数曲线,但凸轮领域里,我们用的更多是摆线(Cycloidal)和修正正弦(Modified Sine)。

为什么三角函数曲线天生平滑?因为它的各阶导数(速度、加速度、加加速度)都是正弦或余弦的线性组合,天然连续,没有突变。这一点,多项式插值需要特意构造才能做到。

摆线曲线的公式很漂亮:

// 摆线曲线(归一化形式)
// u = t / T, 0 ≤ u ≤ 1
// s(u) = S * (u - sin(2πu) / (2π))

// 速度:v(u) = S/T * (1 - cos(2πu))
// 加速度:a(u) = S/T² * (2π * sin(2πu))
// 加加速度:j(u) = S/T³ * (4π² * cos(2πu))

你看,所有导数都是连续的。而且摆线的最大特点是:加速度在起点和终点都为零,加加速度在起点和终点达到最大。这意味着什么?起停时没有冲击,但中间段加加速度变化剧烈。

我在项目中遇到过一个问题:一台高速贴片机用摆线曲线,起停确实很柔,但到了行程中间段,机器开始轻微抖动。后来分析发现,是加加速度峰值太高,激发了机械结构的共振频率。

避坑指南:我曾经以为摆线曲线是万能的,后来发现不是。如果你的机械结构固有频率较低,摆线中间段的加加速度峰值可能会引发共振。这时候,修正正弦曲线是更好的选择——它把加加速度峰值分散到整个行程中,峰值更低,更“温和”。

修正正弦曲线是摆线和正弦曲线的混合体,它把行程分成三段:

  1. 加速段(0~1/8行程):用正弦曲线,加速度从0缓慢上升
  2. 中间段(1/8~7/8行程):用摆线曲线,保持平滑
  3. 减速段(7/8~1行程):用正弦曲线,加速度缓慢归零

这种“三段式”设计,让加加速度峰值比纯摆线降低了约30%。我后来做高速凸轮时,修正正弦曲线成了我的首选。

4.4 三种曲线的对比与选型

说了这么多,到底什么时候用哪种?我整理了一张对比表,你直接拿去用:

对比维度 5次多项式 B样条 修正正弦
加速度连续性 连续 连续 连续
加加速度连续性 不连续(阶跃) 不连续(分段线性) 连续
加加速度峰值 中等 低(可调) 低
计算复杂度 低 中 中
局部调整能力 无(全局) 强 无(全局)
适用速度 中低速 中高速 高速
典型应用 通用凸轮、起停频繁 长行程、多点路径 高速、低振动要求

选型时,我一般按这个逻辑走:

  • 速度不高、起停频繁:5次多项式,简单可靠
  • 行程长、路径复杂、需要反复调试:B样条,局部修改太方便了
  • 高速运行、对振动敏感:修正正弦,加加速度连续是最大优势

最后提醒一句:数学工具只是手段,不是目的。我见过太多人沉迷于“更平滑的曲线”,结果曲线平滑了,机器反而跑不动——因为伺服系统的带宽跟不上。曲线再好,也得硬件能执行。这一点,后面章节咱们会细聊。