坐标系与变换:机器人基坐标系、工具坐标系、相机坐标系、标定板坐标系,齐次变换矩阵的物理意义

做手眼标定,说白了就是搞清楚几个坐标系之间怎么互相换算。我见过不少新手,一上来就急着跑标定程序,结果数据一团糟,根本不知道问题出在哪。其实,标定之前先把坐标系理清楚,后面能省一大半调试时间。

今天我们就来聊聊这四个核心坐标系,以及那个贯穿始终的数学工具——齐次变换矩阵。嗯,这部分是基础,但也是后面所有误差分析的根基。

一、四个核心坐标系

手眼标定里,我们打交道最多的就是这四个坐标系。它们各自有各自的“老家”,搞混了,标定结果肯定不对。

坐标系 符号 原点位置 作用
机器人基坐标系 Base 机器人底座固定点 全局参考,所有运动都基于它
工具坐标系 Tool 机器人末端法兰或工具中心点(TCP) 描述工具末端的位置和姿态
相机坐标系 Cam 相机光心 图像中看到的点,都转换到这个坐标系下
标定板坐标系 Cal 标定板左上角或中心 标定板上的特征点,坐标是已知的

我的习惯: 在项目一开始,我会画一张坐标系关系图,把每个坐标系的原点和轴向标清楚。别偷懒,这一步能帮你避免很多低级错误。

二、坐标系之间的变换关系

标定的本质,就是求解这些坐标系之间的变换矩阵。我举个例子,你想想看:

  • Base → Tool: 机器人正运动学给出的变换,每个关节角度对应一个唯一的 Base_T_Tool。
  • Cam → Cal: 相机拍到标定板,通过PnP算法解出的外参,就是 Cam_T_Cal。
  • Tool → Cam: 这就是我们标定要解的“手眼矩阵”,记作 Tool_T_Cam。

它们之间的关系,可以用一个闭环等式表示:

Base_T_Tool * Tool_T_Cam = Base_T_Cal * (Cam_T_Cal)^(-1)

这个等式,就是手眼标定的核心。我在项目中遇到过有人把矩阵乘法的顺序搞反了,结果标定出来的误差大得离谱。嗯,这里要注意,矩阵乘法不满足交换律,顺序错了,结果全错。

三、齐次变换矩阵的物理意义

齐次变换矩阵,说白了就是一个4x4的方阵,它把旋转和平移打包在一起。你想想看,如果没有它,我们每次变换都要分别处理旋转矩阵和平移向量,多麻烦。

它的标准形式是:

| R11 R12 R13 Tx |
| R21 R22 R23 Ty |
| R31 R32 R33 Tz |
|  0   0   0   1  |

其中:

  • 左上角3x3: 旋转矩阵,描述姿态。
  • 右上角3x1: 平移向量,描述位置。
  • 最后一行: 固定为 [0, 0, 0, 1],保持齐次性。

避坑指南: 我曾经在读取机器人位姿时,发现平移向量单位是毫米,而相机标定得到的单位是米。这种单位不统一的问题,如果不提前检查,标定结果会完全不可用。记得,所有数据进入标定算法前,先统一单位。

四、知识体系结构图

下面这张图,把四个坐标系和它们之间的变换关系串起来了。你可以把它当作一张“地图”,标定的时候随时回来看看。

手眼标定坐标系与变换关系图 机器人基坐标系 Base 工具坐标系 Tool 相机坐标系 Cam 标定板坐标系 Cal Base_T_Tool 机器人正运动学 Tool_T_Cam 手眼矩阵(待求) Cam_T_Cal 相机外参(PnP解算) Base_T_Cal 间接计算得到 💡 核心闭环等式: Base_T_Tool * Tool_T_Cam = Base_T_Cal * (Cam_T_Cal)^(-1)

五、齐次变换矩阵的分解与合成

在实际调试中,我们经常需要把一个齐次变换矩阵拆开来看,或者把旋转和平移拼回去。HALCON里提供了现成的算子,但我建议你理解背后的原理。

举个例子,从矩阵里提取平移向量很简单,就是取第4列的前3个元素。但旋转矩阵的分解就稍微复杂一点,它可以用欧拉角、轴角或四元数表示。我个人习惯用欧拉角,因为直观,但要注意万向锁的问题。

注意: 当你从机器人控制器读取位姿时,一定要确认它用的是哪种旋转表示方式。我曾经遇到过一个项目,机器人用的是ZYX欧拉角,而HALCON默认用的是XYZ欧拉角,结果标定出来的矩阵怎么都对不上。后来花了半天才排查出来。

六、总结

坐标系和齐次变换矩阵,是手眼标定的“语言”。你只有掌握了这门语言,才能跟机器人和相机顺畅沟通。记住:

  • 每个坐标系都有明确的物理意义,不要混淆。
  • 齐次变换矩阵把旋转和平移统一起来,方便计算。
  • 标定的本质,就是求解那个闭环等式中的未知矩阵。

把这些基础打牢了,后面讲误差分析的时候,你才能一眼看出问题出在哪个环节。