坐标系与变换:机器人基坐标系、工具坐标系、相机坐标系、标定板坐标系,齐次变换矩阵的物理意义
做手眼标定,说白了就是搞清楚几个坐标系之间怎么互相换算。我见过不少新手,一上来就急着跑标定程序,结果数据一团糟,根本不知道问题出在哪。其实,标定之前先把坐标系理清楚,后面能省一大半调试时间。
今天我们就来聊聊这四个核心坐标系,以及那个贯穿始终的数学工具——齐次变换矩阵。嗯,这部分是基础,但也是后面所有误差分析的根基。
一、四个核心坐标系
手眼标定里,我们打交道最多的就是这四个坐标系。它们各自有各自的“老家”,搞混了,标定结果肯定不对。
| 坐标系 | 符号 | 原点位置 | 作用 |
|---|---|---|---|
| 机器人基坐标系 | 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],保持齐次性。
避坑指南: 我曾经在读取机器人位姿时,发现平移向量单位是毫米,而相机标定得到的单位是米。这种单位不统一的问题,如果不提前检查,标定结果会完全不可用。记得,所有数据进入标定算法前,先统一单位。
四、知识体系结构图
下面这张图,把四个坐标系和它们之间的变换关系串起来了。你可以把它当作一张“地图”,标定的时候随时回来看看。
五、齐次变换矩阵的分解与合成
在实际调试中,我们经常需要把一个齐次变换矩阵拆开来看,或者把旋转和平移拼回去。HALCON里提供了现成的算子,但我建议你理解背后的原理。
举个例子,从矩阵里提取平移向量很简单,就是取第4列的前3个元素。但旋转矩阵的分解就稍微复杂一点,它可以用欧拉角、轴角或四元数表示。我个人习惯用欧拉角,因为直观,但要注意万向锁的问题。
注意: 当你从机器人控制器读取位姿时,一定要确认它用的是哪种旋转表示方式。我曾经遇到过一个项目,机器人用的是ZYX欧拉角,而HALCON默认用的是XYZ欧拉角,结果标定出来的矩阵怎么都对不上。后来花了半天才排查出来。
六、总结
坐标系和齐次变换矩阵,是手眼标定的“语言”。你只有掌握了这门语言,才能跟机器人和相机顺畅沟通。记住:
- 每个坐标系都有明确的物理意义,不要混淆。
- 齐次变换矩阵把旋转和平移统一起来,方便计算。
- 标定的本质,就是求解那个闭环等式中的未知矩阵。
把这些基础打牢了,后面讲误差分析的时候,你才能一眼看出问题出在哪个环节。