一、轨迹规划基础:关节空间与笛卡尔空间
大家好,我是你们的机器人控制讲师。今天咱们聊聊轨迹规划的基础。说实话,我刚入行那会儿,觉得轨迹规划不就是让机器人从A点到B点嘛,能有多难?结果第一次调试六轴机器人时,电机直接抖得像筛糠一样……嗯,从那以后我再也不敢小看这个环节了。
核心概念:轨迹规划的本质,就是生成一组随时间变化的位置、速度、加速度指令,让机器人既能完成任务,又不会把自己震散架。
1.1 关节空间 vs 笛卡尔空间——两条路怎么选?
先问大家一个问题:你让机器人去抓一个杯子,你关心的是每个关节转了多少度,还是关心手爪在空间中的位置?
说白了,关节空间规划,就是直接控制每个电机的角度。笛卡尔空间规划,是控制末端执行器在三维空间里的位姿。我个人习惯这样区分:
- 关节空间:简单、计算快、不会出现奇异点。但路径不可控——你没法保证手爪走直线。
- 笛卡尔空间:路径直观、适合焊接、涂胶等需要直线运动的场景。但计算量大,还可能遇到奇异点。
我在项目中遇到过这样一个坑:用笛卡尔空间规划让机器人画圆,结果在某个位置突然关节飞转——因为遇到了奇异点。从那以后,我养成了一个习惯:能走关节空间就走关节空间,除非工艺要求必须走直线。
1.2 关节空间轨迹规划——三种经典曲线
关节空间规划,说白了就是给每个电机设计一条平滑的速度曲线。常用的有三种:梯形、S形、多项式。我一个个说。
1.2.1 梯形速度曲线
梯形曲线是最简单的。加速段、匀速段、减速段,三段搞定。你看它的速度图,就像个梯形。
优点:计算量极小,适合对平滑度要求不高的场合。
缺点:加速度有突变,电机启动和停止时会「咯噔」一下。我在做AGV小车时吃过这个亏——货物直接倒了。
// 梯形速度曲线示例(伪代码)
float t_acc = v_max / a_max; // 加速时间
float t_dec = v_max / d_max; // 减速时间
float t_const = (total_dist - 0.5*a_max*t_acc^2 - 0.5*d_max*t_dec^2) / v_max;
// 分段计算位置
if (t < t_acc) pos = 0.5 * a_max * t^2;
else if (t < t_acc + t_const) pos = ...;
else pos = ...;
注意:梯形曲线在加速结束和减速开始的瞬间,加速度跳变。如果你的机器人负载较大,建议慎用。
1.2.2 S形速度曲线
S形曲线,说白了就是给梯形曲线加了「圆角」。它把加速段分成了加加速、匀加速、减加速三段。速度曲线看起来像字母S。
为什么会这样?因为梯形曲线的加速度突变会产生冲击力(Jerk),S形曲线通过限制加加速度,让运动更平滑。
我记得有一次做精密装配,要求末端抖动小于0.01mm。梯形曲线死活达不到,换成S形曲线后,问题迎刃而解。
// S形曲线分段(7段式)
// 加加速段:jerk = J_max
// 匀加速段:jerk = 0
// 减加速段:jerk = -J_max
// 匀速段: jerk = 0
// 加减速段:jerk = -J_max
// 匀减速段:jerk = 0
// 减减速段:jerk = J_max
我的经验:实际工程中,5段式S形曲线(去掉匀加速和匀减速段)已经能满足大多数需求。7段式虽然更平滑,但参数调起来很麻烦。
1.2.3 多项式轨迹
多项式轨迹,就是用多项式函数来拟合位置曲线。最常用的是三次多项式和五次多项式。
- 三次多项式:给定起点和终点的位置、速度,4个约束条件,刚好解出4个系数。
- 五次多项式:额外约束起点和终点的加速度,6个约束条件,解6个系数。
我建议初学者先从三次多项式入手。它比梯形曲线平滑,又比S形曲线简单。我在做码垛机器人时,就是用三次多项式做的关节插补,效果不错。
// 三次多项式:θ(t) = a0 + a1*t + a2*t^2 + a3*t^3
// 约束条件:
// θ(0) = θ_start, θ(T) = θ_end
// θ'(0) = 0, θ'(T) = 0
// 解出:
a0 = θ_start;
a1 = 0;
a2 = 3*(θ_end - θ_start) / T^2;
a3 = -2*(θ_end - θ_start) / T^3;
1.3 笛卡尔空间轨迹规划——直线与圆弧
笛卡尔空间规划,关注的是末端执行器在空间中的路径。最常见的两种:直线插补和圆弧插补。
1.3.1 直线插补
直线插补,就是让末端走直线。原理很简单:在起点和终点之间均匀插值,然后通过逆运动学算出每个关节的角度。
但这里有个坑:笛卡尔空间的直线,映射到关节空间不一定是直线。我曾经调试焊接机器人时,明明末端走的是直线,结果某个关节突然反转了180度——因为逆运动学有多解,我选错了解。
避坑指南:笛卡尔空间规划一定要做奇异点检测。如果遇到奇异点,要么切换路径,要么用阻尼最小二乘法处理。
1.3.2 圆弧插补
圆弧插补稍微复杂一点。给定三点(起点、中间点、终点),先算出圆心和半径,然后沿圆弧插值。
我记得有一次做打磨机器人,需要沿着曲面运动。用直线插补走折线,表面有纹路。换成圆弧插补后,效果立竿见影。
// 圆弧插补步骤:
// 1. 由三点计算圆心 O 和半径 R
// 2. 计算起始角 θ_start 和终止角 θ_end
// 3. 在角度上均匀插值:θ_i = θ_start + i*(θ_end - θ_start)/N
// 4. 计算笛卡尔坐标:P_i = O + R*[cos(θ_i), sin(θ_i)]
// 5. 通过逆运动学得到关节角
1.4 知识体系总览
下面这张图,是我自己总结的轨迹规划知识框架。你看一眼,心里就有数了。
1.5 实际工程中的选择建议
说了这么多,到底怎么选?我给大家一个简单的决策流程:
- 先看工艺要求:必须走直线吗?是 → 笛卡尔空间;否 → 关节空间
- 再看平滑度:有冲击要求吗?是 → S形或五次多项式;否 → 梯形或三次多项式
- 最后看算力:控制器性能够吗?不够 → 梯形曲线;够 → 随意
我的个人习惯:做原型机时先用梯形曲线快速验证功能,等稳定后再换成S形曲线优化性能。这样调试效率最高。
好了,这一章的内容就到这里。轨迹规划是机器人控制的基石,你把这些概念吃透了,后面学力矩模式下的轨迹跟踪就会轻松很多。
可可精品资料库