3、轨迹规划入门:从“怎么动”到“动得好”
各位好,欢迎来到第三章。
前两章我们聊了电机怎么转、编码器怎么读,说白了都是“怎么让轴动起来”。但从这一章开始,我们要进入一个更有意思的领域——轨迹规划。
你可能会问:电机能转不就行了吗?为什么还要规划?
嗯,我刚开始做机器人那会儿也这么想。直到有一次,我让一个六轴机械臂从A点直接“飞”到B点,结果末端抖得像筛糠,工件直接甩飞了。从那以后我才明白:让轴动起来很容易,让轴动得稳、动得准、动得优雅,才是真本事。
3.1 轨迹规划是什么?
轨迹规划,简单说就是给运动定一条“路”,并且规定好这条路怎么走——什么时候加速、什么时候减速、拐弯时速度降到多少。
它和“路径规划”不一样。路径规划只关心“走哪条路”,不关心速度。轨迹规划则要回答:什么时间,到达什么位置,速度是多少,加速度是多少。
核心定义:轨迹规划 = 路径(几何) + 运动律(时间)
路径是空间曲线,运动律是时间轴上的速度/加速度曲线。
我个人习惯把轨迹规划分成两个层次:
- 上层规划:决定路径形状(直线、圆弧、样条曲线)
- 下层规划:决定运动律(梯形速度、S形速度、多项式插值)
实际工程中,这两层经常耦合在一起。比如你要走一条圆弧路径,但末端速度不能超过某个值,那就得同时考虑几何和运动学约束。
3.2 点到点运动 vs 连续路径运动
这是轨迹规划里最基础、也最容易被混淆的两个概念。我见过不少工程师把两者混为一谈,结果调试时出了大问题。
3.2.1 点到点运动(Point-to-Point, PTP)
PTP运动只关心起点和终点,中间路径不约束。说白了就是:你从北京到上海,我不关心你走哪条高速,只要到了就行。
在工业机器人里,PTP常用于:
- 空载快速移动(比如从一个工位转到另一个工位)
- 不需要精确路径的搬运
- 关节空间运动(每个关节独立规划)
我的经验:PTP运动虽然快,但有个坑——中间路径不可控。我曾经遇到过机器人做PTP运动时,末端走了一条“大弧线”,差点撞到旁边的夹具。所以,如果工作空间里有障碍物,千万别用PTP。
3.2.2 连续路径运动(Continuous Path, CP)
CP运动则要求末端必须沿着指定的几何路径运动。比如焊接、涂胶、切割,这些工艺要求工具中心点(TCP)精确走过一条直线或圆弧。
CP运动的核心挑战是:
- 路径精度要高(不能跑偏)
- 速度要平滑(不能忽快忽慢)
- 拐角处要过渡(不能急停急启)
| 对比项 | 点到点(PTP) | 连续路径(CP) |
|---|---|---|
| 路径约束 | 无(只约束起点终点) | 有(必须沿指定路径) |
| 运动速度 | 通常较快 | 受路径曲率限制 |
| 适用场景 | 搬运、换刀、空程 | 焊接、涂胶、切割 |
| 规划复杂度 | 低 | 高 |
| 典型运动律 | 梯形速度、S形速度 | 多项式插值、样条 |
3.3 运动学约束:速度、加速度、加加速度
好了,现在我们知道要规划轨迹了。但规划不是拍脑袋——你得尊重物理规律。
电机有额定转速,机构有承受极限,工件不能因为急停而飞出去。这些限制,就是运动学约束。
3.3.1 速度约束
速度约束是最直观的。每个关节有最大转速,末端有最大线速度/角速度。
但这里有个细节:速度约束不是全局的。比如在直线段,你可以跑很快;但在大曲率弯道,速度必须降下来。否则离心力会把工件甩出去。
我曾经踩过的坑:做SCARA机器人拾取时,我设了一个全局最大速度2m/s。结果在圆弧拐角处,末端实际速度超过了关节的角速度极限,导致电机过流报警。后来我学会了根据路径曲率动态调整速度上限。
3.3.2 加速度约束
加速度约束比速度约束更关键。为什么?因为加速度直接决定了冲击力。
F = ma,这个公式大家都懂。加速度越大,机构受到的力越大。过大的加速度会导致:
- 电机扭矩饱和
- 减速机寿命缩短
- 工件移位或损坏
- 机器人本体振动
我建议在工程中,加速度约束要留20%~30%的余量。因为理论计算和实际工况总有差距,留点余量能避免很多麻烦。
3.3.3 加加速度约束(Jerk)
加加速度,也叫Jerk,是加速度的变化率。单位是m/s³。
你可能会问:我都约束了速度和加速度,为什么还要管Jerk?
原因很简单:加速度突变会产生冲击。
想象一下:电梯启动时,如果加速度从0瞬间跳到0.5m/s²,你会感觉“咯噔”一下。但如果加速度从0平滑增加到0.5m/s²,你就几乎感觉不到。这个“平滑增加”的过程,就是Jerk在起作用。
关键认知:
- 速度约束 → 决定“能跑多快”
- 加速度约束 → 决定“能多快加速”
- 加加速度约束 → 决定“加速过程是否平滑”
三者缺一不可。只约束速度和加速度的轨迹,往往会有明显的“顿挫感”。
在实际项目中,Jerk约束对以下场景尤其重要:
- 精密装配:冲击会导致零件错位
- 高速拾放:Jerk过大会引起末端抖动
- 人机协作:平滑运动让人感觉更安全
3.4 知识体系总览
说了这么多,我们来画一张图,把这一章的核心逻辑串起来。
3.5 一个简单的梯形速度规划示例
理论说完了,我们来看点实际的。梯形速度规划是最基础的运动律,也是我入行时写的第一个轨迹规划代码。
它的逻辑很简单:先匀加速,再匀速,最后匀减速。形状像个梯形。
// 梯形速度规划 - 核心逻辑(C风格伪代码)
// 输入:总位移 S,最大速度 Vmax,最大加速度 Amax
// 输出:每个时刻的位置、速度
void TrapezoidalProfile(float S, float Vmax, float Amax) {
// 1. 计算加速/减速段所需位移
float accel_dist = Vmax * Vmax / (2 * Amax);
// 2. 判断是否能达到最大速度
if (2 * accel_dist <= S) {
// 能达到Vmax:有匀速段
float accel_time = Vmax / Amax;
float cruise_time = (S - 2 * accel_dist) / Vmax;
float total_time = 2 * accel_time + cruise_time;
// 三段式:加速 → 匀速 → 减速
// 实际使用时,根据当前时间t计算位置
} else {
// 达不到Vmax:只有加速和减速(三角形速度曲线)
float peak_vel = sqrt(Amax * S);
float accel_time = peak_vel / Amax;
float total_time = 2 * accel_time;
// 两段式:加速 → 减速
}
}
工程建议:梯形速度规划虽然简单,但有个缺点——加速度在拐点处突变,导致Jerk无穷大。如果你对运动平滑度有要求(比如精密装配),建议用S形速度规划或多项式插值。我后面会专门讲。
3.6 本章小结
这一章我们聊了三个核心问题:
- 轨迹规划是什么——给运动定一条“时空路径”
- PTP和CP的区别——一个只关心终点,一个关心全程
- 三大运动学约束——速度、加速度、加加速度,一个都不能少
说实话,这些概念看起来简单,但真正用好它们,需要大量的工程实践。我见过太多人把梯形速度规划用在不该用的地方,也见过有人完全忽略Jerk约束导致设备抖动。