2. 坐标系与变换:全局坐标系、局部坐标系、齐次变换矩阵、坐标变换在轨迹生成中的作用

做机器人轨迹规划,说白了就是回答三个问题:我在哪?要去哪?怎么去? 而坐标系与变换,就是回答前两个问题的数学工具。

我记得刚入行那会儿,带我的老工程师跟我说过一句话:「搞不懂坐标系变换,你写的轨迹代码就是废纸一张。」当时我不太服气,直到有一次在产线上,我写的轨迹让机器人差点撞上夹具——嗯,从那以后我再也不敢轻视这个基础了。

2.1 全局坐标系 vs 局部坐标系

先说说这两个概念。你想想看,你站在车间里,指着天花板说「那个灯在东北方向3米处」——这就是全局坐标系。但如果你坐在机器人上,指着同一个灯说「那个灯在我左前方2米处」——这就是局部坐标系。

全局坐标系(World Frame):固定在地面或工作空间的一个参考系。所有物体的绝对位置都基于它来描述。我习惯把它叫做「上帝视角」——你站在外面看整个系统。

局部坐标系(Local Frame):附着在某个运动部件上的坐标系。比如机械臂的每个关节、末端执行器、甚至你抓取的工件,都有自己的局部坐标系。

我在项目中遇到过这样一个坑:一个六轴机器人抓取传送带上的工件,传送带一直在动。如果只用全局坐标系规划轨迹,每次工件位置变了都得重新计算。后来改用局部坐标系——把坐标系绑在传送带上,轨迹相对传送带固定,问题就简单多了。

核心原则:全局坐标系管「绝对位置」,局部坐标系管「相对关系」。两者配合使用,才能写出灵活、鲁棒的轨迹生成代码。

2.2 齐次变换矩阵

好,现在问题来了:怎么把一个点从局部坐标系转换到全局坐标系?或者反过来?

答案就是齐次变换矩阵。说白了,它是一个4×4的矩阵,同时包含了旋转和位移信息。

它的标准形式长这样:

| R11  R12  R13  tx |
| R21  R22  R23  ty |
| R31  R32  R33  tz |
|  0    0    0    1  |

左上角3×3是旋转矩阵R,右上角3×1是平移向量t。最后一行永远是[0 0 0 1]——这是齐次坐标的约定。

为什么叫「齐次」?因为我们在三维坐标(x,y,z)后面加了一个1,变成(x,y,z,1)。这样旋转和平移就能用一个矩阵乘法搞定,不用分开算。

我的小技巧:写代码时,我习惯把齐次变换矩阵拆成「旋转部分」和「平移部分」分别调试。先验证旋转对不对,再验证平移对不对。两个都对了,合起来基本没问题。

2.3 坐标变换在轨迹生成中的作用

这部分我直接说干货。坐标变换在轨迹生成中,主要干三件事:

  1. 统一参考系:传感器数据、机器人状态、目标位置,往往来自不同的坐标系。你得把它们变换到同一个坐标系下才能计算。
  2. 链式变换:机械臂从基座到末端,经过一系列关节。每个关节的变换矩阵连乘起来,就得到末端在全局坐标系下的位姿。这就是所谓的「正向运动学」。
  3. 轨迹插值:在全局坐标系下规划路径,然后变换到关节空间去执行。或者反过来,在关节空间规划,再变换到笛卡尔空间验证。

我曾经做过一个项目,需要在移动机器人底盘上装一个机械臂。底盘在动,机械臂也在动。轨迹规划必须在「底盘坐标系」和「全局坐标系」之间来回切换。那段时间我天天跟齐次变换矩阵打交道,闭着眼睛都能写出变换代码。

避坑指南:我曾经犯过一个低级错误——把变换矩阵的乘法顺序搞反了。记住:T_global_to_local = T_local_to_global^(-1),但矩阵求逆不是简单的转置,旋转部分转置,平移部分要重新算。别问我怎么知道的,问就是血泪教训。

2.4 知识体系结构图

下面这张图,是我自己总结的坐标系与变换的知识结构。你看一眼,心里就有谱了。

坐标系与变换知识体系 全局坐标系 固定参考系 绝对位置描述 上帝视角 局部坐标系 附着运动部件 相对位置描述 灵活可移动 齐次变换矩阵 4×4矩阵 旋转+平移 坐标转换工具 轨迹生成中的应用 统一参考系 | 链式变换 | 轨迹插值 全局 + 局部 + 变换 = 完整轨迹

2.5 实战中的坐标系选择策略

说了这么多理论,来点实际的。我总结了一套坐标系选择的「经验法则」:

场景 推荐坐标系 原因
固定工位操作 全局坐标系 工件位置固定,全局坐标一次标定终身使用
移动抓取 局部坐标系(工件坐标系) 工件在动,轨迹相对工件固定更简单
多机器人协作 全局坐标系为主,局部坐标系为辅 需要统一参考系避免碰撞,但每个机器人内部用局部坐标
视觉引导 相机坐标系 → 机器人基坐标系 先做手眼标定,把相机看到的位置变换到机器人坐标系
我的习惯:写轨迹生成代码时,我会在代码开头明确注释当前使用的是哪个坐标系。比如 // 以下轨迹在全局坐标系下规划。这样过了一个月回头看代码,自己还能看懂。

嗯,坐标系与变换这部分就讲到这里。记住一句话:坐标系选对了,轨迹生成就成功了一半。下一节我们聊轨迹插值的具体算法,到时候你会更深刻地体会到坐标系变换的重要性。


公众号:蓝海资料掘金营,微信deep3321