3. HALCON图像采集与相机标定

机器人视觉引导系统的精度上限,在图像采集与标定阶段就已经被决定。如果相机、镜头、光源与采集接口选型不当,或者标定参数存在偏差,后续的模板匹配、手眼转换、抓取位姿计算都会带着系统性误差运行。本节围绕“如何采到一张适合标定的图”和“如何把像素坐标可靠地映射到物理坐标”两条主线展开,覆盖硬件选型、采集接口、标定板使用、内外参求解与畸变校正的完整链路。

一、面阵相机与镜头的匹配选型

面阵相机是机器人视觉定位中最常用的成像器件,选型时先确定三个量:视野范围(FOV)、工作距离(WD)和所需空间分辨率。假设某抓取工位的视野为 200 mm × 150 mm,要求系统能分辨 0.1 mm 的定位误差,则单方向至少需要 200 / 0.1 = 2000 像素,考虑亚像素与边缘提取余量,通常取 2~3 倍安全系数,因此选择 500 万像素(2448 × 2048)级别的相机较为稳妥。若使用卷帘快门相机拍摄运动中的工件,会产生果冻效应,此时应优先选择全局快门。

镜头选型的核心是焦距计算。已知相机靶面宽度为 w,视野宽度为 FOV,工作距离为 WD,则焦距近似为:

f = WD × w / FOV

示例:WD = 400 mm,靶面宽 w = 8.4 mm,FOV = 200 mm
f = 400 × 8.4 / 200 = 16.8 mm
→ 选择 16 mm 定焦镜头,实际视野约 210 mm,满足要求

除焦距外,还需关注接口类型(C/CS 口)、靶面尺寸是否覆盖相机传感器、光圈范围与畸变率。远心镜头在测量场景中畸变极低,但视野通常较小、成本较高,适合高精度小视野定位;普通工业定焦镜头性价比高,但边缘畸变需要通过标定校正。

二、光源搭配与采集接口

光源的作用不是“照亮”,而是“制造对比度”。对于金属工件表面反光强烈的场景,环形光容易产生高光斑,可改用低角度条形光或同轴光;对于需要突出轮廓的场合,背光能形成清晰的黑白边界,便于边缘提取。常见搭配策略如下:

  • 环形光:均匀照明,适合平面字符、标记点识别。
  • 条形光:可组合成不同角度,适合表面划痕、边缘增强。
  • 背光:工件轮廓清晰,适合尺寸测量与定位。
  • 同轴光:消除反光,适合镜面、金属表面。

采集接口方面,GigE Vision 布线简单、传输距离长,适合多相机分布式部署;USB3 Vision 带宽高、即插即用,适合单相机高帧率场景;Camera Link 稳定但需要采集卡,多用于高速线阵或高分辨率面阵。HALCON 通过 open_framegrabber 统一访问不同接口,配置时需指定接口名称、相机地址、图像尺寸、像素类型等参数。

open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive',
                   -1, 'default', -1, 'false', 'default',
                   '192.168.1.10', 0, -1, AcqHandle)
grab_image (Image, AcqHandle)

三、基于 HALCON 标定板的内外参标定

HALCON 标定流程使用标准标定板(如 7×7 圆点阵列,圆点直径 3.75 mm,中心距 7.5 mm),通过多姿态拍摄求解相机内参和外参。内参描述相机自身特性,包括焦距、主点坐标、像素尺寸和畸变系数;外参描述相机相对于世界坐标系的位置与姿态。

标定步骤可概括为:采集 10~20 张不同位姿的标定板图像 → 提取标定板圆点中心 → 设置初始内参 → 执行标定 → 检查标定误差。HALCON 中关键算子为 find_calib_object 与 calibrate_cameras。标定完成后,使用 camera_calibration 得到的参数进行畸变校正,常用算子为 change_radial_distortion_cam_offline 与 change_radial_distortion_image。

find_calib_object (Image, CalibDataID, 0, 0, Index, [], [])
get_calib_data_observ_contours (Contours, CalibDataID, 'camera', 0, Index)
calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
change_radial_distortion_cam_offline ('adaptive', CamParam, 0, CamParamOut)
change_radial_distortion_image (Image, Image, ImageRectified, CamParam, CamParamOut)

标定误差通常以像素为单位输出,若平均误差大于 0.5 像素,应检查标定板图像是否清晰、姿态是否足够丰富、圆点提取是否准确。外参标定则通过 calibrate_hand_eye 或手动求解相机与机器人基座/工具坐标系的变换矩阵,为后续视觉引导提供坐标转换基础。

HALCON 图像采集与相机标定链路 面阵相机 全局快门 / 500万像素 靶面 2/3" · C口 GigE / USB3 接口 镜头 焦距 f = WD×w/FOV 示例:16mm 定焦 低畸变 / 远心可选 光源 环形 / 条形 / 背光 同轴光消反光 制造对比度 采集接口 GigE Vision / USB3 Camera Link open_framegrabber 图像采集与预处理 grab_image → 灰度化 → 滤波去噪 → 感兴趣区域 ROI 提取 内参标定 标定板:7×7 圆点阵列 圆点直径 3.75mm · 中心距 7.5mm 采集 10~20 张不同位姿图像 find_calib_object → calibrate_cameras 输出:焦距、主点、畸变系数 误差判断:平均误差 < 0.5 像素 外参标定与畸变校正 calibrate_hand_eye 求解手眼矩阵 相机坐标系 → 机器人基座/工具坐标系 change_radial_distortion_cam_offline change_radial_distortion_image 输出:校正后图像 + 坐标变换矩阵 验证:重投影误差 < 0.3 像素

四、标定实战中的关键判断

标定不是“跑一遍算子”就结束,实际调试中需要关注几个判断点。第一,标定板图像必须覆盖整个视野,且至少包含 3 种以上不同倾斜角度,否则畸变系数求解不稳定。第二,圆点提取时若出现缺失或误检,应检查光源是否均匀、标定板是否平整、镜头是否对焦准确。第三,标定完成后用 get_calib_data 读取参数,重点核对焦距与像素尺寸是否与镜头规格一致,若偏差超过 5%,说明标定过程存在问题。

畸变校正后的图像可用于后续的模板匹配与边缘提取。对于机器人引导场景,通常还需要将像素坐标转换为机器人坐标:先通过内参将像素坐标反投影到相机坐标系,再通过外参矩阵变换到机器人基座坐标系。HALCON 提供 image_points_to_world_plane 算子,可直接将图像点映射到标定板所在的世界平面,简化坐标转换流程。

实操建议:标定板应固定在刚性平面上,避免手持拍摄产生运动模糊;每次更换镜头、调整光圈或改变工作距离后,必须重新标定。标定误差应记录在项目文档中,作为后续精度评估的基线。
常见误区:使用普通打印纸打印标定板会导致平面度不足,圆点中心提取偏差增大;标定板倾斜角度过小(接近正对相机)会使外参求解退化,建议倾斜角度在 15°~45° 之间分布。

完成本节的内外参标定后,系统已经具备将像素坐标映射到物理坐标的能力。下一阶段将在此基础上引入模板匹配与位姿估计,把“看到什么”转化为“在哪里、朝哪个方向”,为机器人抓取提供可执行的位姿指令。