4、轨迹生成基础:B样条、多项式、最小加加速度轨迹。哪种适合你的场景?我踩过的坑告诉你。

做机器人控制这些年,我试过不少轨迹生成方法。说实话,没有哪种是万能的。每种方法都有自己的脾气,选对了事半功倍,选错了……嗯,调试到怀疑人生。

今天咱们就聊聊三种最常见的轨迹生成方式:B样条、多项式、最小加加速度。我会结合自己的实战经验,告诉你它们各自适合什么场景,以及我踩过的那些坑。

4.1 多项式轨迹:简单直接,但小心“龙格现象”

多项式轨迹是最基础的方法。说白了,就是用一条多项式曲线把起点和终点连起来。最常见的是三次多项式和五次多项式。

三次多项式:只约束位置和速度。适合简单的点到点运动。

五次多项式:约束位置、速度、加速度。更平滑,适合对加速度有要求的场景。

核心公式(五次多项式):

q(t) = a0 + a1*t + a2*t^2 + a3*t^3 + a4*t^4 + a5*t^5

六个系数由起点和终点的位置、速度、加速度共6个边界条件唯一确定。

我的经验:多项式轨迹适合简单场景,比如单关节运动。但如果你要经过多个中间点,千万别用高阶多项式硬拟合。我在项目中遇到过用7次多项式拟合5个点,结果轨迹在中间剧烈震荡——这就是著名的“龙格现象”。

4.2 B样条轨迹:局部可控,复杂路径的救星

B样条轨迹是我个人最常用的方法。它的核心优势是局部可控性——修改一个控制点,只影响附近一段轨迹,不会全局变形。

B样条有几个关键参数:

  • 控制点:决定轨迹的大致形状
  • 节点向量:决定轨迹的时间分布
  • 阶数:决定轨迹的平滑程度(3阶B样条保证C2连续)

B样条递推公式(de Boor算法):

// 给定控制点P和节点向量u
// 计算B样条曲线上的点
function deBoor(k, u, P, t) {
    // k: 阶数, u: 节点向量, P: 控制点, t: 参数
    // 返回曲线上的点
}

我曾经踩过的坑:刚开始用B样条时,我忽略了节点向量的选择。默认均匀节点向量导致轨迹在起点和终点附近抖动。后来改用“准均匀节点向量”(两端重复节点),问题就解决了。记住:节点向量的分布直接影响轨迹的起止行为。

4.3 最小加加速度轨迹:追求极致平滑

最小加加速度轨迹(Minimum Jerk Trajectory)的目标是让加加速度(Jerk)的平方积分最小。说白了,就是让运动最“温柔”,没有突然的冲击。

它的数学形式是:

min ∫ (jerk(t))^2 dt
subject to: 位置、速度、加速度边界条件

解出来是一个5次多项式(对于点到点运动)。但如果是多段轨迹,就需要用样条拼接。

适用场景:

  • 高精度装配(减少振动)
  • 人机协作(避免突然动作吓到人)
  • 相机扫描(减少图像模糊)

我的建议:最小加加速度轨迹虽然平滑,但计算量稍大。如果你用的是低算力控制器(比如STM32),建议用查表法预计算轨迹点,而不是实时求解。

4.4 三种方法对比:一张表说清楚

特性 多项式轨迹 B样条轨迹 最小加加速度轨迹
连续性 C2(五次多项式) Ck-1(k阶) C2(加加速度连续)
局部可控性 无(全局影响) 有(局部修改) 无(全局优化)
计算复杂度 低 中 高
适合场景 简单点到点 复杂路径、多段轨迹 高精度、低振动
我的推荐指数 ★★★☆☆ ★★★★★ ★★★★☆

4.5 知识体系:一张图看懂轨迹生成

下面这张SVG图总结了三种轨迹生成方法的核心逻辑和适用场景。你可以把它当作选型指南。

轨迹生成方法选型指南 轨迹生成方法 多项式轨迹 B样条轨迹 最小加加速度 三次/五次多项式 简单点到点运动 局部可控、C2连续 复杂路径、多段轨迹 加加速度平方积分最小 高精度、低振动场景 选型建议:B样条最通用,多项式最简单,最小加加速度最平滑 ⚠️ 避坑提示 多项式避免高阶拟合(龙格现象) | B样条注意节点向量选择 | 最小加加速度注意计算量

4.6 我的选型建议

说了这么多,到底怎么选?我个人的经验是:

  1. 如果你刚入门,做简单项目:用五次多项式就够了。代码简单,调试方便。
  2. 如果你做工业机器人,路径复杂:上B样条。局部可控性太香了,改一个点不影响全局。
  3. 如果你做高精度装配或人机协作:用最小加加速度。虽然计算量大一点,但运动平滑度是其他方法比不了的。

最后提醒一句:别在仿真里觉得完美就上线。我吃过这个亏——仿真里B样条跑得飞起,一上实际机器人就抖成筛子。为什么?因为实际关节有摩擦力、弹性变形,仿真模型没考虑。所以,一定要在实物上验证轨迹的平滑性和可执行性。

好了,轨迹生成的基础就聊到这里。记住:没有最好的方法,只有最适合你场景的方法。多试、多调、多踩坑,慢慢就有感觉了。

可可精品资料库