4. 机器人视觉坐标系与手眼标定基础

在 Teledyne 视觉引导系统中,一个像素点从相机图像走到机器人末端执行器,至少要跨越四个坐标系。理解这四个坐标系的定义、轴向约定以及它们之间的变换链,是后续手眼标定、抓取位姿计算和误差排查的基础。本节先建立坐标系定义,再给出变换关系与标定思路。

四个坐标系的定义与轴向约定

像素坐标系(Pixel / Image Coordinate):以图像左上角为原点,u 轴向右、v 轴向下,单位为像素。它描述的是目标在图像中的位置,例如圆心位于 (u=642.3, v=518.7)。像素坐标本身没有物理尺度,必须结合相机内参才能还原为空间方向。

相机坐标系(Camera Coordinate):原点位于相机光心,Zc 轴沿光轴指向被观测场景,Xc 向右、Yc 向下(与像素轴方向一致,便于内参表达)。单位为毫米。相机坐标系是视觉测量的“物理出口”,像素点经内参反投影后在此获得方向射线。

机器人基坐标系(Base Coordinate):原点通常位于机器人底座安装面中心,Zb 轴竖直向上,Xb、Yb 由机器人厂家定义(多数六轴机器人为 Xb 指向正前方)。它是整个工作单元的公共参考系,机器人各关节角度最终都换算到基坐标系下的末端位姿。

工具坐标系(Tool / TCP Coordinate):原点位于工具中心点 TCP,Zt 轴一般沿工具接近方向(指向工件为负或正取决于约定),Xt、Yt 由工具姿态决定。抓取时我们真正关心的是 TCP 到达目标位姿,而不是法兰盘中心。

约定一致性提醒:本节统一采用“相机 Zc 指向场景、基坐标 Zb 竖直向上、工具 Zt 沿接近方向”的右手系约定。若现场相机倒装或工具轴向不同,必须在标定前明确记录,否则旋转矩阵会出现符号错误。

坐标系之间的变换链

四个坐标系构成一条有向变换链:像素 → 相机 → 机器人基坐标 → 工具。每一段都由一个齐次变换矩阵描述,形式为 4×4 矩阵,包含 3×3 旋转 R 和 3×1 平移 t。

第一段“像素 → 相机”由相机内参完成。设内参矩阵 K,焦距 fx、fy,主点 (cx, cy),则像素点 (u, v) 对应的归一化方向为:

x_n = (u - cx) / fx
y_n = (v - cy) / fy
射线方向 = [x_n, y_n, 1]^T   (相机坐标系下,未定尺度)

第二段“相机 → 基坐标”由手眼关系决定,即相机相对机器人的外参。若相机固定在机器人之外(Eye-to-Hand),该变换是常量矩阵 T_base_cam;若相机装在末端(Eye-in-Hand),则它随机器人运动,需结合当前末端位姿换算。

第三段“基坐标 → 工具”由机器人正运动学与工具偏置共同决定。控制器给出法兰位姿 T_base_flange,再左乘工具偏置 T_flange_tool,得到 T_base_tool。抓取目标在基坐标下的位姿 T_base_target 与 T_base_tool 对齐时,即认为 TCP 到达目标。

视觉引导中的坐标系变换链 像素坐标系 原点:图像左上角 u 向右 / v 向下 单位:像素 示例 (642.3, 518.7) 相机坐标系 原点:光心 Zc 沿光轴指向场景 Xc 右 / Yc 下 单位:毫米 机器人基坐标系 原点:底座安装面中心 Zb 竖直向上 Xb 指向正前方 工作单元公共参考系 工具坐标系 原点:TCP Zt 沿接近方向 Xt/Yt 由姿态决定 抓取目标位姿 内参 K 手眼外参 正运动学 齐次变换形式:T = [ R(3×3) t(3×1) ; 0 0 0 1 ] 像素→相机:方向射线 [x_n, y_n, 1]^T,x_n=(u−cx)/fx,y_n=(v−cy)/fy 相机→基坐标:T_base_cam(Eye-to-Hand 常量)或 T_base_flange · T_flange_cam(Eye-in-Hand) 抓取对齐条件 T_base_tool = T_base_flange · T_flange_tool 当 T_base_tool 与 T_base_target 的平移误差 < 0.5 mm、旋转误差 < 0.5° 时,判定 TCP 到达抓取位姿

