3. 视觉基础

机器臂视觉抓取系统的第一性原理,是让机械臂“知道”视觉传感器看到的物体在机器人坐标系中的精确位置。这一过程的核心桥梁,就是相机的成像模型与标定参数。如果相机内参、外参或畸变系数存在偏差,即便算法再先进,抓取精度也会在源头被破坏。本章将系统拆解针孔成像模型、内参外参的物理含义、畸变产生机理以及标定实施方法,为后续手眼标定奠定数学与工程基础。

相机成像与标定知识框架 世界坐标系 Xw, Yw, Zw 相机坐标系 Xc, Yc, Zc 图像坐标系 x, y (mm) 像素坐标系 u, v (pixel) 外参 R, t 刚体变换 内参 fx, fy, cx, cy 投影映射 畸变 k1,k2,p1,p2 非线性修正 棋盘格标定板 工业相机 采集多姿态图像 标定算法流程 1. 角点检测 2. 单应矩阵求解 3. 内参/外参分解 4. 畸变系数优化 输出:内参矩阵 + 畸变系数

3.1 针孔成像模型与四大坐标系变换

相机成像的本质是将三维空间点投影到二维像素平面的过程。针孔模型是这一过程的理想化数学描述,它假设光线沿直线传播并通过光心,在像平面上形成倒立实像。实际工程中,我们通过“等效正立虚像”简化计算,将投影关系表达为线性矩阵运算。

整个成像链路涉及四个坐标系的连续变换:世界坐标系 → 相机坐标系 → 图像坐标系 → 像素坐标系。世界坐标系是用户自定义的基准参考系,通常与机械臂基座或标定板绑定;相机坐标系以光心为原点,Z轴指向相机前方;图像坐标系以光轴与像平面的交点为原点,单位是毫米;像素坐标系以图像左上角为原点,单位是像素。

从世界坐标到相机坐标属于刚体变换,只包含旋转矩阵 R(3×3)和平移向量 t(3×1),这组参数被称为外参,它描述了相机在世界坐标系中的位姿。从相机坐标到像素坐标的变换由内参决定,包括焦距 fx、fy(单位像素)和主点 cx、cy(单位像素)。完整的投影方程如下:

Zc * [u, v, 1]^T = K * [R | t] * [Xw, Yw, Zw, 1]^T

其中内参矩阵 K = [[fx, 0, cx],
                  [0, fy, cy],
                  [0,  0,  1]]

fx = f/dx,fy = f/dy,其中 f 为物理焦距(mm),dx、dy 为单个像素的物理尺寸(mm/pixel)。当像素为正方形时 fx = fy,但工业相机中两者常有微小差异,标定时必须分别求解。

坐标系 原点位置 单位 变换关系
世界坐标系 用户自定义 mm 基准参考系
相机坐标系 光心 mm 外参 R, t
图像坐标系 光轴与像平面交点 mm 内参 fx, fy
像素坐标系 图像左上角 pixel 主点 cx, cy

3.2 畸变模型:径向畸变与切向畸变

实际镜头并非理想针孔,光线通过透镜时会发生折射偏差,导致成像点偏离理想位置,这就是畸变。畸变主要分为两类:径向畸变和切向畸变。径向畸变源于透镜形状误差,表现为图像点沿径向向内(桶形畸变)或向外(枕形畸变)偏移;切向畸变源于透镜与成像平面不平行,表现为图像点沿切线方向偏移。

径向畸变的数学模型用三个系数 k1、k2、k3 描述,切向畸变用 p1、p2 描述。设理想归一化坐标为 (x, y),畸变后的坐标为 (x_dist, y_dist),则:

x_dist = x * (1 + k1*r² + k2*r⁴ + k3*r⁶) + 2*p1*x*y + p2*(r² + 2x²)
y_dist = y * (1 + k1*r² + k2*r⁴ + k3*r⁶) + p1*(r² + 2y²) + 2*p2*x*y
其中 r² = x² + y²

对于工业机器臂视觉抓取场景,通常使用定焦镜头,k3 往往不需要标定(设为0),因为高次项对普通镜头影响极小。但若使用广角镜头或短焦距镜头,k3 必须参与标定。畸变系数属于内参的一部分,在标定过程中与内参矩阵联合优化求解。

工程风险提示:畸变校正必须在手眼标定之前完成。如果直接使用带畸变的像素坐标进行手眼标定,误差会耦合进外参矩阵,导致后续抓取精度系统性下降。建议在标定流程中先单独完成相机内参标定,再执行手眼标定。

3.3 标定方法:从张正友标定到实操流程

目前工业界最常用的相机标定方法是张正友标定法,它只需要拍摄不同姿态的平面棋盘格标定板即可完成标定,无需昂贵的精密三维标定块。其核心思想是利用棋盘格角点的共面约束,先通过单应矩阵求解内参初值,再通过非线性优化迭代精化所有参数。

