一、轨迹规划基础:关节空间与笛卡尔空间

大家好,我是你们的机器人控制讲师。今天咱们聊聊轨迹规划的基础。说实话,我刚入行那会儿,觉得轨迹规划不就是让机器人从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 知识体系总览

下面这张图,是我自己总结的轨迹规划知识框架。你看一眼,心里就有数了。

轨迹规划知识体系 关节空间规划 笛卡尔空间规划 梯形曲线 S形曲线 多项式 直线插补 圆弧插补 简单、有冲击 平滑、无冲击 灵活、可定制 路径可控 曲面运动 关键选择原则 1. 关节空间:计算快、无奇异点问题,优先选用 2. 笛卡尔空间:路径可控,但需做奇异点检测 3. 平滑度要求高 → S形曲线;要求不高 → 梯形曲线

1.5 实际工程中的选择建议

说了这么多,到底怎么选?我给大家一个简单的决策流程:

  1. 先看工艺要求:必须走直线吗?是 → 笛卡尔空间;否 → 关节空间
  2. 再看平滑度:有冲击要求吗?是 → S形或五次多项式;否 → 梯形或三次多项式
  3. 最后看算力:控制器性能够吗?不够 → 梯形曲线;够 → 随意

我的个人习惯:做原型机时先用梯形曲线快速验证功能,等稳定后再换成S形曲线优化性能。这样调试效率最高。

好了,这一章的内容就到这里。轨迹规划是机器人控制的基石,你把这些概念吃透了,后面学力矩模式下的轨迹跟踪就会轻松很多。

可可精品资料库