4. 测量系统标定
在三维测量系统中,标定是连接像素坐标与世界坐标的桥梁,其精度直接决定了后续三维重建、尺寸测量和缺陷检测的可靠性。Halcon作为机器视觉领域的高性能算法库,提供了从单相机内参标定到多相机联合标定、从固定安装到手眼标定的完整工具链。本章围绕三维测量场景,系统讲解相机标定、手眼标定、多相机标定、标定板设计以及Halcon中的标准标定流程,帮助工程师建立从理论到落地的完整知识闭环。
4.1 相机标定的核心原理与操作流程
核心原理
相机标定的本质是求解相机成像的几何模型参数,包括内参(焦距f、主点cx/cy、畸变系数k1-k3、p1-p2)和外参(旋转矩阵R、平移向量T)。在三维测量中,内参的准确性直接影响深度解算的精度,而外参则决定了相机在世界坐标系中的位姿。Halcon采用基于张正友平面标定法的改进算法,通过拍摄不同姿态的标定板图像,利用单应性矩阵约束和极大似然估计迭代优化所有参数。
判断方法
标定质量的核心判据是重投影误差(RMS Error)。Halcon在标定完成后会输出每个标定板标记点的重投影误差,通常要求平均误差小于0.1像素,最大误差不超过0.3像素。若误差超标,应检查标定板平整度、图像清晰度、光照均匀性以及标定板是否在视场边缘产生畸变。
操作流程
- 准备标定板:选择高精度陶瓷或玻璃基板,确保表面平整度优于±0.005mm,图案对比度清晰。
- 采集图像:在测量工作距离附近,从不同角度(倾斜、旋转、平移)采集15~25幅标定板图像,覆盖视场的中心和边缘区域。
- 创建标定模型:使用
create_calib_data创建标定模型,并加载标定板描述文件(.descr)。 - 提取标记点:调用
find_calib_object自动定位标定板上的圆点或棋盘格角点。 - 执行标定:使用
calibrate_cameras完成参数优化,输出相机内参和畸变系数。
常见误区
- 标定板过小:标定板尺寸应覆盖视场的1/3以上,否则外参解算不稳定。
- 图像数量不足:少于10幅图像容易导致畸变系数过拟合。
- 忽略温度影响:相机长时间工作发热会导致焦距漂移,建议开机预热30分钟后再标定。
4.2 手眼标定:机器人-相机坐标变换
核心原理
手眼标定解决的是相机坐标系与机器人基坐标系(或工具坐标系)之间的变换关系。根据相机安装位置分为两种模式:Eye-in-Hand(相机安装在机器人末端,随机械臂运动)和Eye-to-Hand(相机固定安装,机器人独立运动)。其数学本质是求解AX=XB矩阵方程,其中A为机器人末端位姿变换,B为相机观测到的标定板位姿变换,X为待求的手眼矩阵。
判断方法
手眼标定的精度验证通常采用"点到点"误差:将机器人移动到多个已知位置,通过手眼矩阵将相机观测到的目标点转换到机器人坐标系,与机器人示教的实际位置对比,误差应小于系统重复定位精度的1.5倍。
操作流程
| 步骤 | 操作内容 | 关键参数 |
|---|---|---|
| 1 | 固定标定板于机器人工作空间内 | 标定板与机器人基座相对静止 |
| 2 | 控制机器人运动到15~20个不同位姿 | 姿态差异应大于30°,覆盖多个象限 |
| 3 | 记录每个位姿的机器人坐标和相机观测值 | 使用calibrate_hand_eye函数 |
| 4 | 求解手眼矩阵并验证 | 旋转误差<0.5°,平移误差<1mm |
案例拆解
某汽车零部件装配线采用Eye-to-Hand方案,相机固定于机械臂上方。初始手眼标定后,抓取定位误差达±2.5mm,超出工艺要求(±0.8mm)。分析发现:标定过程中机器人运动范围过小(仅200mm×200mm区域),导致手眼矩阵外推误差大。重新规划机器人运动路径,覆盖整个工作空间(800mm×600mm),并增加至25个采样位姿后,定位误差降至±0.6mm,满足生产节拍要求。
4.3 多相机标定与标定板设计
多相机标定核心原理
多相机标定用于确定多个相机之间的相对位姿关系,是立体视觉、多视角拼接和三维重建的基础。Halcon支持同时标定任意数量的相机,通过共享标定板观测数据,统一优化所有相机的内参和相机间外参。对于大尺寸测量场景,多相机拼接可扩大测量范围;对于高精度场景,多视角融合可降低遮挡和阴影影响。
标定板设计要点
- 图案类型:圆点阵列(Halcon推荐)比棋盘格更易实现亚像素精度提取,且对遮挡鲁棒性更好。
- 尺寸精度:标定板标记点间距误差应小于0.001mm,建议使用光刻工艺制作。
- 材质选择:陶瓷基板热膨胀系数低(6.5×10⁻⁶/°C),适合温度变化环境;玻璃基板平整度高,适合高精度测量。
- 尺寸匹配:标定板对角线长度应不小于视场短边的1/2,保证标记点数量充足。
多相机标定流程
// Halcon多相机标定核心代码
create_calib_data ('multi_camera', 'calibration_object', 2, CalibDataID)
set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCamParam1)
set_calib_data_cam_param (CalibDataID, 1, 'area_scan_division', StartCamParam2)
set_calib_data_calib_object (CalibDataID, 'calibration_object', CalibObjDescr)
for I := 1 to NumImages by 1
read_image (Image1, 'cam1_' + I$'02d')
read_image (Image2, 'cam2_' + I$'02d')
find_calib_object (Image1, CalibDataID, 0, 0, I, [], [])
find_calib_object (Image2, CalibDataID, 1, 0, I, [], [])
endfor
calibrate_cameras (CalibDataID, Errors)
常见误区与复盘
某大型结构件三维测量项目采用4相机环形布局,单相机视场400mm×300mm,拼接后覆盖1200mm×600mm区域。初次标定后拼接误差达±1.2mm,经排查发现:各相机曝光时间不一致导致标定板提取精度差异。统一曝光参数并增加同步触发后,拼接误差降至±0.3mm,满足检测需求。
4.4 Halcon标定流程的完整闭环与精度验证
标准标定流程
Halcon提供了一套完整的标定工具链,从标定板描述文件生成到标定结果评估均有对应算子。标准流程包括:create_calib_data创建模型 → set_calib_data_cam_param设置初始参数 → find_calib_object提取标记点 → calibrate_cameras执行优化 → get_calib_data获取结果 → write_calib_data保存模型。
精度验证方法
| 验证项目 | 方法 | 合格标准 |
|---|---|---|
| 重投影误差 | 标定板标记点重投影 | RMS < 0.1 pixel |
| 三维重复性 | 同一物体多次测量 | 标准差 < 0.05 mm |
| 长度精度 | 标准量块测量 | 误差 < 0.1% |
| 平面度 | 标准平面拟合 | 残差 < 0.02 mm |
实战场景:标定质量排障
某锂电检测设备使用Halcon标定后,三维测量出现边缘区域畸变。分析过程:首先检查重投影误差分布,发现边缘误差明显大于中心(0.25 vs 0.06 pixel)。进一步检查发现标定板图像在边缘区域存在轻微离焦。解决方案:缩小标定板移动范围,确保标定板始终在景深范围内;同时增加小光圈(F8)提高景深。重新标定后,全视场重投影误差均小于0.1像素,边缘畸变消除。
change_calib_data算子支持增量式更新,可在原有标定基础上快速补充新图像优化参数,减少停产时间。