4、视觉传感器与标定:相机模型、内参外参、手眼标定(eye-in-hand/eye-to-hand)、标定工具与流程

视觉引导机械臂抓取的核心前提,是让机器人系统准确理解“图像中的像素点”与“三维空间中的物理点”之间的映射关系。这一映射关系由相机内参(描述相机光学与成像特性)和外参(描述相机在机器人世界中的位姿)共同决定。若标定不准确,后续的目标检测、坐标转换、抓取规划都将产生系统性偏差。本章将系统讲解相机成像模型、内参外参的物理意义、手眼标定的两种典型构型(eye-in-hand与eye-to-hand),并给出工程中可落地的标定流程与工具链。

视觉传感器标定知识框架与工程链路 相机模型 • 针孔模型:光心、焦距 f • 像素坐标系 (u,v) • 图像坐标系 (x,y) • 相机坐标系 (Xc,Yc,Zc) • 世界坐标系 (Xw,Yw,Zw) 畸变:径向 + 切向 内参与外参 内参 K:fx, fy, cx, cy 畸变系数:k1,k2,p1,p2,k3 外参:R (3x3), t (3x1) 相机→世界坐标变换 标定板:棋盘格/圆点阵 重投影误差 < 0.1px 手眼标定 eye-in-hand:相机随机械臂运动 eye-to-hand:相机固定于外部 求解 AX = XB Tsai / Park / Daniilidis 标定板固定于机械臂末端 或固定于工作台 标定流程(工程链路) 1 采集图像 2 角点检测 3 内参求解 4 畸变校正 5 手眼标定 6 验证精度 7 部署应用 关键输出: • 相机内参矩阵 K(fx, fy, cx, cy)与畸变系数 • 手眼变换矩阵(相机→机械臂基座或末端→相机) • 重投影误差评估(目标 < 0.15 像素)

4.1 相机成像模型与内参外参

4.1.1 核心原理:从三维世界到二维像素

视觉引导抓取的第一步,是理解相机如何将三维空间中的点投影到二维图像平面。最常用的模型是针孔相机模型,它假设光线通过光心(光学中心)投影到成像平面。设空间中一点 P 在世界坐标系下的坐标为 (Xw, Yw, Zw),经过外参矩阵 [R|t] 变换到相机坐标系 (Xc, Yc, Zc),再通过内参矩阵 K 投影到像素坐标系 (u, v)。整个过程的数学表达式为:

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

其中内参矩阵 K 包含焦距 fx、fy(单位:像素)和主点坐标 cx、cy(单位:像素)。fx = f / dx,fy = f / dy,dx、dy 为单个像素的物理尺寸。外参矩阵由旋转矩阵 R(3x3)和平移向量 t(3x1)组成,描述了相机坐标系相对于世界坐标系的位姿。此外,实际镜头存在畸变,主要包括径向畸变(k1, k2, k3)和切向畸变(p1, p2),需要在标定后对图像进行校正。

工程要点:内参是相机的固有属性,出厂后基本不变(除非镜头松动或温度漂移);外参会随相机安装位置变化。在机械臂抓取场景中,外参通常指相机相对于机械臂基座(eye-to-hand)或相对于机械臂末端(eye-in-hand)的变换矩阵。

4.1.2 标定板与角点检测

标定内参的标准方法是使用已知尺寸的标定板(棋盘格或圆点阵),从不同角度拍摄 15~20 张图像。OpenCV 的 findChessboardCorners() 函数可自动检测棋盘格角点,然后通过 calibrateCamera() 求解内参和畸变系数。标定板应占据图像面积的 20%~80%,并覆盖图像的边缘和中心区域,以保证畸变模型的可观测性。

参数物理含义典型值(500万像素相机)影响
fx, fy焦距(像素)1400~1800决定视场角与放大倍率
cx, cy主点坐标图像中心附近偏差大会导致坐标偏移
k1, k2, k3径向畸变系数±0.1 以内桶形/枕形畸变
p1, p2切向畸变系数±0.01 以内镜头与传感器不平行
重投影误差像素误差均值< 0.15 px整体标定质量指标

