4. 2D视觉基础与标定
在UR视觉引导抓取系统中,2D视觉承担着“找到目标在哪里”的核心任务。要让机器人准确抓取,必须把图像中的像素位置转换成机器人能理解的物理坐标。这一过程涉及四个关键环节:相机成像模型描述三维世界如何投影到二维图像;镜头畸变校正保证图像几何关系正确;像素坐标到物理坐标的映射建立图像与工作平面的对应;手眼标定则确定相机坐标系与机器人坐标系之间的变换关系。本节围绕这四个环节展开,并给出UR机器人集成的具体方法。
一、相机成像模型:从三维世界到二维像素
针孔相机模型是最常用的成像模型。设世界坐标系中一点 P(Xw, Yw, Zw),经过相机外参(旋转矩阵 R 和平移向量 t)变换到相机坐标系 Pc(Xc, Yc, Zc),再经内参矩阵投影到图像像素坐标 (u, v)。内参矩阵包含焦距 fx、fy 和主点 cx、cy:
[u] [fx 0 cx] [Xc/Zc]
[v] = [0 fy cy] [Yc/Zc]
[1] [0 0 1] [ 1 ]
对于典型的工业面阵相机,例如分辨率 1280×960、像元尺寸 3.75μm、镜头焦距 8mm,可估算 fx ≈ 8mm / 3.75μm ≈ 2133 像素。主点通常接近图像中心,约 (640, 480)。这些参数通过相机标定获得,标定板常用棋盘格或圆点阵列。标定时采集多张不同位姿的标定板图像,利用张正友标定法求解内参和畸变系数。
需要特别说明坐标系约定:本文统一采用右手坐标系,相机坐标系 Z 轴沿光轴指向被摄物体,图像坐标系原点在左上角,u 向右、v 向下。后续所有公式和图示均遵循此约定。
二、镜头畸变:径向与切向的修正
实际镜头存在畸变,主要分为径向畸变和切向畸变。径向畸变使直线弯曲,表现为桶形或枕形;切向畸变由镜头与成像平面不平行引起。常用 Brown-Conrady 模型描述:
x_dist = x(1 + k1*r² + k2*r⁴ + k3*r⁶) + 2*p1*x*y + p2*(r² + 2*x²)
y_dist = y(1 + k1*r² + k2*r⁴ + k3*r⁶) + p1*(r² + 2*y²) + 2*p2*x*y
其中 (x, y) 为归一化理想坐标,r² = x² + y²,k1、k2、k3 为径向畸变系数,p1、p2 为切向畸变系数。标定后,使用 cv2.undistort() 或 initUndistortRectifyMap() 对图像进行校正。校正效果可通过观察标定板直线是否恢复平直来判断。若畸变系数较大而忽略校正,边缘区域的定位误差可达数十像素,直接导致抓取偏移。
三、像素坐标到物理坐标的映射
在完成畸变校正后,需要建立像素坐标到物理坐标的映射。对于平面抓取任务,通常假设目标位于一个已知高度的平面上(如传送带表面或工作台)。此时可使用单应性矩阵 H 描述像素坐标 (u, v) 到物理坐标 (X, Y) 的映射:
[X] [u]
[Y] = H * [v]
[1] [1]
单应性矩阵通过至少四组对应点求解。实际操作中,在工作平面上放置标定板或标记点,用相机拍摄后提取像素坐标,同时用机器人或测量工具记录对应的物理坐标,即可解算 H。若目标高度变化,则需要结合相机内外参和平面高度进行三维反投影,或使用深度相机。对于UR抓取系统,若工件始终在同一平面,单应性方法简单可靠;若高度有变化,建议引入高度补偿或使用3D视觉。
四、手眼标定原理与UR集成方法
手眼标定解决的是相机坐标系与机器人坐标系之间的变换关系。根据相机安装方式分为两类:眼在手外(Eye-to-Hand),相机固定在支架上,不随机器人运动,标定相机到机器人基座的变换;眼在手上(Eye-in-Hand),相机安装在机器人末端,标定相机到末端的变换。UR机器人常用眼在手外方案,因为视野稳定、布线方便。
手眼标定的经典模型为 AX = XB,其中 A 为机器人末端两次运动的相对位姿,B 为相机两次观测的相对位姿,X 为待求的手眼矩阵。实际操作中,控制UR机器人带动标定板(或末端标记)在相机视野内做多组不同位姿运动,每组记录机器人末端位姿和相机检测到的标定板位姿,至少需要三组非共面运动。求解方法常用 Tsai-Lenz 或 Park-Martin 算法。
对于UR机器人集成,具体步骤如下:
- 将相机固定在支架上,确保视野覆盖抓取区域,连接相机到工控机。
- 在UR示教器上创建标定程序,控制机器人末端夹持标定板,在相机视野内走 8~12 个不同位姿点,每个点停留并记录UR的TCP位姿(通过URScript的
get_actual_tcp_pose()获取)。 - 相机同步采集标定板图像,使用OpenCV的
findChessboardCorners()提取角点,计算标定板相对于相机的位姿。 - 将机器人位姿和相机位姿输入手眼标定算法,求解手眼矩阵
T_cam_to_base。 - 验证:在抓取平面上放置一个标记点,用相机检测其像素坐标,经单应性和手眼矩阵转换到机器人基座坐标,控制UR移动到该坐标,观察末端是否对准标记点。若偏差在 ±1mm 内,认为标定合格。
五、从像素到抓取:完整数据流
综合以上环节,UR视觉抓取的数据流为:相机采集图像 → 畸变校正 → 目标检测(如模板匹配、轮廓分析)得到像素坐标 (u, v) 和角度 θ → 单应性映射得到物理平面坐标 (X, Y) → 手眼矩阵变换到机器人基座坐标 (Xr, Yr) → 结合抓取高度和姿态生成UR目标位姿 → 通过 movej 或 movel 指令控制机器人抓取。整个链路中,标定精度直接决定抓取成功率。建议在系统集成后,用多个不同位置的目标进行重复抓取测试,统计偏差分布,若偏差较大,优先检查畸变校正和手眼标定环节。
对于UR机器人,可通过URScript与上位机通信,将计算得到的位姿发送给机器人。常用方式包括:使用 socket 通信发送坐标字符串,或通过 RTDE 接口实时交换数据。抓取时注意UR的TCP设置与手眼标定使用的工具坐标系保持一致,否则会引入额外偏差。