手眼标定的两种构型

手眼标定要解决的核心问题是:求相机坐标系与机器人坐标系之间的固定变换。根据相机安装方式不同,分为两种构型。

Eye-to-Hand(相机固定):相机安装在工作台支架上,不随机器人运动。此时相机与基坐标系的变换 T_base_cam 是常量。标定时让机器人带着标定板(或标定针)在相机视野内走多个位姿,记录每个位姿下机器人法兰位姿 T_base_flange 与标定板在相机中的位姿 T_cam_board,通过求解 AX=XB 形式的方程组得到 T_base_cam。这种构型视野稳定,适合大范围抓取。

Eye-in-Hand(相机随动):相机固定在机器人末端。此时相机与法兰的变换 T_flange_cam 是常量,而相机与基坐标的关系随位姿变化。标定同样走多组位姿,求解的是 T_flange_cam。这种构型适合近距离高精度定位,但视野随运动变化。

标定实操:以 Eye-to-Hand 为例

假设使用 Teledyne 面阵相机与六轴机器人,标定板为 9×12 圆点阵列,点间距 10 mm。操作流程如下:

  1. 将标定板固定在机器人末端或工作台上,确保标定板与机器人相对位置在标定过程中不变。
  2. 手动示教机器人,使标定板在相机视野内呈现至少 8~12 个不同位姿,覆盖视野的四个象限和不同倾斜角。每个位姿记录机器人法兰位姿(x, y, z, rx, ry, rz)和相机拍摄的标定板图像。
  3. 用相机标定算法提取每张图像中圆点中心的像素坐标,结合已知点间距求解标定板在相机坐标系下的位姿 T_cam_board。
  4. 将每组 T_base_flange 与 T_cam_board 代入手眼方程,用最小二乘求解 T_base_cam。
  5. 验证:选取未参与标定的 3 个位姿,用求得的 T_base_cam 预测标定板在基坐标下的位置,与实际机器人位姿对比。若平移残差小于 0.5 mm、旋转残差小于 0.5°,认为标定合格。
常见错误:标定板在标定过程中发生移动,或机器人位姿记录的是法兰而非 TCP。前者会破坏“标定板与机器人相对固定”的前提,后者会引入工具偏置误差。务必在标定前确认工具偏置已正确设置。

像素到抓取位姿的完整计算示例

设某次检测到目标圆心像素坐标 (u=642.3, v=518.7),相机内参 fx=1250.0、fy=1250.0、cx=640.0、cy=512.0。则归一化方向为:

x_n = (642.3 - 640.0) / 1250.0 = 0.00184
y_n = (518.7 - 512.0) / 1250.0 = 0.00536
射线方向(相机系)= [0.00184, 0.00536, 1.0]^T

若已知目标平面在相机坐标系下的深度 Zc = 420 mm,则目标在相机系下的坐标为:

Xc = 0.00184 × 420 = 0.773 mm
Yc = 0.00536 × 420 = 2.251 mm
Zc = 420.0 mm

再经 T_base_cam 变换到基坐标系,得到目标在基坐标下的位置。最后结合抓取姿态(例如工具 Zt 垂直向下),构造 T_base_target,与 T_base_tool 对齐后发送给机器人控制器执行。

整个链条中,任何一段变换的误差都会累积到最终抓取精度。实际调试时,建议先单独验证内参(用标定板重投影误差判断,一般要求小于 0.2 像素),再验证手眼外参(用独立位姿残差判断),最后验证工具偏置(用 TCP 触碰已知点判断)。分段验证比一次性看抓取结果更容易定位问题。