4、手眼标定基础:眼在手上与眼在手外的标定原理、标定流程、常用标定板与工具(如OpenCV、MATLAB)
手眼标定是机器人视觉系统部署中最关键、也最容易被忽视的环节。它解决的是“相机看到的坐标”与“机器人手臂运动的坐标”之间的数学映射问题。无论是抓取、装配还是焊接,如果手眼关系标定不准,后续的视觉算法精度再高也无法转化为实际的机器人运动精度。本章将系统讲解眼在手上(Eye-in-Hand)与眼在手外(Eye-to-Hand)两种标定模式的原理、完整操作流程、标定板选型以及OpenCV与MATLAB的工程实现要点。
4.1 核心原理:两种手眼关系的数学本质
手眼标定的本质是求解一个齐次变换矩阵 X,使得相机坐标系与机器人末端(或基座)坐标系之间建立确定的位姿关系。根据相机安装位置的不同,标定方程的形式有所区别,但核心思想都是利用“闭环约束”来求解未知变换。
4.1.1 眼在手上(Eye-in-Hand)
相机固定在机械臂末端,随机械臂一起运动。此时需要求解的是相机坐标系相对于末端坐标系的固定变换 Thand→cam。标定时,标定板固定在工作空间中不动,机械臂带动相机从多个不同位姿拍摄标定板。对于每一个拍摄位姿,我们已知:
- 机器人正运动学给出的末端位姿 Tbase→hand(从机器人控制器读取);
- 相机外参标定得到的标定板位姿 Tcam→target(通过拍摄标定板图像计算);
- 标定板相对于机器人基座的位姿 Tbase→target(固定不变,但未知)。
于是有闭环方程:Tbase→hand · Thand→cam · Tcam→target = Tbase→target。由于 Tbase→target 恒定,取两个不同位姿相减消去该未知量,得到经典的 AX = XB 形式,其中 A 为两次末端位姿的相对变换,B 为两次标定板位姿的相对变换,X 即为待求的手眼矩阵。
4.1.2 眼在手外(Eye-to-Hand)
相机固定安装在机器人工作空间外的某个位置(如支架、天花板),不随机械臂运动。此时需要求解的是相机坐标系相对于机器人基座坐标系的固定变换 Tbase→cam。标定时,标定板固定在机械臂末端,机械臂运动到多个不同位姿,相机拍摄末端上的标定板。对于每个位姿:
- 机器人正运动学给出 Tbase→hand;
- 相机外参给出 Tcam→target(标定板在相机坐标系下的位姿);
- 标定板相对于末端的变换 Thand→target 固定但未知。
闭环方程为:Tbase→cam · Tcam→target = Tbase→hand · Thand→target。同样取两个位姿相减,消去未知的 Thand→target,也得到 AX = XB 形式的方程,但此时 X 代表 Tbase→cam。
| 对比维度 | 眼在手上(Eye-in-Hand) | 眼在手外(Eye-to-Hand) |
|---|---|---|
| 相机安装位置 | 固定在机械臂末端 | 固定在工作空间外部 |
| 待求矩阵 | Thand→cam(末端→相机) | Tbase→cam(基座→相机) |
| 标定板位置 | 固定在工作空间中 | 固定在机械臂末端 |
| 标定方程形式 | AX = XB(A为末端运动,B为标定板运动) | AX = XB(A为末端运动,B为标定板运动) |
| 视野特点 | 随机械臂移动,视野灵活但会变化 | 视野固定,适合全局观察 |
| 典型应用 | 抓取、装配、焊缝跟踪 | 定位、分拣、安全监控 |
4.2 标定流程:从准备到验证的完整步骤
无论采用哪种模式,标定流程都遵循“准备→采集→求解→验证”四个阶段。每个阶段都有具体的操作要点和注意事项。
4.2.1 准备阶段
- 标定板选型:优先选择陶瓷或玻璃基材的棋盘格标定板,精度等级在 ±0.01mm 以内。根据相机视场角和工作距离选择合适格尺寸(通常让每个方格在图像中占据 20-40 像素)。
- 相机固定与调焦:确保相机镜头光圈适中(F8-F11),焦距锁定,避免标定过程中自动对焦或光圈变化。使用手动模式固定曝光时间。
- 机器人状态确认:记录机器人当前工具坐标系(TCP)参数,确保正运动学计算准确。标定过程中机器人负载应保持恒定。
4.2.2 数据采集阶段
采集数据的质量直接决定标定精度。关键原则是多样性和覆盖性:
- 采集 15-20 组不同位姿的图像,避免所有位姿集中在同一平面或同一方向;
- 机械臂姿态变化应覆盖俯仰、偏航、翻滚三个自由度,且角度差异不小于 30°;
- 标定板在图像中的位置应覆盖画面的九个区域(左上、中上、右上、左中、中心、右中、左下、中下、右下);
- 每组位姿同时记录:机器人末端位姿(x, y, z, rx, ry, rz)和对应的标定板图像。
4.2.3 求解与验证阶段
使用 OpenCV 或 MATLAB 的标定工具箱求解后,必须进行独立验证:
- 将求解出的手眼矩阵应用到未参与标定的测试位姿上;
- 计算视觉引导的投影误差:将标定板角点通过手眼矩阵投影到机器人坐标系,与机器人实测位置比较;
- 重复性测试:同一位置多次标定,观察结果一致性。
4.3 常用标定板与工具实战
4.3.1 标定板类型对比
| 类型 | 材质 | 精度 | 适用场景 | 注意事项 |
|---|---|---|---|---|
| 棋盘格 | 陶瓷/玻璃 | 高(±0.01mm) | 高精度工业标定 | 避免反光,需漫射照明 |
| 棋盘格 | 纸质打印 | 中(±0.1mm) | 实验室验证、初调 | 易变形,不适合高温环境 |
| 圆点阵列 | 金属/玻璃 | 高 | 大视场角标定 | 圆心提取精度高,但需要良好照明 |
| ArUco/ChArUco | 打印/屏幕 | 中 | 动态标定、在线校正 | 单图即可提供ID信息,适合多板拼接 |
4.3.2 OpenCV 标定实现要点
OpenCV 提供 cv2.calibrateHandEye() 函数,支持 Tsai、Park、Horaud 等多种求解算法。使用时需注意输入格式:
import cv2
import numpy as np
# robot_poses: 形状为 (N, 4, 4) 的末端位姿矩阵列表
# target_poses: 形状为 (N, 4, 4) 的标定板位姿矩阵列表(由 solvePnP 得到)
R_gripper2base = [pose[:3,:3] for pose in robot_poses]
t_gripper2base = [pose[:3,3] for pose in robot_poses]
R_target2cam = [pose[:3,:3] for pose in target_poses]
t_target2cam = [pose[:3,3] for pose in target_poses]
# 求解手眼矩阵
R_cam2gripper, t_cam2gripper = cv2.calibrateHandEye(
R_gripper2base, t_gripper2base,
R_target2cam, t_target2cam,
method=cv2.CALIB_HAND_EYE_TSAI
)
# 组合成 4x4 矩阵
T_cam2gripper = np.eye(4)
T_cam2gripper[:3,:3] = R_cam2gripper
T_cam2gripper[:3,3] = t_cam2gripper.flatten()
calibrateHandEye 要求输入的旋转矩阵必须是有效的旋转矩阵(正交且行列式为1)。如果直接使用未经优化的原始数据,可能导致求解失败或结果严重偏离。建议先对旋转矩阵做正交化处理(如 SVD 分解后重构)。
4.3.3 MATLAB 标定工具箱
MATLAB 的 estimateHandEye 函数(Computer Vision Toolbox)提供了更友好的交互界面。使用 cameraCalibrator 应用先完成相机内参标定,然后通过 estimateWorldCameraPose 获取标定板外参,最后调用手眼标定函数。MATLAB 的优势在于可视化调试和误差分析,适合标定方案的快速验证。
4.4 案例拆解:装配机器人眼在手上标定实战
某汽车零部件装配线需要机器人完成精密销钉插入任务,要求视觉引导精度达到 ±0.3mm。现场采用眼在手上配置,相机为 500 万像素工业相机,镜头焦距 12mm,工作距离约 300mm。
初始现象与目标:视觉系统给出的销钉位置与机器人实际抓取位置偏差约 2-3mm,无法满足装配要求。目标是将视觉引导误差控制在 ±0.3mm 以内。
关键输入数据与参数:
- 标定板:陶瓷棋盘格,格尺寸 15mm,精度 ±0.005mm;
- 机器人:六轴工业机器人,重复定位精度 ±0.02mm;
- 采集位姿:20 组,覆盖 5 种俯仰角(-30°~+30°)× 4 种偏航角(-45°~+45°);
- 每组位姿记录末端位姿(mm 和 deg)及对应标定板图像。
分析判断过程:初步检查发现,操作人员仅采集了 8 组位姿,且所有位姿的机械臂姿态变化集中在平移方向,旋转变化不足 15°。这导致 AX=XB 方程中旋转约束不足,求解出的旋转矩阵误差较大。此外,标定板在图像中始终位于中心区域,未覆盖边缘视场,引入了镜头畸变误差。
实际操作步骤:
- 重新设计采集路径:让机械臂以 5 种不同俯仰角、4 种不同偏航角、3 种不同翻滚角组合运动,共 20 组位姿;
- 每组位姿确保标定板出现在图像的不同区域(九宫格分布);
- 使用 OpenCV 的
calibrateHandEye的 Horaud 算法求解; - 用 5 组未参与标定的位姿进行验证,计算重投影误差。
结果对比:标定后视觉引导误差从 2.5mm 降至 0.18mm,满足装配要求。重投影误差从 1.8 像素降至 0.3 像素。
风险与代价:重新标定耗时约 2 小时,期间产线停机。但若采用在线标定方案(使用 ChArUco 板),可将标定时间压缩至 20 分钟,但精度略低(±0.4mm)。
复盘经验:手眼标定的精度瓶颈往往不在算法,而在数据采集质量。旋转多样性、视场覆盖、标定板平整度是三大关键因素。建议每次产线调整后重新标定,并保留历史标定数据用于趋势分析。
4.5 常见误区与总结复盘
总结复盘:手眼标定是机器人视觉系统部署的基石。眼在手上适合需要灵活视野的近距离作业,眼在手外适合全局监控和远距离定位。无论哪种模式,都必须保证数据采集的旋转多样性、视场覆盖性和标定板的平整度。OpenCV 和 MATLAB 提供了成熟的求解工具,但工程人员必须理解 AX=XB 的数学本质,才能正确设计采集策略并诊断标定失败的原因。建议每次标定后保存完整的标定报告(包括重投影误差、验证结果、环境参数),便于后续问题追溯和系统维护。