4、手眼标定核心概念:眼在手上(Eye-in-Hand)与眼在手外(Eye-to-Hand)
手眼标定是机器人视觉引导系统中连接“感知坐标系”与“操作坐标系”的关键桥梁。无论是3D视觉引导抓取、装配,还是焊接、打磨,系统都必须回答一个根本问题:相机看到的物体位置,在机器人基坐标系下到底在哪里?这个问题的答案,直接决定了机器人能否准确地将工具移动到目标点。本章将深入剖析两种主流手眼配置——眼在手上(Eye-in-Hand,简称EIH)与眼在手外(Eye-to-Hand,简称ETH)——的定义、核心差异、适用场景,并推导其标定方程,帮助读者建立清晰、可工程化的坐标系变换思维。
上图直观地展示了两者的核心差异:在眼在手上配置中,相机“跟随”机械臂末端运动,标定板固定在工作空间;而在眼在手外配置中,相机固定安装,标定板则安装在机械臂末端。这种物理安装方式的不同,直接导致了标定方程形式、求解目标以及应用场景的显著区别。下面我们将逐一展开。
4.1 核心原理:坐标系变换的本质
手眼标定的本质是求解一个齐次变换矩阵,该矩阵将一个坐标系中的点坐标转换到另一个坐标系。在机器人视觉引导中,至少涉及四个关键坐标系:机器人基坐标系(Base,记为B)、机械臂末端坐标系(End,记为E)、相机坐标系(Camera,记为C)以及标定板/工件坐标系(Object,记为O)。手眼标定的目标,就是通过一系列已知的机械臂运动(T_ij)和相机观测(M_ij),解算出相机与机械臂末端(EIH)或相机与机器人基座(ETH)之间的固定变换关系。
核心公式:对于眼在手上配置,设 X = T_Cam2End(相机坐标系到末端坐标系的变换),则标定方程可写为 T_ij · X = X · M_ij,即经典的 AX = XB 问题。对于眼在手外配置,设 Z = T_Cam2Base(相机坐标系到基坐标系的变换),则方程为 T_ij · Z = Z · M_ij,即 AX = ZB 问题。其中 T_ij 是机械臂从位姿 i 到位姿 j 的齐次变换矩阵,M_ij 是相机观测到的标定板从位姿 i 到位姿 j 的齐次变换矩阵。
理解这个方程的关键在于:机械臂的运动信息(T_ij)来自机器人控制器,而视觉观测信息(M_ij)来自相机对固定标定板的位姿估计。通过多次改变机械臂姿态并记录对应的视觉观测,我们可以构建足够多的方程来求解未知的 X 或 Z。值得注意的是,这里的“标定板”可以是棋盘格、圆点阵列或任何具有明确特征点的平面靶标,其作用是为相机提供已知的几何参考。
4.2 判断方法与操作流程:如何选择与实施
在实际项目中,选择眼在手上还是眼在手外,需要根据任务需求、现场布局和精度要求综合判断。以下是具体的判断维度和实施流程。
| 判断维度 | 眼在手上(EIH) | 眼在手外(ETH) |
|---|---|---|
| 视野范围 | 视野随机械臂移动,可“走近”观察,适合大范围或遮挡多的场景 | 视野固定,适合工作区域集中、目标位置相对固定的场景 |
| 精度影响 | 相机离目标近,分辨率高,但机械臂振动可能影响成像 | 相机离目标远,分辨率相对低,但成像稳定 |
| 标定复杂度 | 标定板固定,操作相对简单,但需保证标定板在视野内 | 标定板装在末端,需确保运动轨迹不超出视野 |
| 典型应用 | 移动抓取、装配、焊接、喷涂等需要“跟随”目标的场景 | 固定工位上下料、码垛、分拣、检测等场景 |
操作流程(以眼在手上为例):
- 固定标定板:将标定板稳固地放置在工作空间内,确保其在机械臂运动过程中始终可见。
- 记录机械臂位姿:手动或自动控制机械臂运动到至少 15~20 个不同姿态,记录每个姿态下的末端位姿(T_End2Base)。
- 采集图像并估计标定板位姿:在每个姿态下,使用相机拍摄标定板图像,通过图像处理算法(如OpenCV的solvePnP)估计标定板在相机坐标系下的位姿(T_Obj2Cam)。
- 构建方程并求解:利用相邻两组数据计算 T_ij 和 M_ij,代入 AX = XB 方程,使用Tsai-Lenz或Park-Martin等经典算法求解 X。
- 验证精度:将求解出的 X 代入其他未参与计算的位姿数据,计算重投影误差或坐标变换误差,确保标定精度满足项目要求。
经验提醒:在采集数据时,应尽量让机械臂的姿态变化多样化,避免所有姿态都集中在同一平面或同一旋转方向。姿态差异越大,方程组的条件数越好,求解结果越稳定。通常建议旋转角度差异超过30度,平移差异超过50mm。
4.3 案例拆解:3D视觉引导的PCB板精准插装
下面通过一个实际项目案例,展示眼在手上配置在3D视觉引导插装任务中的应用与标定实施细节。
项目背景与约束:某电子制造工厂需要实现异形元件(如连接器、电解电容)的自动插装。来料位于料盘内,位置存在±2mm的随机偏差,且料盘尺寸较大(400mm×300mm),机械臂需要从不同角度接近取料点。由于元件引脚脆弱,要求视觉定位精度优于±0.3mm。现场无法安装固定相机(因为料盘会移动),因此选择眼在手上(EIH)配置,将3D相机安装在机械臂末端。
初始现象与目标:未标定时,机械臂根据示教位置抓取,成功率仅为60%,经常因位置偏差导致引脚弯曲。目标是通过手眼标定,使视觉系统引导机械臂准确抓取任意位置的元件,抓取成功率提升至99%以上。
关键输入数据与参数:
- 机器人:六轴工业机器人,重复定位精度±0.02mm。
- 相机:结构光3D相机,分辨率1280×1024,Z轴精度±0.05mm@300mm。
- 标定板:100mm×100mm陶瓷棋盘格,方格边长5mm,精度±0.01mm。
- 采集数据:共采集25组机械臂位姿与对应的标定板图像。
分析判断过程:首先,我们使用OpenCV的calibrateCamera函数对相机内参进行标定,得到焦距、主点及畸变系数。然后,对于每组数据,利用solvePnP求解标定板在相机坐标系下的位姿。接着,从机器人控制器读取对应的末端位姿。最后,将25组数据分为两组:20组用于求解,5组用于验证。使用Tsai-Lenz算法求解得到相机到末端的变换矩阵X。
实际操作步骤与结果:
// 伪代码示例:求解AX=XB
for i in range(20):
A_i = inv(T_end2base[i]) * T_end2base[i+1] // 机械臂运动
B_i = inv(T_obj2cam[i]) * T_obj2cam[i+1] // 标定板运动
// 构建线性方程组,求解旋转部分R_X
// 再求解平移部分t_X
X = solve_ax_xb(A_list, B_list)
// 验证:计算5组验证数据的重投影误差
error = compute_reprojection_error(X, validation_data)
print("平均重投影误差: 0.18mm")
标定完成后,我们在5组验证数据上计算了重投影误差,平均误差为0.18mm,最大误差0.25mm,满足±0.3mm的精度要求。实际抓取测试中,连续抓取200个元件,成功198个,成功率99%,且未发生引脚弯曲。相比标定前,抓取成功率提升了39个百分点。
风险与代价:标定过程耗时约40分钟,且需要停机进行。此外,由于相机随机械臂运动,线缆管理需要特别注意,避免在运动过程中拉扯相机线缆导致标定结果失效。后期我们增加了线缆拖链和固定支架,有效规避了该风险。
复盘经验:眼在手上配置的标定精度高度依赖于机械臂的绝对定位精度。如果机械臂存在较大的绝对定位误差,即使标定算法再精确,最终引导精度也会受限。因此,在项目初期应对机械臂进行绝对精度补偿,或选择重复定位精度高的机器人。
4.4 常见误区与总结复盘
在手眼标定的实施过程中,工程师常会遇到一些典型问题,以下是最常见的误区及应对策略。
误区一:忽略相机内参标定。手眼标定是外参标定,其输入是相机解算出的标定板位姿。如果相机内参(焦距、畸变)不准确,那么solvePnP解算出的位姿本身就存在偏差,后续的手眼标定结果必然不准确。务必先进行精确的内参标定,并定期校验。
误区二:数据采集姿态单一。如果机械臂的运动主要是平移,而旋转变化很小,那么方程组的约束不足,求解出的旋转矩阵X可能陷入局部最优或病态解。应确保姿态变化覆盖多个旋转轴。
误区三:标定板平面度不足。对于3D相机或高精度2D相机,标定板的平面度误差会直接影响位姿估计精度。建议使用陶瓷或玻璃基板,避免使用易变形的纸质标定板。
总结复盘:手眼标定的核心在于理解坐标系变换的闭环。无论是EIH还是ETH,其本质都是通过机械臂的运动信息与视觉观测信息之间的约束关系,求解出未知的固定变换。在实际工程中,选择哪种配置,不仅要看视野和精度,还要考虑现场布局、线缆管理、维护便利性等因素。下表总结了两种配置的最终适用建议:
| 场景特征 | 推荐配置 | 理由 |
|---|---|---|
| 目标物位置不固定,机械臂需主动搜索 | 眼在手上 | 相机可随动,视野灵活 |
| 工作区域固定,节拍要求高 | 眼在手外 | 无需移动相机,成像快,稳定性好 |
| 对Z轴高度测量精度要求极高 | 眼在手上 | 相机可近距离垂直观察,测量精度更高 |
| 现场粉尘大或相机易受损 | 眼在手外 | 相机远离运动部件,防护更简单 |
最后需要强调的是,标定不是一劳永逸的。机械臂碰撞、相机松动、温度变化都可能导致标定结果失效。建议在项目中增加定期校验机制,例如每班次开始前使用固定参考点进行快速验证,确保视觉引导系统的长期稳定性。