4. 轨迹表示方法:路径点序列、多项式曲线、样条曲线

聊到轨迹跟踪,第一个绕不开的问题就是:轨迹长什么样?

说白了,我们得先知道怎么把一条“路”用数学的方式描述出来,机器人才能理解。我见过不少新手,一上来就调PID参数,结果轨迹本身就有问题——那调参再努力也是白费。

今天我就把三种最常见的轨迹表示方法掰开揉碎讲清楚。这三种方法,基本覆盖了从简单到复杂的全部场景。

4.1 路径点序列:最朴素的方式

路径点序列,就是给机器人一串坐标点。比如:

waypoints = [(0, 0), (1, 2), (3, 3), (5, 1), (7, 4)]

机器人拿到这些点,挨个走过去就行。简单粗暴。

优点很明显:

  • 实现起来几乎零门槛
  • 数据存储量小
  • 人类容易理解

缺点也致命:

  • 点与点之间是直线连接,拐角处会有突变
  • 机器人走到每个点必须停下来,否则会冲出轨迹
  • 无法保证速度、加速度的连续性
⚠ 注意: 路径点序列不是轨迹,它只是离散的位置信息。真正的轨迹需要包含时间信息——什么时刻到达哪个点。

我在项目中遇到过一件事:有个学生用路径点序列让AGV小车送货,结果每次转弯时货物都甩出去。为什么?因为点之间是直线,转弯时速度方向突变,加速度无穷大。嗯,物理上不可能实现。

4.2 多项式曲线:让轨迹变平滑

路径点序列太“硬”了,我们需要让它变“软”。多项式曲线就是干这个的。

最简单的,用三次多项式:

q(t) = a₀ + a₁t + a₂t² + a₃t³

四个系数,刚好可以约束起点和终点的位置、速度。这样轨迹就是一条平滑的曲线,不再有突变。

常用的多项式阶次:

阶次 可约束条件 典型应用
3次 位置、速度 点到点运动
5次 位置、速度、加速度 高精度轨迹
7次 位置、速度、加速度、加加速度 超精密运动

我个人习惯用五次多项式。为什么?三次多项式只能保证速度连续,但加速度可能跳变。五次多项式连加速度都连续了,机器人跑起来才真正“丝滑”。

💡 小技巧: 如果你只需要点对点运动,五次多项式基本够用。但如果轨迹要经过多个中间点,多项式就有点力不从心了——每段都要重新算,而且段与段之间很难保证高阶连续性。

4.3 样条曲线:多段拼接的艺术

当轨迹需要经过多个点,又要保证平滑性,样条曲线就登场了。

样条曲线的核心思想是:分段拟合,整体连续。每一段用低阶多项式,段与段之间保证连续性。

最常见的两种:

  • 三次样条: 每段三次多项式,保证位置、速度、加速度连续
  • B样条: 更灵活,可以局部调整而不影响全局

我举个例子。假设有5个路径点,用三次样条会生成4段曲线。每段都是三次多项式,但在连接点处,位置、速度、加速度都匹配得天衣无缝。

# 三次样条插值示例(简化版)
from scipy.interpolate import CubicSpline
import numpy as np

# 路径点
t = [0, 1, 2, 3, 4]          # 时间
x = [0, 2, 3, 5, 7]          # x坐标
y = [0, 1, 3, 2, 4]          # y坐标

# 生成样条
cs_x = CubicSpline(t, x)
cs_y = CubicSpline(t, y)

# 在任意时刻求位置
t_query = 2.5
pos_x = cs_x(t_query)
pos_y = cs_y(t_query)

核心要点: 样条曲线的魅力在于,你不需要关心每一段的系数具体是多少,交给算法去算。你只需要告诉它“经过哪些点”和“要几阶连续”。

我曾经用B样条做过一个机械臂的轨迹规划。当时有个需求:用户拖拽机械臂示教几个点,然后机器人要平滑地重复运动。用B样条就特别合适——因为B样条有局部支撑性,修改一个点不会影响整条轨迹。你想想看,如果每次调整一个点都要重新算全局,那调试效率得多低?

4.4 三种方法的对比与选择

方法 平滑性 计算量 灵活性 适用场景
路径点序列 差 极低 高 简单移动、巡检
多项式曲线 中 低 中 点到点运动
样条曲线 高 中 高 复杂轨迹、多路径点

选哪种?我的建议是:

  • 如果只是让机器人从A到B,中间不停——用多项式曲线就够了
  • 如果路径点很多,且要求平滑——上样条曲线
  • 如果只是做原型验证,不关心平滑性——路径点序列最快
⚠ 避坑指南: 我曾经用高次多项式(比如9次)去拟合多个路径点,结果轨迹在端点附近剧烈震荡——这就是著名的“龙格现象”。记住:不要用高次多项式去拟合多个点,用样条曲线分段低次才是正道。

4.5 知识体系结构图

下面这张图,帮你理清三种轨迹表示方法的关系和选择逻辑:

轨迹表示方法 路径点序列 多项式曲线 样条曲线 离散坐标点列表 直线连接,拐角突变 无速度/加速度约束 3/5/7次多项式 约束端点位置/速度/加速度 适合点到点运动 分段低次多项式 段间高阶连续 局部调整不影响全局 选择依据:路径点数 × 平滑要求 × 计算资源 路径点少且要求不高 → 路径点序列 | 点到点运动 → 多项式 | 多点且高要求 → 样条曲线

嗯,这张图把三种方法的核心特征和选择逻辑都串起来了。你对照着看,应该能快速找到适合自己场景的方法。

最后说一句:轨迹表示是调参的基础。轨迹本身不平滑,你后面调再多的PID、LQR都是白搭。先把轨迹搞对,再谈跟踪精度——这是我做了这么多年机器人控制最深的体会。

一句话总结: 路径点序列是“骨架”,多项式曲线是“单段平滑”,样条曲线是“多段连续平滑”。选对方法,调参事半功倍。