标定操作流程分为五个关键步骤:

  1. 准备标定板:打印高精度棋盘格(建议 9×7 或 12×9 内角点),粘贴在平整刚性平板上,测量方格边长(如 30mm)。
  2. 采集图像:固定相机,移动标定板,采集 15~20 张不同姿态的图像。要求覆盖画面中心与边缘,倾斜角度从 0° 到 45° 变化,且标定板在画面中占比超过 1/3。
  3. 角点检测:使用 OpenCV 的 findChessboardCorners 函数自动检测内角点,并利用 cornerSubPix 进行亚像素精化。
  4. 参数求解:调用 calibrateCamera 函数,输入角点像素坐标和对应的世界坐标(以标定板平面为 Z=0),输出内参矩阵、畸变系数、每张图像的外参。
  5. 精度验证:计算重投影误差(reprojection error),通常要求小于 0.1 像素。若误差过大,需剔除异常图像或重新采集。
实战经验:在机器臂视觉抓取项目中,建议将标定板固定在一个可调节角度的支架上,而不是手持。手持标定板容易产生运动模糊,且姿态覆盖不均匀。同时,采集图像时务必保证环境光照稳定,避免反光和阴影干扰角点检测。若现场空间受限,可使用 10~12 张图像完成标定,但需增加角度多样性以补偿数量不足。

3.4 案例拆解:视觉抓取产线中的相机标定实战

某汽车零部件装配线需要机器人从传送带上抓取不同规格的螺栓,视觉系统采用 Basler acA2500-14gm 工业相机(500万像素,传感器尺寸 2/3"),搭配 12mm 定焦镜头,工作距离约 600mm。现场反馈抓取位置偏差达到 ±5mm,超出工艺允许的 ±1mm 范围。

初步排查:首先检查机械臂重复定位精度(±0.05mm)和传送带编码器同步,均正常。随后怀疑相机标定参数存在问题。使用 OpenCV 对标定结果进行复核,发现重投影误差高达 0.45 像素,远超 0.1 像素的合格线。

根因分析:进一步检查发现,现场标定时使用了 A4 纸打印的棋盘格,纸张未粘贴在刚性平板上,存在轻微弯曲;且采集的 12 张图像中,有 5 张标定板倾斜角小于 10°,姿态多样性不足。弯曲的标定板导致角点世界坐标与实际位置偏差,而姿态单一导致单应矩阵求解病态。

解决措施:重新制作标定板,将棋盘格打印后粘贴在 5mm 厚铝板上,确保平面度;重新采集 18 张图像,覆盖 0°~40° 倾斜角,并保证标定板出现在画面九个不同区域。标定后重投影误差降至 0.06 像素。随后重新执行手眼标定,抓取精度提升至 ±0.8mm,满足工艺要求。

参数 标定前(问题状态) 标定后(优化状态)
重投影误差 0.45 pixel 0.06 pixel
fx 3452.7 3481.2
fy 3448.3 3479.6
cx 1234.5 1228.9
cy 1023.8 1019.4
k1 -0.112 -0.098
抓取精度 ±5mm ±0.8mm

该案例表明,标定板平面度和图像姿态多样性是影响标定精度的两大关键因素。在机器臂视觉引导项目中,标定质量直接决定系统最终精度,任何环节的疏忽都会在后续手眼标定和抓取控制中被放大。

3.5 常见误区与总结复盘

在相机标定实施过程中,工程师常陷入以下误区,需要特别警惕:

  • 误区一:标定板越大越好。标定板尺寸应与工作距离和视场匹配,过大可能导致部分角点超出视场,过小则角点像素分辨率不足。一般建议标定板在画面中占 1/3 到 1/2 面积。
  • 误区二:忽略主点偏移。部分工程师认为 cx、cy 就是图像中心(如 1280×1024 图像的中心为 640, 512),直接使用默认值而不标定。实际镜头装配误差会导致主点偏移 10~30 像素,必须参与标定。
  • 误区三:标定一次永久使用。镜头松动、温度变化、振动冲击都会导致内参漂移。建议每季度或每次镜头重新调焦后,重新执行标定。
  • 误区四:混淆内参标定与手眼标定。内参标定是确定相机自身的投影参数,手眼标定是确定相机与机械臂之间的坐标变换关系。两者必须按顺序执行,不可颠倒。
复盘建议:在项目验收阶段,建议使用“标定板反向验证法”检查标定质量:将标定板放置在机械臂工作空间内的已知位置,通过视觉系统测量其位姿,与机械臂实际位姿对比。若偏差超过 1mm,应回溯检查内参标定、手眼标定和机械臂 TCP 标定三个环节。

相机标定是机器臂视觉抓取系统的基石,其精度上限决定了整个系统的精度上限。掌握针孔模型、畸变模型和标定方法,是每一位视觉工程师的基本功。在实际项目中,务必以严谨的流程执行标定,并用重投影误差和实际抓取精度双重验证标定结果,才能为后续的视觉引导算法提供可靠的数据源。