3. 相机成像模型与标定参数

要让机器人“看见”并精确抓取,第一步不是写抓取程序,而是把相机成像的数学关系搞清楚。相机标定的本质,就是求解一组能把三维世界点映射到二维像素、又能反向还原的参数。本节围绕针孔模型、内参矩阵、畸变模型、外参定义以及像素坐标与物理坐标的映射关系展开,这些是后续手眼标定和抓取补偿的数学地基。

一、针孔模型:从三维点到像素的投影链

针孔模型(Pinhole Model)是最常用的理想成像模型。它假设光线从物体出发,穿过一个理想的小孔,在像平面上形成倒立的像。为便于计算,工程上通常把像平面“翻”到光心前方,得到正立的等效成像,这就是我们常用的投影几何。

整个投影过程可以拆成四步坐标变换:

  1. 世界坐标 → 相机坐标:通过外参(旋转 R 与平移 t)完成刚体变换。
  2. 相机坐标 → 归一化平面:除以深度 Z,得到 (X/Z, Y/Z)。
  3. 归一化平面 → 像素坐标:乘以内参矩阵 K,完成缩放与平移。
  4. 理想像素 → 实际像素:叠加畸变模型,得到真实成像位置。

用公式表达,一个世界点 P_w 投影到像素 p 的过程为:

p = K · [R | t] · P_w
其中:
K = [ fx  0  cx ]
    [  0 fy  cy ]
    [  0  0   1 ]

这里 fx、fy 是以像素为单位的焦距,cx、cy 是主点(光轴与像平面的交点)像素坐标。它们共同构成内参矩阵 K,描述相机自身的成像特性,与相机在空间中的位置无关。

二、内参矩阵:相机的“身份证”

内参矩阵的五个参数各有明确物理含义。fx = f / dx,fy = f / dy,其中 f 是物理焦距,dx、dy 是单个像素在传感器上的物理尺寸。若像素是正方形,则 fx ≈ fy。cx、cy 通常接近图像分辨率的一半,但由于装配误差,实际主点会偏离几何中心几个到几十个像素。

以一台常见的 1280×1024 工业相机、配 8mm 镜头为例(以下为教学示例参数,非实测值):假设像元尺寸为 4.8μm,则 fx ≈ 8000/4.8 ≈ 1667 像素,fy 同理;主点约为 (640, 512)。此时内参矩阵可写为:

K ≈ [ 1667    0   640 ]
    [    0 1667   512 ]
    [    0    0     1 ]

内参一旦标定完成,在镜头焦距、光圈、对焦状态不变的前提下可长期复用。若更换镜头或调整焦距,必须重新标定。

三、畸变模型:理想与现实的差距

真实镜头并非理想针孔,尤其在广角或短焦镜头中,直线会弯曲。最常见的两类畸变是径向畸变和切向畸变。

径向畸变由镜头形状引起,表现为图像边缘向外鼓(桶形)或向内缩(枕形),用 k1、k2、k3 描述:

x_dist = x(1 + k1·r² + k2·r⁴ + k3·r⁶)
y_dist = y(1 + k1·r² + k2·r⁴ + k3·r⁶)

切向畸变由镜头与传感器不平行引起,用 p1、p2 描述:

x_dist += 2·p1·x·y + p2·(r² + 2x²)
y_dist += p1·(r² + 2y²) + 2·p2·x·y

其中 r² = x² + y²,x、y 是归一化平面坐标。标定时通常先固定 k3=0,只优化 k1、k2、p1、p2,避免过拟合。畸变系数与内参一起构成相机的完整内参集合。

四、外参:相机在世界中的位姿

外参描述相机坐标系相对于世界坐标系的刚体变换,由旋转矩阵 R(3×3)和平移向量 t(3×1)组成。它回答的是“相机装在哪里、朝哪个方向看”。

