4、轨迹生成与平滑:多项式插值、贝塞尔曲线、B样条曲线、最小加加速度轨迹
轨迹规划这件事,说白了就是让机器人「怎么动起来」。不是随便动,而是动得稳、动得准、动得漂亮。我做了这么多年机器人,见过太多因为轨迹不平滑导致末端抖动、电机过热的案例。嗯,今天咱们就把这块硬骨头啃下来。
核心观点:轨迹平滑的本质,是对位置、速度、加速度甚至加加速度的连续约束。你跳过的平滑步骤,最终都会变成产线上的废品。
4.1 多项式插值:最朴素的轨迹生成
多项式插值,是我个人习惯用的「入门级」方法。为什么?因为数学简单,物理意义明确。你给定几个关键点,多项式就能给你一条连续曲线。
最常见的,是三次多项式插值。它保证位置和速度连续。公式长这样:
q(t) = a0 + a1*t + a2*t^2 + a3*t^3
四个系数,由起点和终点的位置、速度四个条件唯一确定。我在项目中遇到过一个问题:用三次多项式做关节空间轨迹,结果末端执行器在笛卡尔空间里走了一条奇怪的弧线。后来才意识到,关节空间平滑不代表笛卡尔空间平滑。这个坑,我替你们踩过了。
我的建议:如果只要求点到点运动,且对中间路径没要求,三次多项式足够了。别用高阶多项式,容易产生龙格现象——端点附近剧烈振荡。
五次多项式呢?它额外约束了加速度连续。公式变成:
q(t) = a0 + a1*t + a2*t^2 + a3*t^3 + a4*t^4 + a5*t^5
六个系数,对应位置、速度、加速度各两个边界条件。你想想看,如果机器人抓取易碎品,加速度突变会导致冲击力。这时候五次多项式就派上用场了。
| 多项式阶数 | 连续阶 | 适用场景 |
|---|---|---|
| 三次 | 速度连续 | 普通搬运、点焊 |
| 五次 | 加速度连续 | 抓取易碎品、精密装配 |
| 七次 | 加加速度连续 | 高速高精度加工 |
4.2 贝塞尔曲线:直观的路径控制
贝塞尔曲线,做UI设计的朋友可能更熟悉。但在机器人轨迹规划里,它同样好用。核心思想是用控制点「牵引」曲线,而不是直接指定路径点。
三阶贝塞尔曲线需要四个控制点:起点P0、终点P3,以及两个中间控制点P1、P2。曲线不一定经过P1和P2,但会被它们「拉」向那个方向。公式是:
B(t) = (1-t)³P0 + 3(1-t)²tP1 + 3(1-t)t²P2 + t³P3
我曾经用贝塞尔曲线做焊接轨迹。焊枪需要绕过障碍物,又不想让路径太生硬。调整P1和P2的位置,曲线形状就变了。直观,真的直观。
注意:贝塞尔曲线是全局控制。你动一个控制点,整条曲线都会变。这在某些场景下是优点,但在需要局部微调时就很头疼。我曾经因为这个特性,在调试一个复杂路径时浪费了半天时间。
贝塞尔曲线还有一个特性:凸包性质。曲线始终位于控制点构成的凸多边形内。这意味着你可以通过控制点的位置,大致预估机器人的运动范围,避免碰撞。
4.3 B样条曲线:局部控制的利器
B样条曲线,说白了就是贝塞尔曲线的升级版。它解决了贝塞尔曲线的全局控制问题。你修改一个控制点,只影响曲线的一小段,其他部分纹丝不动。
B样条的核心是「节点向量」和「基函数」。听着复杂,其实理解起来不难。每个控制点只在一段区间内起作用,区间由节点向量决定。常用的三次B样条,每个控制点影响四个区间段。
// 三次均匀B样条基函数示例
N0,3(t) = (1/6)(1-t)³
N1,3(t) = (1/6)(3t³ - 6t² + 4)
N2,3(t) = (1/6)(-3t³ + 3t² + 3t + 1)
N3,3(t) = (1/6)t³
我在项目中遇到过需要频繁调整路径的情况。用B样条,我只需要修改出问题的那个控制点,其他部分保持不变。调试效率提升了一大截。
对比总结:贝塞尔曲线适合控制点少、路径简单的场景;B样条适合控制点多、需要局部调整的复杂路径。我个人习惯,超过6个控制点就用B样条。
4.4 最小加加速度轨迹:追求极致平滑
加加速度,就是加速度的变化率。最小加加速度轨迹,目标是让加加速度的平方积分最小。为什么在意这个?因为加加速度突变会产生冲击力,导致机器人振动、磨损加剧。
最小加加速度轨迹通常用七次多项式实现。为什么是七次?因为要约束位置、速度、加速度、加加速度四个量在起点和终点的值,一共八个条件,对应八个系数。
q(t) = a0 + a1*t + a2*t² + a3*t³ + a4*t⁴ + a5*t⁵ + a6*t⁶ + a7*t⁷
说实话,七次多项式的计算量不小。但换来的是极其平滑的运动曲线。我记得有一次做半导体晶圆搬运项目,晶圆薄得像纸片,稍微抖一下就碎了。最后就是用最小加加速度轨迹搞定的。
避坑指南:我曾经在计算七次多项式系数时,直接用了矩阵求逆。结果数值稳定性很差,轨迹末端出现微小抖动。后来改用三对角矩阵求解,问题就解决了。数值方法的选择,有时候比算法本身更重要。
实际应用中,最小加加速度轨迹常与时间最优规划结合。先确定运动时间,再优化轨迹平滑度。两者权衡,找到平衡点。
四种方法各有千秋。多项式插值简单直接,适合入门;贝塞尔曲线直观可控,适合路径设计;B样条灵活高效,适合复杂场景;最小加加速度追求极致,适合高精度应用。实际项目中,我经常把它们组合使用。比如先用B样条设计路径,再用最小加加速度优化时间分配。
嗯,轨迹平滑这件事,没有银弹。理解每种方法的优缺点,根据场景灵活选择,才是工程师该有的态度。