坐标系基础:机器人基坐标系、工具坐标系、用户坐标系、相机坐标系、像素坐标系、世界坐标系

做手眼标定,说白了就是搞清楚「机器人的手」和「相机的眼」之间到底是个什么位置关系。而这一切的起点,就是坐标系。

我刚开始接触这个领域时,觉得坐标系这东西太基础了,不就是几个箭头嘛。结果第一次做标定,数据怎么都对不上,折腾了两天才发现——我把工具坐标系和用户坐标系搞混了。嗯,从那以后我再也不敢小看坐标系了。

机器人基坐标系(Base Frame)

这是机器人的「根」。所有关节的运动,最终都要换算到这个坐标系下来理解。

  • 位置:通常固定在机器人底座中心,Z轴竖直向上
  • 作用:描述机器人末端在空间中的绝对位置
  • 特点:一旦安装好,这个坐标系就固定了,不会随机器人运动而改变

我个人习惯:在调试阶段,先把所有点位都记录在基坐标系下。这样即使后面换了工具或工件,也能快速回溯问题。

工具坐标系(Tool Frame)

你想想看,机器人末端装了个焊枪,或者装了个夹爪。那「末端」到底指哪里?是法兰盘中心?还是焊枪尖?

工具坐标系就是干这个用的。它定义在机器人末端执行器上,通常把原点设在工具的工作点(TCP,Tool Center Point)。

避坑指南:我曾经遇到过一台机器人,TCP标定差了2毫米。结果焊接轨迹全偏了,焊出来的工件全是废品。后来我养成了一个习惯——每次换工具,必须重新标定TCP,哪怕只是换了个螺丝。

标定TCP的方法有很多,最常用的是「四点法」:让机器人以四种不同的姿态,让工具尖端触碰同一个固定点。通过这四组数据,就能算出TCP相对于法兰盘的位置。

用户坐标系(User Frame)

这个坐标系,说白了就是「方便你干活」的坐标系。

比如你有个工作台,台面是斜的。如果你用基坐标系去编程,每个点位都要算半天。但如果你在台面上定义一个用户坐标系,让Z轴垂直于台面,那编程就简单多了——直接沿着台面走就行。

坐标系 典型应用场景
基坐标系 全局路径规划、多机器人协同
工具坐标系 焊接、涂胶、抓取
用户坐标系 工作台加工、传送带跟踪

相机坐标系(Camera Frame)

相机坐标系是视觉系统的「本地坐标系」。它的原点在相机光心,Z轴沿着光轴方向指向场景。

这里有个容易混淆的点:相机坐标系是三维的,而像素坐标系是二维的。从三维到二维,中间有个投影变换。

注意:相机内参标定不准确,后面所有的手眼标定结果都是错的。我见过太多人花大量时间调手眼标定算法,结果发现是内参出了问题。先标内参,再标外参,这个顺序不能乱。

像素坐标系(Pixel Frame)

这就是你看到的图像。原点在图像左上角,u轴向右,v轴向下。

像素坐标系和相机坐标系之间的转换,靠的是相机内参矩阵:

// 相机内参矩阵示例
// fx, fy 是焦距(像素单位)
// cx, cy 是主点坐标
[ fx   0   cx ]
[  0  fy   cy ]
[  0   0    1 ]

为什么会有这个矩阵?因为相机把三维世界投影到二维图像上时,会丢失深度信息。而内参矩阵就是描述这个投影过程的数学模型。

世界坐标系(World Frame)

世界坐标系是一个「绝对参考系」。你可以把它定义在任何地方——比如车间的地面中心,或者某个固定柱子的角落。

在实际项目中,世界坐标系通常和机器人基坐标系重合。但如果你有多个机器人,或者有移动平台,那就需要一个独立的世界坐标系来统一所有设备的位置。

我建议:在项目开始时,先花半小时把世界坐标系定好。别嫌麻烦,后面能省你三天时间。

坐标系之间的变换关系

搞清楚了每个坐标系是什么,接下来就是它们之间的变换。说白了,就是从一个坐标系到另一个坐标系的平移和旋转。

变换矩阵是4x4的齐次矩阵:

// 齐次变换矩阵
[ R   t ]
[ 0   1 ]

// 其中 R 是3x3旋转矩阵
// t 是3x1平移向量

举个例子:从相机坐标系到机器人基坐标系的变换,就是我们手眼标定最终要求的东西。

知识体系总览

下面这张图,是我自己总结的坐标系关系图。你看一眼就能明白整个体系是怎么串起来的:

坐标系关系总览 世界坐标系 机器人基坐标系 工具坐标系 用户坐标系 相机坐标系 像素坐标系 固定安装 外参标定 TCP标定 用户定义 内参投影 手眼标定 核心思路:所有坐标系最终都要统一到机器人基坐标系下 手眼标定就是求解「相机坐标系 → 机器人基坐标系」的变换矩阵

实际项目中的坐标系选择策略

说了这么多理论,来点实际的。我在做项目时,一般按这个流程来:

  1. 先定世界坐标系:选一个稳定、好测量的位置
  2. 标定机器人基坐标系:用激光跟踪仪或标准块确认
  3. 标定工具坐标系:四点法或六点法,精度要求高就用六点法
  4. 定义用户坐标系:根据工件位置,三点法搞定
  5. 标定相机内参:棋盘格标定板,拍20张以上
  6. 手眼标定:求解相机到基坐标系的变换

一个小技巧:标定过程中,每一步都记录下变换矩阵。万一后面发现数据不对,可以回溯到某一步重新标,不用从头再来。

坐标系这东西,看着简单,但实际用起来坑不少。我见过有人把工具坐标系和用户坐标系搞反,结果机器人撞了工件。也见过有人相机内参没标好,手眼标定怎么算都不收敛。

嗯,说到底,坐标系就是一套「定位语言」。你把这个语言搞通了,手眼标定就成功了一半。

专注资料整理