4.1.3 案例拆解:内参标定中的常见问题

某机器人工作站使用海康威视 MV-CA050-10GC 相机(500万像素,靶面 2/3"),镜头焦距 12mm。初次标定时,操作员只拍摄了 8 张标定板图像,且标定板始终位于画面中央。标定结果重投影误差为 0.35px,导致后续抓取时目标中心偏移约 3mm。分析发现:图像数量不足且未覆盖画面边缘,导致畸变系数估计不准。改进措施:重新采集 20 张图像,标定板分别位于左上、右上、左下、右下、中心五个区域,并倾斜 15°~30° 拍摄。重标定后重投影误差降至 0.08px,抓取精度提升至 ±1mm 以内。

风险提示:标定板不平整(如纸张褶皱)会引入系统性误差;光照不均会导致角点检测失败;标定板反光(如覆膜)会造成角点偏移。建议使用陶瓷或玻璃基板标定板,并保证均匀漫射照明。

4.2 手眼标定:eye-in-hand 与 eye-to-hand

4.2.1 两种构型的原理与差异

手眼标定解决的是相机坐标系与机械臂坐标系之间的变换关系。根据相机安装位置,分为两种构型:

  • eye-in-hand(眼在手上):相机固定在机械臂末端法兰上,随机械臂一起运动。标定时,标定板固定在工作台上,机械臂运动到多个位姿拍摄标定板。求解的是相机坐标系到机械臂末端坐标系的变换矩阵 X = T_cam2end。
  • eye-to-hand(眼在手外):相机固定在工作台上方或侧面,不随机械臂运动。标定时,标定板固定在机械臂末端,机械臂运动到多个位姿。求解的是相机坐标系到机械臂基座坐标系的变换矩阵 X = T_cam2base。

两种构型的数学本质都是求解齐次变换方程 AX = XB,其中 A 为机械臂末端位姿变化(由机器人控制器读取),B 为标定板在相机坐标系下的位姿变化(由视觉算法计算)。常用求解方法包括 Tsai-Lenz 法、Park-Martin 法和 Daniilidis 法(基于四元数/对偶四元数)。

4.2.2 标定流程与操作步骤

  1. 准备阶段:固定相机(eye-to-hand)或固定标定板(eye-in-hand),确保机械臂运动范围内无遮挡。
  2. 数据采集:控制机械臂运动 15~20 个不同位姿,每个位姿下记录:机械臂末端位姿(从控制器读取,通常为 4x4 齐次矩阵)和标定板图像(用于计算标定板在相机坐标系下的位姿)。
  3. 位姿求解:使用 OpenCV 的 solvePnP() 计算标定板位姿,得到 B 矩阵序列。
  4. 手眼标定计算:调用 cv2.calibrateHandEye()(OpenCV 4.x 支持),输入 A 序列和 B 序列,输出 X 矩阵。
  5. 精度验证:将标定板放置在机械臂工作空间内多个位置,用视觉识别标定板中心坐标,与机械臂实际位姿对比,计算位置误差和姿态误差。
经验建议:采集数据时,机械臂位姿应尽量多样化——包括不同高度、不同俯仰角、不同偏航角,避免所有位姿集中在同一平面或同一方向。位姿差异越大,AX=XB 方程组的条件数越好,标定结果越稳定。

4.2.3 案例拆解:eye-to-hand 标定实战

某汽车零部件装配线,使用六轴机械臂(ABB IRB 1200)进行螺丝抓取。相机安装在机械臂正上方 800mm 处,采用 eye-to-hand 构型。初始标定后,视觉引导抓取时出现 X 方向偏差 5mm、Y 方向偏差 2mm 的问题。排查过程:

  • 检查内参标定:重投影误差 0.12px,正常。
  • 检查机械臂末端位姿读取:确认控制器输出的位姿为工具坐标系下的值,且工具中心点(TCP)已校准。
  • 检查手眼标定数据:发现采集的 12 组位姿中,有 6 组机械臂末端姿态几乎相同(仅平移变化),导致旋转分量约束不足。

重新采集 20 组数据,每组位姿包含明显的姿态变化(俯仰角变化 20°~40°,偏航角变化 15°~30°)。标定后,X 方向偏差降至 0.8mm,Y 方向偏差降至 0.5mm,满足装配要求。复盘经验:手眼标定的精度不仅取决于算法,更取决于数据采集的质量——位姿多样性是决定标定结果鲁棒性的关键因素。

4.3 标定工具与自动化流程

4.3.1 常用标定工具对比

工具适用场景优点缺点
OpenCV + Python内参标定、手眼标定开源免费、算法全面、社区活跃需要编写代码、调试门槛较高
MATLAB Camera Calibrator内参标定图形化界面、自动剔除异常图像商业授权、手眼标定需额外工具箱
ROS camera_calibration内参标定(ROS环境)与ROS集成、支持实时标定依赖ROS版本、标定板类型有限
easy_handeye(ROS包)手眼标定自动化流程、支持多种机械臂需配置ROS通信、对新手不友好
Halcon Calibration工业级标定高精度、支持多种畸变模型商业授权、价格较高

4.3.2 自动化标定流程设计

在批量部署机器人工作站时,手动标定效率低且一致性差。建议设计半自动标定流程:

  1. 机械臂按预设轨迹自动运动到 N 个位姿,每个位姿停留 1~2 秒。
  2. 相机自动采集图像并触发角点检测,若检测失败则自动调整位姿重新采集。
  3. 所有数据采集完成后,自动执行内参标定和手眼标定。
  4. 输出标定报告(含重投影误差、手眼变换矩阵、验证精度),并自动保存至配置文件。

该流程可将标定时间从 30 分钟缩短至 5 分钟,且减少人为操作误差。对于 eye-in-hand 构型,机械臂运动轨迹应避免标定板超出相机视野;对于 eye-to-hand 构型,应避免机械臂遮挡标定板。

标定质量验证清单:
  • 内参重投影误差 < 0.15px
  • 手眼标定验证:在 5 个不同位置放置标定板,视觉计算坐标与机械臂实际坐标误差 < 2mm
  • 姿态误差 < 1°(对于抓取任务通常足够)
  • 重复标定两次,结果差异 < 5%

4.3.3 常见误区与总结复盘

  • 误区一:忽略畸变校正。直接使用未校正的图像进行手眼标定,会导致标定板角点位置偏差,进而影响手眼矩阵精度。正确做法是先完成内参标定和畸变校正,再采集手眼标定数据。
  • 误区二:机械臂位姿读取错误。部分机器人控制器输出的位姿是相对于基座的,但有些是相对于工具坐标系的。务必确认读取的位姿与视觉计算的位姿在同一坐标系定义下。
  • 误区三:标定板尺寸测量不准。棋盘格边长误差 0.1mm 会导致手眼标定平移误差放大数倍。建议使用高精度标定板(精度 ±0.01mm),并用游标卡尺复核。
  • 误区四:忽略机械臂定位精度。手眼标定依赖机械臂的位姿读数,如果机械臂本身定位精度差(如 > 1mm),标定结果也会受限。此时可考虑使用外部测量设备(如激光跟踪仪)辅助标定。

总结:视觉传感器标定是机器人视觉抓取系统的“地基工程”。内参标定解决“看得准”的问题,手眼标定解决“找得对”的问题。在实际项目中,建议先使用 OpenCV 完成内参标定,再根据构型选择 eye-in-hand 或 eye-to-hand 进行手眼标定,最后通过多位置验证确保精度达标。标定不是一次性工作——当相机受到碰撞、镜头重新调焦、机械臂维护后,都需要重新标定。建立标定记录和定期复检机制,是保障长期稳定运行的关键。