若世界点 P_w,则相机坐标 P_c = R·P_w + t。反过来,P_w = R⁻¹(P_c − t)。在机器人抓取场景中,世界坐标系常定义在标定板、工件托盘或机器人基座上。外参会随相机安装位置变化而改变,因此每次调整相机支架后都需要重新标定外参。

需要特别强调:内参和外参的参照约定必须在整个项目中保持一致。例如旋转方向采用右手定则,Z 轴指向相机前方还是后方,平移单位是毫米还是米。约定一旦切换,所有公式和代码都要同步修改,否则会出现符号错误或尺度错误。

五、像素坐标与物理坐标的映射关系

像素坐标 (u, v) 是离散的图像坐标,物理坐标是连续的世界坐标。二者之间的映射不是简单线性关系,因为深度 Z 未知时,一个像素对应空间中的一条射线,而非一个点。只有结合深度信息(如结构光、双目、已知平面约束),才能从像素反推出物理位置。

在平面抓取场景中,若工件位于已知高度的平面上,可令 Z 为常数,此时像素到物理坐标的映射退化为一个 3×3 的单应矩阵 H。标定 H 至少需要四组不共线的对应点。得到 H 后,任意像素点 (u, v) 可通过下式换算到平面物理坐标 (X, Y):

[X']   [h11 h12 h13] [u]
[Y'] = [h21 h22 h23] [v]
[W ]   [h31 h32  1 ] [1]
X = X'/W,  Y = Y'/W

实际标定时,常用棋盘格标定板,提取角点的像素坐标,同时已知角点在标定板上的物理间距,通过最小二乘求解 H。判断标定质量时,可观察重投影误差:把物理点用 H 投影回像素,与检测到的角点比较,误差通常应小于 0.5 像素;若超过 1 像素,说明角点提取不准或平面假设不成立。

标定顺序建议:先标内参和畸变,再标外参或单应矩阵。内参不准会直接污染外参结果,导致抓取偏移随视野位置变化。
相机成像模型:从世界点到像素的完整投影链 世界坐标 P_w (X_w, Y_w, Z_w) 标定板/工件/基座 外参 [R | t] 旋转 R + 平移 t 相机位姿 相机坐标 P_c (X_c, Y_c, Z_c) 光心为原点 归一化平面 (X_c/Z_c, Y_c/Z_c) 除以深度 Z 内参矩阵 K fx, fy(像素焦距) cx, cy(主点) 描述相机自身成像特性,与位姿无关 畸变模型 径向 k1, k2, k3 | 切向 p1, p2 修正理想像素到实际像素的偏差 像素坐标 (u, v) 离散图像坐标 反向映射 像素 → 射线 需深度 Z 约束 平面场景用 H ≥4 组对应点 重投影误差 < 0.5px p = K · [R | t] · P_w 内参 × 外参 × 世界点 = 像素坐标

六、标定参数的实际使用与判断

拿到标定结果后,不要只看参数数值,而要用重投影误差和实际抓取效果来验证。一个实用的检查流程是:用标定得到的 K、畸变系数和外参,把标定板上的已知物理点投影到图像,与检测到的角点比较,统计平均误差和最大误差。若平均误差在 0.2~0.5 像素、最大误差小于 1 像素,通常可满足精密抓取需求。

在抓取验证阶段,可让机器人末端携带标定针,移动到标定板上的若干已知点,记录机器人坐标与相机检测到的像素坐标,再用映射关系反算物理坐标,比较两者偏差。若偏差在 0.1~0.3mm 以内,说明标定参数可用;若偏差随位置呈规律性变化,往往提示畸变未充分校正或外参不准。

常见误区:把内参和外参混在一起标定,或在不同焦距下复用同一组内参。前者会导致参数耦合、难以排查;后者会直接引入尺度误差,使抓取位置整体偏移。

总结来说,针孔模型给出投影骨架,内参矩阵描述相机自身,畸变模型修正镜头误差,外参确定相机位姿,像素与物理坐标的映射则依赖深度约束或平面单应。这五部分共同构成相机标定的完整参数体系,也是后续手眼标定和抓取补偿的输入基础。