4. 机器人视觉引导坐标系基础
在机器人视觉引导系统中,一个抓取动作能否准确完成,本质上取决于一件事:视觉系统“看到”的目标位置,能否被正确换算成机器人“理解”的运动位置。这个换算过程不是一步完成的,而是沿着一条明确的坐标链逐级传递。理解这条链上每个坐标系的作用、单位、方向约定以及它们之间的转换关系,是后续标定、手眼标定和抓取程序编写的基础。
五个坐标系各自的角色
先明确本节涉及的五个坐标系,它们分别回答不同的问题:
- 像素坐标 (u, v):图像上的行列位置,单位是像素。它回答“目标在图像的哪个位置”,原点通常在图像左上角,u 向右增大,v 向下增大。
- 相机坐标 (Xc, Yc, Zc):以相机光心为原点的三维坐标,单位通常是毫米。Zc 沿光轴指向被摄物,Xc、Yc 与图像平面平行。它回答“目标在相机前方多远、偏左偏右多少”。
- 机器人坐标 (Xr, Yr, Zr):机器人基座坐标系,是机器人运动的绝对参考。它回答“目标在机器人工作空间的哪个位置”。
- 工具坐标 (Xt, Yt, Zt):固定在末端执行器(夹爪、吸盘)上的坐标系,原点通常在工具中心点 TCP。它回答“工具以什么姿态去接触目标”。
- 工件坐标 (Xw, Yw, Zw):建立在工件或托盘上的坐标系,随工件摆放位置变化。它回答“目标相对于工件本身在哪里”,便于批量抓取时复用同一套点位。
这五个坐标系并非孤立,而是通过一系列变换串联起来。视觉给出像素坐标,经相机内参和位姿换算到相机坐标,再经手眼关系换算到机器人坐标,最后结合工具坐标和工件坐标生成机器人可执行的目标位姿。
从像素到相机:内参与反投影
相机成像遵循针孔模型。设相机内参矩阵为 K,包含焦距 fx、fy 和主点 cx、cy,则像素坐标与相机坐标的关系为:
u = fx * (Xc / Zc) + cx
v = fy * (Yc / Zc) + cy
反过来,如果已知像素坐标 (u, v) 和该点的深度 Zc,就可以求出相机坐标:
Xc = (u - cx) * Zc / fx
Yc = (v - cy) * Zc / fy
Zc = 深度值
这里的关键是深度 Zc。2D 视觉只能给出 (u, v),无法直接得到 Zc。因此实际工程中通常有两种做法:一是使用 3D 相机或激光位移传感器直接获取 Zc;二是假设目标在已知平面上(如工作台面),通过平面约束反算 Zc。KEYENCE XG-X 系列配合 3D 相机时,可直接输出包含深度信息的三维点云,省去平面假设带来的误差。
从相机到机器人:手眼标定的作用
相机坐标到机器人坐标的转换由一个 4×4 齐次变换矩阵完成,这个矩阵就是手眼标定矩阵 T_cam_to_robot。它包含旋转部分 R(3×3)和平移部分 t(3×1):
P_robot = R * P_camera + t
其中 P_camera = [Xc, Yc, Zc]^T,P_robot = [Xr, Yr, Zr]^T。手眼标定分为两种安装方式:
- 眼在手 (Eye-in-Hand):相机安装在机器人末端,随机器人一起运动。此时相机坐标与工具坐标有固定关系,标定的是相机到末端的变换。
- 眼在外 (Eye-to-Hand):相机固定在支架上,不随机器人运动。此时标定的是相机到机器人基座的固定变换。
无论哪种方式,标定的本质都是让机器人末端去触碰若干个已知点,同时记录相机看到的对应像素坐标,通过求解方程组得到变换矩阵。标定点数量一般不少于 9 组,分布要覆盖整个工作视野,避免集中在某一区域导致外推误差增大。
工具坐标与工件坐标的工程意义
工具坐标的原点是 TCP(Tool Center Point),即夹爪或吸盘的实际作用点。机器人运动指令中的目标位置,通常指的是 TCP 要到达的位置,而不是法兰盘中心。因此必须准确设置 TCP 参数,包括 X、Y、Z 偏移量和姿态角。如果 TCP 设置偏差 2 mm,抓取时就会整体偏移 2 mm,对于小零件抓取这是不可接受的。
工件坐标则解决“批量一致性”问题。假设一个托盘上摆放了 20 个零件,每个零件在托盘上的相对位置是固定的。如果直接使用机器人坐标逐个示教,需要记录 20 组绝对坐标;而如果建立工件坐标,只需记录每个零件相对于工件原点的偏移量,再通过工件坐标到机器人坐标的变换一次性生成所有目标点。当托盘整体移动时,只需重新标定工件坐标原点,20 个点位自动跟随更新。
完整转换链的数值示例
下面用一个假设的示例串联整条链,帮助理解每一步的输入输出。假设相机内参 fx = 1200、fy = 1200、cx = 640、cy = 360,目标像素坐标为 (800, 400),深度 Zc = 500 mm。
第一步,像素到相机:
Xc = (800 - 640) * 500 / 1200 = 66.67 mm
Yc = (400 - 360) * 500 / 1200 = 16.67 mm
Zc = 500 mm
第二步,假设手眼标定矩阵的旋转为单位矩阵,平移 t = [300, 100, 200](单位 mm),则相机到机器人:
Xr = 66.67 + 300 = 366.67 mm
Yr = 16.67 + 100 = 116.67 mm
Zr = 500 + 200 = 700 mm
第三步,假设工具坐标 TCP 偏移为 [0, 0, 150](即工具尖端比法兰盘低 150 mm),则机器人需要到达的法兰位置为:
X_flange = 366.67 mm
Y_flange = 116.67 mm
Z_flange = 700 - 150 = 550 mm
以上数值均为教学示例,实际项目中旋转矩阵通常不是单位矩阵,需要完整参与运算。但通过这个简化示例可以看到:像素坐标经过内参、手眼矩阵、TCP 偏移三次变换后,才成为机器人可执行的位置指令。任何一步的参数错误,都会导致最终抓取偏差。
常见问题与检查要点
当抓取出现偏移时,可以按坐标链的顺序逐级排查:
- 像素坐标是否正确:检查视觉工具是否稳定识别目标,像素坐标是否跳动。可在图像上叠加十字标记观察重复性。
- 深度值是否准确:2D 相机假设平面时,若目标高度变化,Zc 误差会直接放大为 Xc、Yc 误差。可用已知高度的标准块验证。
- 手眼标定是否覆盖工作区:标定点应分布在工作视野的四个角和中心,避免只在一小块区域标定后在大范围使用。
- TCP 是否准确:用尖点触碰法验证 TCP,观察机器人末端尖点是否与示教点重合。
- 工件坐标是否随动:托盘移动后是否重新标定工件原点,或者是否使用了视觉重新定位工件坐标。
掌握这五个坐标系的转换关系后,后续的手眼标定实操、视觉引导抓取程序编写、以及多目标定位都会变得有章可循。核心思路始终是:视觉负责在图像中找到目标,标定矩阵负责把目标位置翻译到机器人世界,工具坐标和工件坐标负责让这个位置真正可执行、可复用。