3. 轨迹表示方法:关节空间 vs 笛卡尔空间,多项式、样条、B样条曲线表示
轨迹表示,说白了就是你怎么描述机器人从A点到B点怎么走。这个问题我刚开始做机器人控制时觉得很简单——不就是起点到终点吗?直到第一次调试六轴机械臂,发现末端走直线时关节突然卡死,我才意识到选错表示方法有多坑。
3.1 关节空间 vs 笛卡尔空间
这两个空间的区别,我习惯用一个比喻来解释:关节空间是告诉每个电机转多少度,笛卡尔空间是告诉末端执行器走到哪个坐标点。
核心区别一句话:关节空间控制的是「因」,笛卡尔空间控制的是「果」。
| 对比维度 | 关节空间 | 笛卡尔空间 |
|---|---|---|
| 控制对象 | 每个关节角度/位置 | 末端位姿 (x, y, z, rx, ry, rz) |
| 计算复杂度 | 低,无逆解 | 高,需要实时逆运动学 |
| 路径直观性 | 不直观,不知道末端怎么走 | 直观,末端路径可控 |
| 奇异性风险 | 无(关节限位除外) | 高,靠近奇异位形时速度暴增 |
| 典型应用 | 点对点搬运、码垛 | 焊接、涂胶、铣削 |
我个人习惯:能走关节空间就别走笛卡尔空间。为什么?因为笛卡尔空间轨迹需要实时做逆运动学求解,一旦靠近奇异点,关节速度会瞬间飙到离谱。我曾经在调试一个六轴焊接机器人时,末端走直线经过奇异位形,第六轴转速直接报警——从那以后我养成了先检查路径是否经过奇异区的习惯。
实用建议:如果任务只要求起点和终点准确(比如抓取-放置),用关节空间插值就够了。如果要求末端路径精确(比如沿着焊缝走),才用笛卡尔空间。
3.2 多项式轨迹表示
多项式是最基础的轨迹表示方法。你想想看,给定起点和终点的位置、速度甚至加速度,用多项式拟合出一条光滑曲线——这就是多项式轨迹的核心思想。
3.2.1 三次多项式
最简单的形式:给定起点位置 q₀、终点位置 q_f,以及起点和终点速度都为零。四个约束条件,对应四个系数:
q(t) = a₀ + a₁·t + a₂·t² + a₃·t³
解这个方程组,得到系数:
a₀ = q₀
a₁ = 0
a₂ = 3·(q_f - q₀) / T²
a₃ = -2·(q_f - q₀) / T³
其中 T 是运动总时间。这个轨迹的特点是:位置连续、速度连续,但加速度是阶跃的。嗯,这里要注意——加速度阶跃意味着力矩突变,对电机和减速器都不友好。
3.2.2 五次多项式
如果要求加速度也连续,就得用五次多项式。六个约束条件(位置、速度、加速度各两个),六个系数:
q(t) = a₀ + a₁·t + a₂·t² + a₃·t³ + a₄·t⁴ + a₅·t⁵
我在项目中遇到过一个问题:用三次多项式规划轨迹,末端抖动明显。换成五次多项式后,抖动消失了。原因就是加速度连续,力矩变化平滑了。
避坑指南:多项式阶数不是越高越好。阶数高了容易产生龙格现象(Runge's phenomenon)——在端点附近剧烈振荡。我一般控制在五次以内。
3.3 样条曲线表示
多项式适合单段轨迹,但如果路径有多个中间点怎么办?分段多项式——这就是样条曲线的思路。
样条曲线的本质:把整个轨迹分成若干段,每段用低阶多项式表示,段与段之间保证位置、速度、加速度连续。
3.3.1 三次样条
最常用的是三次样条。每段用三次多项式,段间保证 C² 连续(位置、速度、加速度都连续)。
假设有 n+1 个路径点,n 段轨迹。每段 4 个系数,总共 4n 个未知数。约束条件:
- 每段起点终点位置已知:2n 个方程
- 内部节点处速度连续:n-1 个方程
- 内部节点处加速度连续:n-1 个方程
- 边界条件(自然样条或固定端点):2 个方程
总共 4n 个方程,可解。
我的经验:三次样条是工业机器人最常用的轨迹表示方法。它兼顾了平滑性和计算效率。我调试过的 SCARA 机器人,默认轨迹规划就是三次样条。
3.4 B样条曲线表示
B样条是样条曲线的升级版。它最大的优势是局部性——修改一个控制点只影响附近几段轨迹,不会牵一发动全身。
3.4.1 B样条的核心概念
- 控制点:决定曲线形状的点,但曲线不一定经过它们
- 节点向量:决定曲线分段位置的参数值
- 基函数:通过递推定义的混合函数
B样条的数学表达式:
C(u) = Σᵢ₌₀ⁿ Nᵢₚ(u) · Pᵢ
其中 Nᵢₚ(u) 是 p 次 B样条基函数,Pᵢ 是控制点。
3.4.2 为什么用B样条?
我举个例子你就明白了。假设你有一条经过10个点的轨迹,调试时发现第5个点附近路径不够平滑。如果用三次样条,你得重新计算所有段;如果用B样条,只需要调整第5个点附近的几个控制点就行。
说白了,B样条给了你局部编辑能力。这在机器人示教和离线编程中特别有用。
| 特性 | 三次样条 | B样条 |
|---|---|---|
| 局部控制 | 否,修改一点影响全局 | 是,只影响局部 |
| 曲线通过控制点 | 是(插值) | 否(逼近) |
| 计算复杂度 | 低 | 中等 |
| 灵活性 | 固定分段 | 可调节节点密度 |
实用技巧:如果路径点密集且需要精确经过每个点,用三次样条。如果路径点稀疏且需要平滑过渡,用B样条。我个人的经验法则是:路径点超过10个时优先考虑B样条。
3.5 知识体系总览
下面这张图总结了本章的核心知识结构:
3.6 实际选型建议
讲了这么多理论,最后给点实际建议。我根据多年项目经验,总结了一个简单的选型流程:
- 先问任务类型:点对点还是连续路径?点对点直接走关节空间。
- 再问路径精度:末端路径必须精确吗?是的话走笛卡尔空间。
- 然后选曲线:路径点少(<5个)用五次多项式;路径点多用三次样条;需要反复调试用B样条。
- 最后检查奇异点:笛卡尔空间轨迹一定要做奇异点检测,别等电机报警才后悔。
血的教训:我曾经在一个焊接项目中,为了省事直接用三次多项式做笛卡尔空间轨迹。结果经过奇异位形时,关节速度指令瞬间从 30°/s 跳到 300°/s,电机直接过流保护。从那以后,我所有笛卡尔空间轨迹都会加一个奇异点检测环节。
好了,轨迹表示方法就讲到这里。记住一句话:没有最好的方法,只有最合适的方法。关节空间省计算,笛卡尔空间保精度,B样条给灵活——根据你的实际需求选就行。