4. 测量系统标定

在三维测量系统中,标定是连接像素坐标与世界坐标的桥梁,其精度直接决定了后续三维重建、尺寸测量和缺陷检测的可靠性。Halcon作为机器视觉领域的高性能算法库,提供了从单相机内参标定到多相机联合标定、从固定安装到手眼标定的完整工具链。本章围绕三维测量场景,系统讲解相机标定、手眼标定、多相机标定、标定板设计以及Halcon中的标准标定流程,帮助工程师建立从理论到落地的完整知识闭环。

三维测量系统标定链路总览 标定板设计 圆点/棋盘格 精度等级/材质 尺寸与视场匹配 相机标定 内参: f, cx, cy, k1-k3 外参: R, T 畸变模型: 径向+切向 手眼标定 Eye-in-Hand / Eye-to-Hand AX = XB 求解 机器人-相机坐标变换 多相机标定 立体视觉对极几何 全局统一坐标系 拼接/融合 Halcon标定流程 1. 创建标定模型 create_calib_data 2. 设置标定板 find_calib_object 3. 收集图像 → 4. 校准 calibrate_cameras 标定输出 相机内参 / 外参 / 畸变系数 手眼矩阵 / 多相机相对位姿 精度验证 → 重投影误差 < 0.1 pixel 三维测量重复性 < 0.05 mm 标定质量决定三维测量精度的上限

4.1 相机标定的核心原理与操作流程

核心原理

相机标定的本质是求解相机成像的几何模型参数,包括内参(焦距f、主点cx/cy、畸变系数k1-k3、p1-p2)和外参(旋转矩阵R、平移向量T)。在三维测量中,内参的准确性直接影响深度解算的精度,而外参则决定了相机在世界坐标系中的位姿。Halcon采用基于张正友平面标定法的改进算法,通过拍摄不同姿态的标定板图像,利用单应性矩阵约束和极大似然估计迭代优化所有参数。

判断方法

标定质量的核心判据是重投影误差(RMS Error)。Halcon在标定完成后会输出每个标定板标记点的重投影误差,通常要求平均误差小于0.1像素,最大误差不超过0.3像素。若误差超标,应检查标定板平整度、图像清晰度、光照均匀性以及标定板是否在视场边缘产生畸变。

操作流程

  1. 准备标定板:选择高精度陶瓷或玻璃基板,确保表面平整度优于±0.005mm,图案对比度清晰。
  2. 采集图像:在测量工作距离附近,从不同角度(倾斜、旋转、平移)采集15~25幅标定板图像,覆盖视场的中心和边缘区域。
  3. 创建标定模型:使用create_calib_data创建标定模型,并加载标定板描述文件(.descr)。
  4. 提取标记点:调用find_calib_object自动定位标定板上的圆点或棋盘格角点。
  5. 执行标定:使用calibrate_cameras完成参数优化,输出相机内参和畸变系数。
实战场景:某3D视觉引导项目使用500万像素工业相机,工作距离300mm,视场范围200mm×150mm。工程师采集了20幅标定板图像,初始重投影误差为0.35像素。通过剔除2幅边缘模糊图像、调整光源角度消除反光后,重投影误差降至0.08像素,三维测量重复性从±0.15mm提升至±0.04mm。

常见误区

  • 标定板过小:标定板尺寸应覆盖视场的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-in-Hand标定时,机器人运动应避免纯平移,尽量包含旋转运动,否则AX=XB方程退化,无法获得唯一解。建议每次运动包含至少15°的旋转变化。

案例拆解

某汽车零部件装配线采用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)

常见误区与复盘

风险提示:多相机标定时,各相机必须同步采集图像,否则标定板运动会导致观测不一致。建议使用硬件触发或网络同步机制。此外,相机间视场重叠区域应包含至少3×3个标记点,否则相对位姿解算不稳定。

某大型结构件三维测量项目采用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像素,边缘畸变消除。

总结复盘:标定不是一次性工作,而是需要定期验证和更新的系统工程。建议建立标定档案,记录标定时间、环境温度、操作人员、误差指标等信息。当设备搬运、镜头更换、温度剧烈变化或测量精度下降时,应重新标定。Halcon的change_calib_data算子支持增量式更新,可在原有标定基础上快速补充新图像优化参数,减少停产时间。