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

做3D视觉定位,说白了就是回答一个问题:“相机看到的物体,到底在机器人空间的哪个位置?”

要回答这个问题,绕不开坐标系。我见过不少新手,算法调得挺溜,一到现场联调就抓瞎——坐标对不上,位置偏得离谱。十有八九,是坐标系搞混了。

这一章,咱们就把五个核心坐标系掰开揉碎讲清楚。你想想看,坐标系就像地图上的不同参考系。同一个点,在不同地图上的坐标值完全不同。搞明白它们之间的变换关系,标定才算入了门。

2.1 世界坐标系(World Coordinate System)

世界坐标系,是整个场景的参考系。它不依附于任何设备,是一个固定的、全局的坐标系。

  • 作用:定义所有物体、机器人的位置。
  • 特点:一旦选定,不再移动。
  • 常见选法:车间地角、产线固定立柱、或者干脆和机器人基座标系重合。
我的习惯: 在项目现场,我通常把世界坐标系原点设在产线地角的一个固定基准点上。这样无论机器人怎么动、相机怎么挪,世界坐标始终不变,排查问题方便很多。

2.2 机器人基坐标系(Robot Base Coordinate System)

机器人基坐标系,是机器人自己的“家”。原点在机器人安装底座的中心,Z轴一般垂直向上。

机器人所有关节运动、末端位姿,最终都是相对于这个坐标系算出来的。你发给机器人的目标点,本质上就是基坐标系下的坐标。

坐标系 原点位置 Z轴方向 是否固定
世界坐标系 用户自定义(如地角) 用户定义 固定
机器人基坐标系 机器人底座中心 垂直向上 固定(相对机器人)
注意: 机器人基坐标系和世界坐标系,不一定重合。如果机器人安装位置有偏移,或者产线有多个机器人,就需要通过标定把两者关联起来。我曾经在一个双机器人协作项目里,就因为没标定好基坐标系关系,两个机器人差点“打架”。

2.3 工具坐标系(Tool Coordinate System, TCP)

工具坐标系,定义的是机器人末端执行器的位姿。它的原点叫TCP(Tool Center Point),也就是工具的有效工作点。

比如你装了一个焊枪,TCP就是焊丝末端;装了一个吸盘,TCP就是吸盘中心。机器人控制器的所有运动指令,最终都是控制TCP到达目标位置。

  • 为什么需要TCP标定? 因为工具是后装的,机器人出厂时只知道法兰盘的位置,不知道你装了什么工具。
  • 标定方法:常用“四点法”或“六点法”,让机器人以不同姿态触碰一个固定尖点,反算出TCP偏移。
核心概念: 工具坐标系 = 机器人法兰盘坐标系 + TCP偏移量 + 工具姿态。

2.4 用户坐标系(User Coordinate System)

用户坐标系,是用户为了方便编程而自定义的坐标系。它通常定义在工作台、夹具或工件上。

举个例子:你有一个倾斜的焊接夹具。如果直接在机器人基坐标系下编程,每个点的坐标都很奇怪,而且夹具一换位置,所有程序都得重写。

但如果你在夹具上定义一个用户坐标系,让Z轴垂直于夹具表面,编程就变得非常直观。而且夹具移动后,只需要重新标定用户坐标系,程序里的相对路径不用改。

坐标系 定义者 典型用途 是否可移动
用户坐标系 用户 工件定位、阵列编程 可重新定义
工具坐标系 用户 定义工具末端 随工具更换

2.5 相机坐标系(Camera Coordinate System)

相机坐标系,是3D视觉的“眼睛”。它的原点在相机光心,Z轴沿光轴方向指向场景。

相机看到的所有点云、图像,最初都是在这个坐标系下表达的。但机器人不认识相机坐标,它只认自己的基坐标或用户坐标。

所以,手眼标定的核心任务,就是求出相机坐标系到机器人坐标系的变换矩阵。

  • 眼在手上(Eye-in-Hand):相机装在机器人末端,随机器人移动。标定结果是相机到工具坐标系的变换。
  • 眼在手外(Eye-to-Hand):相机固定安装,不随机器人动。标定结果是相机到机器人基坐标系(或世界坐标系)的变换。
避坑指南: 我曾经遇到一个项目,相机标定精度很高,但抓取总是偏。排查了半天,发现是相机坐标系和机器人坐标系的Z轴方向定义不一致——一个向上为正,一个向下为正。这种“符号坑”最隐蔽,也最致命。

2.6 坐标系关系总览

这五个坐标系的关系,可以用一张图来概括。我建议你把它记在脑子里,每次做标定前都过一遍。

坐标系关系总览图 坐标系关系总览 世界坐标系 (全局参考) 机器人基坐标系 (机器人底座) 用户坐标系 (工件/夹具) 工具坐标系 (TCP) (末端执行器) 相机坐标系 (3D视觉) 标定 定义 运动学 手眼标定 眼在手上 说明: 实线箭头表示固定变换关系,虚线箭头表示可选关系(眼在手上)。所有坐标系最终都通过标定关联到世界坐标系。

2.7 坐标系变换的本质

搞清楚了五个坐标系,接下来就是它们之间的变换。说白了,就是求一个4x4的齐次变换矩阵。

一个点P,在坐标系A下的坐标是PA,在坐标系B下的坐标是PB。它们的关系是:

P_B = T_A_to_B * P_A

其中TA_to_B就是变换矩阵,包含旋转和平移。

在3D视觉标定中,我们最关心的就是这条变换链:

  1. 相机坐标系 → 工具坐标系(眼在手上标定)
  2. 工具坐标系 → 机器人基坐标系(机器人运动学)
  3. 机器人基坐标系 → 世界坐标系(机器人安装标定)
  4. 或者:相机坐标系 → 世界坐标系(眼在手外标定)
一句话总结: 3D视觉定位,就是沿着这条变换链,把相机看到的点,一步步“翻译”成机器人能理解的坐标。