GITHUB完整系列:https://github.com/Lanqingsong/industrial-machine-vision-100-questions

目录


前言 什么是手眼标定

很多机器人视觉项目都会遇到相机已经准确找到了目标,机器人为什么还是可能抓偏?视觉算法在图像里把目标框出来了,甚至已经算出了三维点;但机器人真正去抓的时候,夹爪却落在旁边。这个时候问题通常不在“有没有看见目标”,而在“视觉坐标能不能正确交给机器人执行”。

手眼标定要解决的,就是这件事。

它不是为了让相机看得更清楚,也不是相机内参标定的另一个名字。手眼标定真正建立的是:相机坐标系和机器人坐标系之间的刚体变换关系

请添加图片描述

图 0 手眼标定:把视觉测量结果接到机器人执行空间


1. 相机看准了,机器人为什么还会抓偏

在工业视觉里,前面的很多工作都在解决“看”的问题:相机选型、镜头选型、光源布置、图像清晰度、目标检测、缺陷识别、三维恢复。

但机器人视觉引导还多了一步:机器人要动。

抓取、装配、放置、涂胶、焊接,这些动作都需要机器人控制系统知道目标在自己的坐标系里位于哪里。视觉系统输出的结果如果还停留在图像坐标或相机坐标里,机器人并不能直接拿来执行。
请添加图片描述

图 1 相机看准目标,但机器人执行点发生偏移

图中黄色点可以理解为视觉系统识别出来的目标位置,红色点是机器人最终执行到的位置。目标没有变,机器人却抓偏了,说明相机与机器人之间的坐标关系没有建立好,或者已经出现了误差。

这就是手眼标定的重要性。

视觉负责测量,机器人负责动作。两边描述的是同一个工件,但它们使用的是两套坐标系。手眼标定要做的,就是在这两套坐标系之间搭一座桥。


2. 同一个目标,为什么会有两组坐标

同一个物理目标,在相机坐标系里可以表示为 Pc,在机器人基座坐标系里可以表示为 Pb

这两个坐标数值通常不一样,因为它们的原点不同,坐标轴方向也不同。相机坐标系通常以相机光心为原点,机器人基座坐标系则以机器人基座为参考。

只要相机和机器人安装关系稳定,两套坐标之间就可以用一个固定的刚体变换表示。这个变换包含旋转 R 和平移 t

P b = R P c + t \mathbf{P}_b = R \mathbf{P}_c + t Pb=RPc+t

其中,旋转 R 负责把坐标轴方向对齐,平移 t 负责把两个坐标系的原点接起来。
请添加图片描述

图 2 同一个目标在相机坐标系和机器人坐标系中有不同表达

这里要分清一个容易混淆的概念:相机内参标定不等于手眼标定

相机内参回答的是“空间点怎样投影到图像上”,主要包括 fx、fy、cx、cy 和畸变参数。
手眼标定回答的是“相机坐标怎样转换到机器人坐标”,它处理的是相机与机器人之间的外部刚体关系。

内参不准,像素还原空间点会出问题。
手眼关系不准,空间点送到机器人那边会整体跑偏。

这两件事都重要,但它们解决的问题不同。


3. Eye-In-Hand 和 Eye-To-Hand 的区别

手眼系统常见两种安装方式:Eye-In-HandEye-To-Hand

判断它们最简单的方法,是看相机是否跟着机器人运动。

请添加图片描述

图 3 Eye-In-Hand 与 Eye-To-Hand 的安装差异

3.1 Eye-In-Hand:相机装在机器人末端

Eye-In-Hand 指相机安装在机器人末端,机器人一动,相机也跟着换位置、换角度。

这种方式的优点是视角灵活。目标分散、姿态变化大、需要靠近观察局部细节、深腔或者小特征时,末端相机可以主动靠近目标。

它的代价也很直接:

  • 相机和线缆会增加末端负载;
  • 机器人运动会带来振动;
  • 布线、防碰撞和维护更敏感;
  • 相机视野会随着机器人姿态变化。

3.2 Eye-To-Hand:相机固定在外部

Eye-To-Hand 指相机固定在工作站外部,机器人在相机视野中运动。

这种方式的优点是安装和成像更稳定。相机不跟着机械臂运动,布线、维护和光源布置通常更简单。如果一个视野能覆盖整个作业区域,它很适合固定工位定位、分拣、传送带抓取等任务。

它的限制主要来自固定视角:

  • 容易被机器人或工件遮挡;
  • 深腔或局部小特征可能看不清;
  • 目标超出视野后无法主动靠近;
  • 对相机安装位置和视野规划要求更高。

