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图总结了三种轨迹生成方法的核心逻辑和适用场景。你可以把它当作选型指南。
4.6 我的选型建议
说了这么多,到底怎么选?我个人的经验是:
- 如果你刚入门,做简单项目:用五次多项式就够了。代码简单,调试方便。
- 如果你做工业机器人,路径复杂:上B样条。局部可控性太香了,改一个点不影响全局。
- 如果你做高精度装配或人机协作:用最小加加速度。虽然计算量大一点,但运动平滑度是其他方法比不了的。
最后提醒一句:别在仿真里觉得完美就上线。我吃过这个亏——仿真里B样条跑得飞起,一上实际机器人就抖成筛子。为什么?因为实际关节有摩擦力、弹性变形,仿真模型没考虑。所以,一定要在实物上验证轨迹的平滑性和可执行性。
好了,轨迹生成的基础就聊到这里。记住:没有最好的方法,只有最适合你场景的方法。多试、多调、多踩坑,慢慢就有感觉了。