3. 视觉基础

手眼标定的本质是求解机器人末端执行器坐标系与相机坐标系之间的空间变换关系,而这一切的前提是理解相机如何将三维世界投影为二维图像。相机成像模型描述了从世界坐标系到像素坐标系的数学映射,内参与外参则分别刻画了相机内部光学属性与外部安装位姿,畸变模型修正了镜头带来的非线性误差,标定板则为求解这些参数提供了高精度的已知特征点。本节将系统拆解这四个核心模块,并给出工程实践中的关键判断方法与常见误区。

相机成像模型与标定核心链路 世界坐标系 (Xw, Yw, Zw) 相机坐标系 (Xc, Yc, Zc) 图像坐标系 (x, y) 物理单位 像素坐标系 (u, v) 像素单位 外参 R,t 内参 f, cx, cy 像素化 dx, dy 畸变模型(非线性修正) 径向畸变 k1, k2, k3 | 切向畸变 p1, p2 标定板(棋盘格 / 圆点) 提供亚像素级特征点 | 已知物理间距 标定输出:内参矩阵 K + 畸变系数 + 外参(每帧位姿) 用于手眼标定、三维重建、测量定位

3.1 相机成像模型:从三维世界到二维像素

相机成像模型的核心是针孔模型(Pinhole Model),它假设光线沿直线传播,通过光心投影到成像平面。实际工程中,我们通常使用四个坐标系的连续变换来描述这一过程:世界坐标系(描述物体在空间中的位置)、相机坐标系(以光心为原点,Z轴指向镜头前方)、图像坐标系(物理单位,如毫米,原点在光轴与成像平面交点)、像素坐标系(以像素为单位,原点在图像左上角)。

完整的投影过程可用齐次坐标表示为:

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

其中,K为内参矩阵,[R|t]为外参矩阵。内参矩阵K包含焦距f(以像素为单位,通常分解为fx和fy)、主点坐标(cx, cy)以及倾斜因子s(现代相机通常近似为0):

K = [[fx, s, cx],
     [ 0, fy, cy],
     [ 0,  0,  1]]

fx = f/dx,fy = f/dy,dx和dy分别为单个像素在x和y方向的物理尺寸。理解这一模型是标定的基础——标定的本质就是求解K、畸变系数以及每一帧图像对应的外参。

工程要点:在机器人视觉引导场景中,外参R|t描述的是标定板(或工件)相对于相机的位置姿态。当相机固定在机器人末端时,外参会随机器人运动而变化;当相机固定在工作站时,外参则相对固定。手眼标定的目标正是求解相机与机器人末端(或基座)之间的固定变换关系。

3.2 内参与外参:标定的两大核心输出

内参描述相机自身的固有属性,包括焦距、主点、像素尺寸和畸变系数。内参一旦标定完成,在相机焦距和分辨率不变的情况下通常保持稳定。外参描述相机坐标系相对于某个参考坐标系的位姿关系,由旋转矩阵R(3×3)和平移向量t(3×1)组成,共6个自由度(3个旋转角+3个平移量)。

在标定过程中,我们通常拍摄多张不同位姿的标定板图像。每张图像提供一组外参,而所有图像共享同一组内参。通过最小化重投影误差(即标定板特征点的实际像素坐标与通过模型计算出的像素坐标之间的欧氏距离),可以同时优化内参和外参。OpenCV的calibrateCamera()函数正是基于这一原理,使用Levenberg-Marquardt算法进行非线性优化。

参数类型 包含内容 物理意义 标定后稳定性
内参 fx, fy, cx, cy, s 焦距、主点、像素倾斜 焦距不变时保持稳定
畸变系数 k1, k2, k3, p1, p2 径向畸变、切向畸变 镜头固定时保持稳定
外参 R (3×3), t (3×1) 相机相对参考坐标系的旋转和平移 随相机位姿变化而变化

3.3 畸变模型:镜头非线性的数学补偿

实际镜头并非理想针孔,存在两类主要畸变:径向畸变和切向畸变。径向畸变由镜头曲面引起,表现为图像边缘的直线弯曲,分为桶形畸变(负畸变)和枕形畸变(正畸变)。切向畸变由镜头与成像平面不平行引起,表现为图像在某个方向上被拉伸或压缩。

畸变模型通常用多项式近似:

