3. 多项式轨迹规划基础
各位同学,今天我们来聊聊轨迹规划里最基础、也最常用的一类方法——多项式插值。说白了,就是用一条平滑的多项式曲线,把机器人要经过的点串起来。
我记得刚入行那会儿,带我的老工程师跟我说过一句话:「机器人的运动,本质上就是位置随时间的变化。」而多项式,就是描述这种变化最自然的数学工具。为什么?因为它简单、可导、好算。
3.1 多项式插值的基本思想
先问大家一个问题:给你两个点,你怎么让机器人从A点走到B点?
最简单的想法——直接连一条直线。但机器人不是光速移动,它需要加速、减速。如果直接走直线,起点和终点的速度会突变,产生冲击。这就是为什么我们需要插值。
多项式插值的核心思想,就是用一个多项式函数 q(t) 来描述位置随时间的变化:
q(t) = a₀ + a₁·t + a₂·t² + ... + aₙ·tⁿ
其中 a₀, a₁, ..., aₙ 是待求的系数。我们有多少个约束条件,就决定多项式的阶数。举个例子:
- 约束起点位置和终点位置 → 需要2个条件 → 一次多项式(直线)
- 再加上起点速度和终点速度 → 需要4个条件 → 三次多项式
- 再加上起点加速度和终点加速度 → 需要6个条件 → 五次多项式
核心原则:约束条件的数量 = 多项式系数的数量。一个n次多项式有n+1个系数,所以最多能满足n+1个约束。
我个人习惯把约束条件分成两类:
- 位置约束:机器人必须在某个时刻到达某个位置
- 平滑约束:速度、加速度甚至加加速度在连接点处连续
你想想看,如果只满足位置约束,那速度可能突变,机器人就会「抖」一下。这在工业现场是绝对不能接受的。
3.2 三次多项式轨迹
三次多项式是最常用的轨迹形式。为什么?因为它刚好能同时约束位置和速度。
假设我们要让机器人从 q₀ 运动到 q₁,用时 T。约束条件如下:
| 时刻 | 位置约束 | 速度约束 |
|---|---|---|
| t = 0 | q(0) = q₀ | q̇(0) = 0 |
| t = T | q(T) = q₁ | q̇(T) = 0 |
一共4个约束,所以用三次多项式:
q(t) = a₀ + a₁·t + a₂·t² + a₃·t³
对时间求导得到速度:
q̇(t) = a₁ + 2·a₂·t + 3·a₃·t²
代入约束条件,解方程组:
q(0) = a₀ = q₀
q̇(0) = a₁ = 0
q(T) = a₀ + a₁·T + a₂·T² + a₃·T³ = q₁
q̇(T) = a₁ + 2·a₂·T + 3·a₃·T² = 0
解出来:
a₀ = q₀
a₁ = 0
a₂ = 3·(q₁ - q₀) / T²
a₃ = -2·(q₁ - q₀) / T³
实际经验:我在做码垛机器人项目时,三次多项式是最常用的。它计算量小,实时性好,对于点到点的运动完全够用。但要注意——如果路径中间有障碍物,三次多项式没法绕过去,因为它只能保证起点和终点的状态。
3.3 五次多项式轨迹
三次多项式虽然简单,但有个问题:加速度在起点和终点会突变。你想想看,加速度突变意味着什么?——力的突变,也就是冲击。
对于高速运动或者精密装配,这种冲击是不能接受的。这时候就需要五次多项式。
五次多项式可以额外约束加速度:
| 时刻 | 位置约束 | 速度约束 | 加速度约束 |
|---|---|---|---|
| t = 0 | q(0) = q₀ | q̇(0) = 0 | q̈(0) = 0 |
| t = T | q(T) = q₁ | q̇(T) = 0 | q̈(T) = 0 |
6个约束,对应五次多项式:
q(t) = a₀ + a₁·t + a₂·t² + a₃·t³ + a₄·t⁴ + a₅·t⁵
解这个方程组稍微复杂一点,但结果很规整:
a₀ = q₀
a₁ = 0
a₂ = 0
a₃ = 10·(q₁ - q₀) / T³
a₄ = -15·(q₁ - q₀) / T⁴
a₅ = 6·(q₁ - q₀) / T⁵
我曾经踩过的坑:有一次在焊接机器人项目里,我用了三次多项式,结果焊缝起点处总有一个小疙瘩。后来发现是加速度突变导致焊枪抖动。换成五次多项式后,问题立刻解决了。所以——如果你的应用对平滑度要求高,别省那点计算量,直接用五次多项式。
3.4 多项式轨迹的优缺点
做了这么多年轨迹规划,我总结了一下多项式方法的优缺点:
| 优点 | 缺点 |
|---|---|
| 数学形式简单,计算量小 | 阶数越高,数值稳定性越差 |
| 导数连续,运动平滑 | 无法精确控制中间点的速度/加速度 |
| 容易实现,代码量少 | 不适合长距离多段轨迹 |
| 适合点到点运动 | 无法避开障碍物 |
嗯,这里要特别说一下「数值稳定性」的问题。当多项式的阶数超过7次时,系数会变得非常大,稍微有点计算误差,轨迹就会跑偏。我见过有人用10次多项式做轨迹,结果在仿真里看着挺好,一上实际机器人就抖得不行。
我的建议:日常工作中,三次和五次多项式已经能覆盖90%以上的场景。如果遇到更复杂的需求,比如多段轨迹拼接或者避障,可以考虑样条曲线或者B样条——这些我们后面会讲到。
最后,给大家看一张我画的对比图,直观感受一下不同阶数多项式的区别:
从图上可以清楚看到:一次多项式(直线)在起点和终点有尖角,速度不连续;三次多项式平滑了很多,但加速度有突变;五次多项式则是最平滑的,加速度也连续变化。
好了,这一节的内容就到这里。多项式轨迹是轨迹规划的基础,理解透了,后面学样条曲线、B样条就会轻松很多。