4. 手眼标定基础:眼在手上(Eye-in-Hand)与眼在手外(Eye-to-Hand)概念

手眼标定,说白了就是解决一个核心问题:机器人怎么知道相机看到的物体在它自己的坐标系里到底在哪儿?

我刚开始接触这个领域时,觉得这问题挺绕的。相机拍到了杯子,机器人要去抓,但相机看到的坐标和机器人手臂的坐标是两套系统。你得把它们对齐。这个对齐的过程,就是手眼标定。

根据相机安装位置的不同,我们分成两种经典模式:眼在手上(Eye-in-Hand)和眼在手外(Eye-to-Hand)。这两种方式,我在实际项目里都踩过坑,今天跟你好好聊聊。

4.1 眼在手上(Eye-in-Hand)

什么叫眼在手上?相机固定在机器人末端(法兰盘)上,跟着机械臂一起动。就像给机器人的手装了一只眼睛。

核心特点:相机坐标系与机器人末端坐标系之间的变换关系是固定的,但相机与机器人基座之间的变换关系会随着机械臂运动而变化。

这种配置下,我们要求解的是:相机坐标系 {C} 到机器人末端坐标系 {E} 的变换矩阵,记作 X = TC→E。

我记得第一次做 Eye-in-Hand 项目时,是在一个汽车零部件装配线上。当时需要引导机器人抓取传送带上的工件。相机装在机械臂末端,跟着手臂一起移动到工件上方拍照。嗯,这里有个关键点——因为相机在动,所以每次拍照时,相机看到的标定板位置其实也在变。

数学上,Eye-in-Hand 的标定方程长这样:

A · X = X · B

其中:
A = T_C1→C2  (相机从位置1到位置2的变换)
B = T_E1→E2  (机器人末端从位置1到位置2的变换)
X = T_C→E    (我们要求的相机到末端的变换)

说白了,就是让机器人带着相机走几个不同的位姿,在每个位姿下拍标定板,同时记录机器人末端的位姿。然后通过解这个方程,算出 X。

我的经验:做 Eye-in-Hand 标定时,运动范围要尽量大。我见过有人只在小范围内动几下,结果解出来的 X 精度很差。建议让机械臂在视野范围内做大幅度的旋转和平移,至少 15-20 组不同位姿。

4.2 眼在手外(Eye-to-Hand)

眼在手外就更好理解了——相机固定安装在机器人外部,比如天花板上、支架上,或者工作台旁边。相机不动,看着机器人和工件。

核心特点:相机坐标系与机器人基座坐标系之间的变换关系是固定的,但相机与机器人末端之间的变换关系会随着机械臂运动而变化。

这种配置下,我们要求解的是:相机坐标系 {C} 到机器人基座坐标系 {B} 的变换矩阵,记作 Y = TC→B。

我曾经在一个码垛项目里用过 Eye-to-Hand。相机挂在机器人上方 2 米处,俯拍整个工作区域。机器人要去抓取箱子,相机告诉机器人箱子在图像里的位置,然后通过标定好的变换关系,换算成机器人基座坐标系下的坐标。

Eye-to-Hand 的标定方程是:

A · Y = Y · B

其中:
A = T_C1→C2  (相机从位置1到位置2的变换——注意这里相机不动,所以 A 其实是标定板移动引起的变换)
B = T_B1→B2  (机器人基座到末端的变换变化)
Y = T_C→B    (我们要求的相机到机器人基座的变换)

你可能会问:相机不动,A 怎么来的?其实 A 是通过标定板在不同位置被相机拍到,计算出的标定板位姿变化。标定板固定在机器人末端,跟着机械臂走。

避坑指南:我曾经犯过一个低级错误——Eye-to-Hand 标定时,把标定板放反了。标定板必须牢固固定在机器人末端,不能有丝毫松动。有一次我图省事,用双面胶粘了一下,结果标定过程中标定板歪了,标定结果完全不能用。后来我改用螺丝固定,再也没出过问题。

4.3 两种方式的对比

这两种方式没有的好坏,关键看应用场景。我整理了一个对比表,方便你快速决策:

对比维度 眼在手上(Eye-in-Hand) 眼在手外(Eye-to-Hand)
相机安装位置 固定在机器人末端 固定在外部支架/天花板
求解目标 相机 → 末端变换 (X) 相机 → 基座变换 (Y)
相机视野 随机械臂移动,视野变化 固定视野,覆盖工作区域
标定板位置 固定在工作台上 固定在机器人末端
典型应用 抓取、装配、焊接引导 码垛、分拣、大范围定位
精度影响因素 机器人末端定位精度 相机视野边缘畸变
标定复杂度 中等,需要机器人运动 中等,需要标定板随动

4.4 核心逻辑框架图

下面这张图帮你理清两种方式的逻辑关系。我画的时候特意把关键变换链标出来了,你一看就明白。

手眼标定核心逻辑框架 眼在手上(Eye-in-Hand) 相机 {C} 末端 {E} 基座 {B} 标定板 {P} X = ? 变化 变化 观测 眼在手外(Eye-to-Hand) 相机 {C} 基座 {B} 末端 {E} 标定板 {P} Y = ? 变化 变化 观测 关键区别: 眼在手上 → 求解相机到末端的固定变换;眼在手外 → 求解相机到基座的固定变换 眼在手上方程 A · X = X · B X = TC→E 眼在手外方程 A · Y = Y · B Y = TC→B

4.5 实际项目中的选择建议

说了这么多理论,到底怎么选?我根据实际项目经验,给你几个判断标准:

  • 精度要求高,视野范围小 → 选 Eye-in-Hand。相机离工件近,分辨率高,但需要机器人运动到目标位置附近才能拍照。
  • 大范围作业,需要全局视野 → 选 Eye-to-Hand。相机固定,一次拍全,但远处精度会下降。
  • 工件位置不确定,需要搜索 → 选 Eye-to-Hand。相机视野固定,可以快速定位工件大致位置。
  • 装配、焊接等精细操作 → 选 Eye-in-Hand。相机跟着工具走,可以实时补偿误差。

我的建议:如果你刚开始做手眼标定,建议先从 Eye-to-Hand 入手。为什么?因为相机固定,调试起来更直观。你看着相机画面,能直接判断标定板是否在视野内。Eye-in-Hand 需要同时考虑机器人运动和相机视野,调试难度稍高一些。