两种结构都需要手眼标定,只是未知变换所在的坐标链不同。


4. 为什么手眼标定要采集很多个姿态

手眼标定不能只拍一张标定板,也不能只让机器人动一次。

它需要多组机器人姿态和对应图像,共同把未知变换约束出来。这里不只是数量问题,更重要的是姿态分布是否充分。

请添加图片描述

图 4 手眼标定需要多组方向变化充分的姿态

如果机器人虽然采了很多个点,但每次姿态变化都很小,或者旋转方向都差不多,那么这些数据提供的信息会高度重复。看起来样本很多,实际约束并不充分。

工程上通常会采集十组以上姿态,但不能死记一个数量。更关键的是:

  • 平移方向要有变化;
  • 旋转轴不能都差不多;
  • 姿态角度要有足够变化;
  • 标定板要始终清晰可见;
  • 角点不能模糊,也不能跑出视野;
  • 每张图像要和对应机器人位姿严格关联。

数据质量在采集阶段已经决定了大半。如果姿态退化,后面换不同求解算法也很难补回缺失的几何信息。


5. AX = XB 是怎样来的

很多资料讲手眼标定时,会直接给出一个公式:

A X = X B AX = XB AX=XB

但这个公式最好不要死记。先理解它从哪里来,后面排查问题会更清楚。

以 Eye-In-Hand 为例,相机刚性固定在机器人末端。机器人从姿态一运动到姿态二,末端发生了一段相对运动,这段运动记作 A。同时,相机前后两次观测标定板,标定板在相机坐标系中的相对变化记作 B

相机和机器人末端之间的固定安装关系,就是未知变换 X

在这里插入图片描述

图 5 从两条运动链得到 AX = XB

可以把它理解成两条路径:

  • 先走机器人侧运动 A,再经过手眼关系 X
  • 先经过手眼关系 X,再走相机观测到的变化 B

两条路径描述的是同一次运动前后、同一个相机与末端关系,所以最后必须闭合到同一个空间关系。于是就得到:

A X = X B A X = X B AX=XB

单独一组运动不足以求稳。每增加一组方向不同的运动,就多一组约束。前面采集的多组姿态,最后就是通过一组组 AB 共同把未知的旋转和平移解出来。

这一段真正要关注的不是某个求解器名字,而是三件事:

  1. AB 的定义方向要一致;
  2. 图像和机器人位姿必须一一对应;
  3. 采样运动不能退化。

如果链路方向写反,或者图像和位姿错帧,求解器仍然可能给出一个数字,但这个数字无法把机器人带到正确位置。


6. 一次完整的手眼标定流程

实际项目里,手眼标定可以拆成四步:

  1. 采集姿态;
  2. 图像与位姿关联;
  3. 求解手眼变换;
  4. 用额外样本验证。

在这里插入图片描述

图 6 手眼标定从采集到验证的完整流程

采集阶段,机器人每到一个新姿态,要先稳定停下,再拍摄标定板,同时记录这一时刻的机器人末端或法兰位姿。

图像和机器人位姿必须严格对应。不能拿第六张图去配第五次机器人位姿,也不能在机器人还没停稳时拍照。

图像关联完成后,从每张图里提取棋盘格角点或圆点特征,计算标定板相对相机的姿态。机器人侧有一组位姿,相机侧也有一组位姿,接下来才能构造多组 AB,求出 X

最后一步一定要做额外验证。可以使用没有参与求解的姿态,或者让机器人去触碰已知校验点,看手眼关系能不能在新位置上继续成立。

只看软件返回“求解成功”,并不代表标定已经可靠。没有经过真实空间验证,手眼标定还不能算结束。


7. 重投影误差小,不代表机器人一定抓得准

手眼标定完成以后,很多软件会给出重投影误差。这个数如果很小,看起来会让人很放心。

但这里要注意:重投影误差小,不自动代表机器人末端定位误差小。

在这里插入图片描述

图 7 重投影误差和末端定位误差不是同一个指标

重投影误差检查的是标定板角点按照当前模型投回图像后,离实际检测到的角点还有多少像素。它更偏向视觉链内部的拟合质量。

末端定位误差检查的是机器人按照视觉结果真正运动后,末端离目标差了多少毫米。这里会叠加更多因素:

  • 机器人重复精度;
  • 工具坐标误差;
  • 手眼变换误差;
  • 支架刚性;
  • 运动执行误差;
  • 图像与机器人位姿同步误差。

有些问题发生在图像之后,重投影误差根本看不到。