x_distorted = x * (1 + k1*r² + k2*r⁴ + k3*r⁶) + 2*p1*x*y + p2*(r² + 2*x²)
y_distorted = y * (1 + k1*r² + k2*r⁴ + k3*r⁶) + p1*(r² + 2*y²) + 2*p2*x*y

其中r² = x² + y²,(x, y)为归一化平面坐标。k1、k2、k3为径向畸变系数,p1、p2为切向畸变系数。对于大多数工业镜头,k1和k2已足够描述畸变,k3主要用于鱼眼镜头等大畸变场景。

常见误区:畸变校正必须在所有测量和标定之前完成。如果直接使用未校正的图像进行手眼标定,畸变误差会耦合到外参求解中,导致标定精度下降。建议在标定流程中先单独标定并保存畸变系数,后续所有图像先做畸变校正再参与计算。

3.4 标定板原理:棋盘格与圆点阵列

标定板的作用是提供已知物理尺寸的精确特征点。棋盘格标定板由黑白相间的正方形组成,角点检测算法(如OpenCV的findChessboardCorners())通过图像梯度变化定位角点,精度可达亚像素级。圆点标定板由规则排列的实心圆组成,通过椭圆拟合或重心法提取圆心,对运动模糊和光照变化更鲁棒。

选择标定板时需考虑以下因素:

  • 特征点数量:棋盘格角点数量为 (cols-1)×(rows-1),圆点阵列则直接使用圆心数量。建议至少使用10×7以上的格点,保证优化方程有足够约束。
  • 物理尺寸精度:标定板的方格边长或圆点间距必须精确测量,误差会直接传递到焦距和位姿计算中。工业级标定板精度可达±0.01mm。
  • 表面平整度:标定板必须平整,陶瓷或玻璃基底优于纸质打印。弯曲的标定板会引入系统性误差。
  • 对比度与反光:黑白对比度越高越好,避免反光材质。哑光表面更适合工业环境。

3.5 标定操作流程与实战案例

一个完整的相机标定流程包括以下步骤:

  1. 采集图像:拍摄15-25张不同位姿的标定板图像,覆盖画面中心、边缘、倾斜、旋转等姿态。避免所有图像都处于同一平面。
  2. 角点/圆心提取:使用亚像素细化算法提高特征点定位精度。
  3. 内参初估计:使用张正友标定法(Zhang's Method)的闭式解获得初始内参。
  4. 非线性优化:以重投影误差最小化为目标,使用LM算法优化所有参数。
  5. 评估结果:检查重投影误差(通常应小于0.1像素),查看畸变系数是否在合理范围。
案例拆解:某3C电子装配线需要引导机器人抓取手机中框,相机固定于机器人末端上方300mm处,视野范围80mm×60mm,要求定位精度±0.05mm。使用12mm镜头,棋盘格标定板(方格边长3mm,12×9格点)。采集20张图像后,标定结果:fx=2456.3像素,fy=2455.8像素,cx=640.2像素,cy=512.7像素,重投影误差0.08像素。畸变系数k1=-0.112,k2=0.023,p1=0.0002,p2=-0.0001。将畸变校正后的图像用于手眼标定,最终抓取精度达到±0.04mm,满足产线要求。

3.6 常见误区与复盘总结

在工程实践中,以下问题最容易导致标定失败或精度不足:

  • 标定板不平整:使用纸张打印的标定板在倾斜时会产生弯曲,建议使用玻璃或陶瓷基底。
  • 图像数量不足或姿态单一:少于10张图像或所有图像都正对相机,会导致内参求解病态。
  • 忽略畸变校正:直接使用原始图像进行测量,边缘区域误差可达数像素。
  • 标定板尺寸测量误差:使用游标卡尺测量方格边长时,0.1mm的误差在300mm工作距离下会导致约0.3mm的测量偏差。
  • 光照变化:反光或阴影会导致角点检测偏移,建议使用漫射光源。
经验总结:标定不是一次性任务。在机器人长时间运行后,镜头松动、温度变化、振动都可能导致内参漂移。建议建立定期复标机制,并在关键测量任务前使用单张标定板图像快速验证内参是否仍然有效。对于高精度应用,可考虑使用主动标定方法(如基于编码标记的在线标定)来实时补偿参数漂移。