4、轨迹表示方法:关节空间轨迹、笛卡尔空间轨迹、样条曲线、多项式轨迹
轨迹规划,说白了就是给机器人找一条「路」。但这条路怎么描述,学问很大。
我个人习惯把轨迹表示分成两大类:关节空间和笛卡尔空间。前者管的是每个电机怎么转,后者管的是手爪在三维空间里怎么走。中间还有样条曲线和多项式这些数学工具,用来把离散的点连成平滑的曲线。
嗯,咱们一个一个拆开看。
4.1 关节空间轨迹
关节空间轨迹,就是直接控制每个关节的角度随时间的变化。比如让关节1从30°转到60°,关节2从-10°转到20°,各自走一条平滑的曲线。
核心优势:不会遇到奇异性问题。因为你在关节层面规划,压根不管末端执行器在笛卡尔空间里怎么走。
我在做六轴机械臂的码垛任务时,就特别喜欢用关节空间轨迹。为什么?因为码垛只需要起点和终点,中间路径没有障碍物,关节空间规划计算量小,而且每个关节的运动曲线可以独立优化。
关节空间轨迹的常见形式:
- 梯形速度曲线:加速-匀速-减速,简单粗暴,但加速度有突变。
- S形速度曲线:加加速度连续,对电机更友好。
- 多项式插值:用三次或五次多项式拟合关节角度。
我的经验:如果关节空间轨迹在起点和终点处速度不为零,一定要用五次多项式。三次多项式只能保证位置和速度连续,加速度会跳变。我曾经在一条产线上吃过这个亏——电机启动时「咯噔」一下,后来换成五次多项式就顺滑了。
4.2 笛卡尔空间轨迹
笛卡尔空间轨迹,描述的是末端执行器在三维空间中的位姿(位置+姿态)随时间的变化。比如让焊枪沿着一条直线焊缝走,或者让吸盘沿着圆弧轨迹运动。
你想想看,为什么需要笛卡尔空间轨迹?因为有些任务对末端路径有严格要求。比如涂胶、焊接、打磨,路径偏差几毫米,工件就废了。
笛卡尔空间轨迹的难点在于:
- 奇异性问题:某些位姿下,关节速度会趋于无穷大。
- 姿态插值:旋转矩阵不能直接线性插值,得用四元数或轴角表示。
- 计算量大:每个插值点都要做逆运动学解算。
避坑指南:我曾经在笛卡尔空间做直线轨迹规划时,遇到中间点逆运动学无解的情况。后来我养成了一个习惯——规划前先做可达性检查,把路径离散成密集点,逐个验证逆解是否存在。
笛卡尔空间轨迹的常见插值方式:
| 插值类型 | 位置插值 | 姿态插值 | 典型应用 |
|---|---|---|---|
| 直线插值 | 线性插值 | 四元数球面线性插值(SLERP) | 焊接、涂胶 |
| 圆弧插值 | 圆弧参数方程 | 四元数SLERP | 打磨、抛光 |
| 样条插值 | B样条/贝塞尔 | 四元数样条 | 自由曲面加工 |
4.3 样条曲线:B样条与贝塞尔曲线
样条曲线,说白了就是用一段段多项式拼接成一条光滑曲线。在轨迹规划里,我们经常用样条曲线来拟合一系列路径点(waypoints)。
我个人最常用的是B样条曲线和贝塞尔曲线。它们俩是亲戚,但性格不同。
4.3.1 贝塞尔曲线
贝塞尔曲线由一组控制点定义。曲线会经过首尾两个控制点,但不经过中间控制点——中间点只是「吸引」曲线靠近。
贝塞尔曲线的特点:
- 全局性:移动一个控制点,整条曲线都会变。
- 凸包性:曲线始终在控制点构成的凸包内。
- 端点插值:曲线经过首尾控制点。
实际用法:贝塞尔曲线适合做路径的粗略设计。我在做移动机器人全局路径规划时,经常用三次贝塞尔曲线来平滑A*算法生成的折线路径。只需要把折线的拐点作为控制点,曲线就能自动生成一条平滑的路径。
三次贝塞尔曲线的数学形式:
B(t) = (1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃, t ∈ [0,1]
4.3.2 B样条曲线
B样条曲线是贝塞尔曲线的「升级版」。它解决了贝塞尔曲线的全局性问题——移动一个控制点,只影响局部区域。
B样条曲线的核心概念:
- 控制点:决定曲线形状。
- 节点向量:决定曲线分段的位置。
- 基函数:每个控制点只在局部区间起作用。
我的建议:如果你需要规划一条经过多个路径点的轨迹,用三次均匀B样条。它C²连续(二阶导数连续),加速度平滑,而且计算效率高。我在做双臂协作任务时,就用B样条来规划两条机械臂的协同轨迹,效果很好。
B样条与贝塞尔的对比:
| 特性 | 贝塞尔曲线 | B样条曲线 |
|---|---|---|
| 控制点影响范围 | 全局 | 局部 |
| 阶数 | 控制点数-1 | 可独立设置 |
| 连续性 | Cⁿ(n为阶数) | C^(k-1)(k为阶数) |
| 局部修改 | 不支持 | 支持 |
| 计算复杂度 | 低 | 中等 |
4.4 多项式轨迹
多项式轨迹,就是用多项式函数来描述关节角度或末端位姿随时间的变化。它是最基础的轨迹表示方法,也是很多高级方法的基础。
常见的多项式轨迹:
- 三次多项式:4个系数,可约束起点和终点的位置和速度。
- 五次多项式:6个系数,可约束起点和终点的位置、速度、加速度。
- 七次多项式:8个系数,可额外约束加加速度(jerk)。
五次多项式的标准形式:
θ(t) = a₀ + a₁t + a₂t² + a₃t³ + a₄t⁴ + a₅t⁵
约束条件:
θ(0) = θ₀, θ(T) = θ₁
θ'(0) = v₀, θ'(T) = v₁
θ''(0) = a₀, θ''(T) = a₁
注意:多项式阶数不是越高越好。阶数高了,数值稳定性会变差,而且容易产生「龙格现象」——在端点附近剧烈振荡。我一般最高用到七次,再高就换B样条了。
4.5 知识体系总览
下面这张图,把本章的知识结构串起来了。你可以看到,轨迹表示方法从空间维度(关节/笛卡尔)和数学工具(多项式/样条)两个维度展开,最终服务于不同的应用场景。
4.6 如何选择?
说了这么多,到底该用哪种?我个人的经验是:
- 简单点到点运动:用关节空间+五次多项式。计算快,实现简单。
- 有路径约束的任务:用笛卡尔空间+直线/圆弧插值。注意避开奇异点。
- 多路径点平滑过渡:用B样条曲线。局部修改方便,连续性可控。
- 路径形状设计:用贝塞尔曲线。控制点直观,适合人机交互。
一个小技巧:在实际项目中,我经常混合使用。比如先用笛卡尔空间规划关键路径点,再用关节空间的B样条做平滑插值。这样既保证了路径精度,又避免了奇异性问题。
嗯,轨迹表示方法就讲到这里。记住一点——没有银弹。每种方法都有自己的适用场景,关键是要理解它们的本质区别,然后根据任务需求灵活选择。