所以验收时要分两层:

  • 重投影误差用于检查相机标定和特征拟合;
  • 末端定位误差用于判断系统能不能完成实际任务。

粗分拣允许的偏差,和精密插装允许的偏差不是一个量级。最终合格标准必须由任务要求决定。


8. 手眼标定的误差从哪里进入

手眼标定出问题时,不要一开始就怀疑求解公式。现场很多问题在进入求解器之前就已经发生了。

在这里插入图片描述

图 8 误差会从机器人、视觉、标定板和流程管理进入系统

常见误差来源可以分成四类。

8.1 机器人本体误差

包括机器人重复精度、关节回差、停止振动、工具中心点(TCP)定义错误等。

如果机器人还没停稳就拍照,记录到的位姿和实际拍照时的状态就可能不一致。

8.2 视觉链误差

包括相机内参不准、畸变补偿不足、焦点变化、角点提取噪声等。

这些误差会影响标定板相对相机的姿态估计。

8.3 标定对象误差

标定板本身也会出问题。

比如普通打印纸贴在不平的板上,看起来是棋盘格,实际已经翘曲;标定板固定不牢,每次运动都有轻微变化,算法却还把它当成刚体。

这会直接破坏标定前提。

8.4 流程管理误差

包括图像与位姿不同步、姿态编号对应错误、异常帧没有剔除等。

这类问题最麻烦,因为数据格式看起来都对,软件也未必报错,但几何关系已经错了。

排查手眼问题时,可以先按这个顺序检查:

  1. 机器人有没有停稳;
  2. 图像和位姿有没有配对;
  3. 标定板是否可靠;
  4. 姿态分布是否充分;
  5. 异常帧是否剔除;
  6. 最后再看求解器和参数设置。

9. 从像素点到机器人抓取位姿

最后把整条应用链路串起来。

视觉引导机器人抓取,不是从图像坐标直接跳到机器人动作。它中间要经过多个坐标转换环节。

在这里插入图片描述

图 9 从像素坐标到机器人抓取位姿的完整链路

起点是图像中的像素坐标 (u, v)。它只告诉我们目标落在图像哪里。

结合相机内参和目标深度,或者结合已知工作平面,才能把这个像素还原成相机坐标系中的三维点 P_c

接下来利用手眼变换,把 P_c 转换到机器人基座坐标系,得到 P_b

P b = T b c P c \mathbf{P}_b = T_{bc}\mathbf{P}_c Pb=TbcPc

走到这里,机器人终于知道目标在自己的空间里位于哪里。

但还没结束。得到空间点以后,还要叠加工具中心点偏置,确定夹爪朝向、接近方向和抓取姿态,形成完整的工具目标位姿。再经过碰撞检查和安全路径规划,机器人才能执行。

完整链路可以理解为:

像素坐标 (u, v)
→ 相机内参与深度
→ 相机坐标 Pc
→ 手眼变换
→ 机器人基座坐标 Pb
→ 工具中心点与夹爪姿态
→ 安全路径规划
→ 执行抓取

任何一段关系出错,最后都可能表现成“机器人抓不准”。


10. 结尾:手眼标定是视觉和机器人之间的坐标桥梁

手眼标定解决的是相机坐标与机器人坐标之间的刚体变换关系。

Eye-in-Hand 的相机跟着机器人运动,视角灵活,适合目标分散、局部细节、姿态变化大的场景;代价是布线、负载、振动和碰撞风险更敏感。

Eye-to-Hand 的相机固定在外部,成像和布置更稳定,适合稳定作业区和较快节拍;代价是视角固定,容易受到遮挡、深腔和局部细节尺寸的限制。

标定时要采集多组方向变化充分的姿态,再利用两条运动链建立 AX = XB。采集之后要核对图像与位姿的对应关系,并用额外姿态或真实末端误差验证结果。

最后记住两层评价:

图像里的拟合质量,看重投影误差;
机器人能不能完成任务,看末端定位误差。

如果机器人抓偏,不要只说“再标定一次”。更稳的排查方式,是沿着这条链往回看:

像素和深度是否可靠?
相机内参和畸变是否正确?
图像与机器人位姿是否同步?
姿态采样是否充分?
手眼变换方向是否一致?
工具中心点有没有定义好?
末端误差是否满足任务要求?

手眼标定的价值就在这里:它把相机看到的空间,接到机器人能够执行的空间。这个关系建立稳了,视觉结果才真正有机会变成可靠的机器人动作。


文章标签

机器视觉 工业视觉 手眼标定 机器人视觉引导 Eye-in-Hand Eye-to-Hand AX=XB 相机标定

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