3. 轨迹规划入门
各位同学,欢迎来到第三章。
前两章我们聊了机器人运动学的基础,说白了就是让机器人知道「自己在哪里」。但光知道位置没用,你得让它动起来,而且动得漂亮、动得稳。这就是轨迹规划要干的事。
我个人习惯把轨迹规划比作「给机器人写剧本」。你告诉它起点、终点、中间要经过哪些点,剩下的——怎么加速、怎么减速、走哪条路——都由规划器来安排。今天我们就来拆解这个剧本怎么写。
3.1 关节空间 vs 笛卡尔空间:两条完全不同的路
先问一个问题:你让机器人从A点走到B点,它该怎么走?
答案其实有两种思路。一种是在关节空间里规划,另一种是在笛卡尔空间里规划。这两者的区别,我当年刚入行时也迷糊了好一阵。
3.1.1 关节空间规划
关节空间规划,说白了就是只关心每个关节的角度变化。比如从关节角 (30°, 45°, 90°) 变到 (60°, 30°, 120°),规划器只负责让每个关节平滑地转过去。
优点很明显:
- 计算量小,实时性好
- 不会出现奇异点问题
- 关节运动自然、平滑
缺点呢?
- 末端轨迹不可控——你根本不知道机器人末端在空间里画了什么线
- 可能撞到障碍物
我在项目中遇到过一件事:用关节空间规划让机器人去抓一个工件,结果末端在中间画了个大圆弧,差点撞到旁边的夹具。嗯,从那以后我就记住了——关节空间规划只管关节,不管末端。
3.1.2 笛卡尔空间规划
笛卡尔空间规划就反过来。它直接控制机器人末端的位姿在三维空间中的路径。比如让末端走一条直线、一个圆弧,或者沿着某个曲面。
优点:
- 末端轨迹精确可控
- 适合焊接、涂胶、铣削等对路径有要求的工艺
缺点:
- 计算量大,需要实时逆解
- 可能遇到奇异点或关节限位
你想想看,笛卡尔空间规划每算一个点,都要做一次逆运动学求解。如果控制器性能不够,很容易掉帧。
核心区别一句话总结:
关节空间规划——只管关节怎么转,末端轨迹随缘。
笛卡尔空间规划——只管末端怎么走,关节自己想办法。
3.2 梯形速度曲线:简单但够用
好,路径定下来了。接下来要解决的是:沿着这条路径,速度怎么变?
最简单的方案就是梯形速度曲线。它分为三段:匀加速、匀速、匀减速。形状像个梯形,所以叫这个名字。
// 梯形速度曲线参数计算示例
// 已知:总位移 S,最大速度 Vmax,加速度 A
// 计算加速段位移 Sa = Vmax^2 / (2 * A)
// 如果 Sa * 2 <= S,说明能达到最大速度
// 否则就是三角形曲线(没到最大速度就开始减速了)
float calc_trapezoid_time(float S, float Vmax, float A) {
float Sa = Vmax * Vmax / (2.0f * A);
if (2.0f * Sa <= S) {
// 有匀速段
float ta = Vmax / A;
float tc = (S - 2.0f * Sa) / Vmax;
return 2.0f * ta + tc;
} else {
// 三角形曲线
float ta = sqrtf(S / A);
return 2.0f * ta;
}
}
梯形曲线的好处是简单、直观、计算量小。我早期做码垛机器人时,用的就是梯形曲线。但有个问题——加速度在切换点处有突变。你想想看,从加速突然变成匀速,加速度瞬间归零,这会产生冲击力。
避坑指南:
我曾经在高速搬运项目中用过梯形曲线,结果机器人末端抖动明显,工件都抓不稳。后来一查,就是加速度突变导致的机械共振。所以,如果对运动平滑度有要求,梯形曲线可能不够用。
3.3 S形曲线:平滑但复杂
为了解决梯形曲线的加速度突变问题,S形曲线出现了。它把加速度也做了平滑处理——加速度本身也是连续变化的。
S形曲线有七段:加加速、匀加速、减加速、匀速、加减速、匀减速、减减速。听着复杂,但效果确实好。
// S形曲线位置计算(简化版)
// 输入:时间 t,总时间 T,总位移 S
// 输出:当前位置 s(t)
float s_curve(float t, float T, float S) {
float tau = t / T; // 归一化时间
// 使用三次多项式实现S形
if (tau < 0.5f) {
return 2.0f * S * tau * tau;
} else {
return S * (1.0f - 2.0f * (1.0f - tau) * (1.0f - tau));
}
}
为什么叫S形?因为速度曲线看起来像字母S的拉长版。加速度从0开始慢慢增加,到中间再慢慢减小,整个过程没有突变。
我的经验:
在精密装配、激光切割这类对抖动敏感的场合,我建议直接用S形曲线。虽然计算量大了点,但现在的控制器性能完全扛得住。梯形曲线更适合对实时性要求极高、但对平滑度要求不高的场景,比如简单的搬运。
3.4 两种规划 + 两种曲线 = 四种组合
关节空间和笛卡尔空间是「走哪条路」,梯形和S形是「怎么走」。组合起来就是四种方案:
| 组合 | 适用场景 | 我的评价 |
|---|---|---|
| 关节空间 + 梯形 | 简单搬运、点对点运动 | 入门级,够用但别要求太高 |
| 关节空间 + S形 | 码垛、装配 | 平衡之选,我常用 |
| 笛卡尔空间 + 梯形 | 直线焊接、简单涂胶 | 注意加速度突变可能影响焊缝质量 |
| 笛卡尔空间 + S形 | 精密加工、高速高精度轨迹 | 效果最好,但调参最麻烦 |
我个人习惯是:能选S形就选S形,除非控制器实在跑不动。至于关节空间还是笛卡尔空间,看工艺要求——对路径有要求就笛卡尔,没要求就关节空间,省事。
3.5 本章知识体系
下面这张图帮你理清本章的核心逻辑:
嗯,这张图把本章的核心逻辑串起来了。你从最上层开始,先选路径规划方式,再选速度曲线,最后组合出适合你项目的方案。
本章要点回顾:
- 关节空间规划:只管关节角度,末端轨迹不可控
- 笛卡尔空间规划:只管末端位姿,需要实时逆解
- 梯形曲线:三段式,简单但有加速度突变
- S形曲线:七段式,平滑但计算量大
- 实际项目中,我建议优先考虑S形曲线 + 笛卡尔空间(如果工艺允许)