4. 视觉引导抓取坐标系与标定原理

在UR协作机器人视觉引导抓取系统中,所有“抓哪里、怎么抓、相机看到的是谁”的问题,最终都要落到坐标系上。坐标系是描述位置与姿态的数学基准,标定则是建立不同坐标系之间变换关系的过程。如果坐标系定义混乱或标定误差过大,即使视觉算法识别出目标,机器人也可能抓偏、抓空甚至发生碰撞。本节围绕基坐标系、工具坐标系、工件坐标系、相机坐标系以及手眼标定数学模型展开,帮助读者建立完整的空间变换链条。

一、五个核心坐标系的角色分工

UR机器人系统中,最基础的坐标系是基坐标系(Base Frame),通常定义在机器人底座安装面中心,Z轴向上,X、Y轴按右手定则分布。它是机器人所有运动指令的参考原点,UR的示教点位、MoveJ/MoveL目标点默认都相对于基坐标系描述。基坐标系一旦确定,不应在运行中随意更改,否则所有已示教点位都会失效。

工具坐标系(Tool Frame / TCP)定义在末端执行器上,描述夹爪或吸盘的中心点与姿态。UR通过TCP设置告诉控制器“工具尖端在哪里”,例如夹爪指尖中心相对法兰盘偏移为(0, 0, 180 mm),绕Y轴旋转180°。TCP的准确性直接影响抓取点是否落在目标中心。若TCP设置偏差5 mm,视觉给出的抓取点就会整体偏移5 mm。

工件坐标系(Work Object Frame)绑定在被抓取工件或料框上,用于描述目标在工件局部坐标系中的位置。当工件摆放位置变化时,只需更新工件坐标系,而不必重新示教所有抓取点。在视觉引导中,相机识别出的目标位姿通常先转换到工件坐标系,再通过标定关系映射到机器人基坐标系。

相机坐标系(Camera Frame)以相机光心为原点,Z轴沿光轴指向拍摄方向,X、Y轴与图像平面平行。视觉算法输出的目标位置和姿态都在相机坐标系下。相机坐标系与机器人基坐标系之间的变换,正是手眼标定要解决的核心问题。

此外,实际系统中还存在法兰坐标系(Flange Frame),即UR工具法兰盘中心,它是工具坐标系和相机坐标系安装的物理基准。理解法兰坐标系有助于排查TCP和相机安装偏差。

视觉引导抓取坐标系变换链 基坐标系 Base 机器人底座中心 Z轴向上,右手定则 法兰坐标系 Flange UR工具法兰中心 由正运动学求得 工具坐标系 TCP 夹爪/吸盘中心 相对法兰偏移+旋转 相机坐标系 Camera 光心为原点 Z轴沿光轴 工件坐标系 Work 绑定料框/工件 描述目标局部位姿 正运动学 TCP设置 手眼标定 视觉识别目标位姿 工件坐标系标定 完整变换链 目标在相机系 → 相机系到基坐标系(手眼标定)→ 基坐标系到工具系(TCP) 最终抓取位姿 = T_base_tool × T_tool_camera × P_camera_target

二、手眼标定的数学模型

手眼标定要解决的是相机坐标系与机器人坐标系之间的刚体变换关系。根据相机安装方式不同,分为“眼在手上”(Eye-in-Hand)和“眼在手外”(Eye-to-Hand)两种。UR协作机器人常用眼在手上方式,相机固定在末端法兰或手腕附近,随机器人一起运动。

眼在手上标定的经典数学模型为 AX = XB。其中:A表示机器人末端在两次不同位姿之间的相对运动,由机器人正运动学计算得到;B表示相机在两次位姿之间观察同一标定板得到的相对运动,由相机外参计算得到;X就是待求的相机相对于法兰(或工具)的固定变换矩阵。该方程的本质是:机器人动一段,相机也跟着动一段,但相机与法兰之间的相对关系不变。

实际求解时,通常让UR机器人带着相机从多个不同位姿拍摄固定标定板,记录每组位姿下的机器人法兰位姿和相机识别到的标定板位姿。设第i次和第j次位姿构成一对运动,则可建立多个AX=XB方程,通过Tsai-Lenz、Park或Daniilidis等算法求解X。求解完成后,还需用未参与标定的位姿做验证:将标定板角点通过X变换到机器人基坐标系,与机器人实际到达位置比较,残差通常应小于1 mm,角度残差小于0.5°。

眼在手外方式则不同,相机固定在工作台上方,标定的是相机坐标系到基坐标系的变换。此时机器人末端夹持标定板运动,通过多组“机器人末端位姿—标定板在相机中的位姿”数据,求解相机到基坐标系的固定变换。其数学形式仍可归结为AX=ZB类问题,其中Z为相机到基坐标系的变换。

三、标定实操中的关键参数与判断

以UR5e搭配腕部相机为例,一次典型手眼标定流程如下。首先制作或选用标定板,例如棋盘格9×6、方格边长20 mm,或ArUco标记板。将标定板固定在机器人工作范围内,确保相机在多个位姿下都能完整拍摄。然后手动示教或程序控制机器人,使相机从至少10~15个不同位置和角度拍摄标定板,位姿应尽量分散,避免所有拍摄点集中在同一平面或同一方向。

每个拍摄点记录两组数据:一是UR控制器读出的法兰位姿(x, y, z, rx, ry, rz),二是相机识别标定板得到的位姿。注意UR使用旋转矢量表示姿态,而标定算法通常使用旋转矩阵或四元数,需要先做转换。数据采集完成后,运行标定算法得到X矩阵,即相机到法兰的变换。

标定结果是否可信,可从三个指标判断:第一,重投影误差,即用标定结果将标定板角点投影回图像,与实际检测角点的像素偏差,一般应小于0.5像素;第二,机器人运动验证残差,选取若干未参与标定的位姿,让机器人TCP去触碰标定板上的已知点,位置偏差应小于1 mm;第三,抓取验证,用标定结果引导机器人抓取实际工件,观察抓取成功率与偏移方向。若残差偏大,常见原因包括:标定板固定不牢、机器人位姿变化范围太小、相机内参不准、法兰位姿与图像时间戳不同步等。

标定不是一次性的工作。相机受到碰撞、更换镜头、调整安装位置或机器人维修后,都应重新标定。日常生产中可定期用标定板做快速验证,若残差超过阈值再执行完整标定。

四、坐标系之间的变换关系与抓取计算

视觉引导抓取的最终目标,是把相机看到的目标位姿转换成机器人可以执行的TCP目标位姿。设目标在相机坐标系下的位姿为 P_cam,相机到法兰的变换为 T_flange_cam(由手眼标定得到),法兰到基坐标系的变换为 T_base_flange(由机器人正运动学得到),则目标在基坐标系下的位姿为:

P_base = T_base_flange × T_flange_cam × P_cam

若希望工具TCP去抓取目标,还需考虑工具坐标系到法兰的变换 T_flange_tool,则TCP目标位姿为:

P_tool_target = T_base_flange × T_flange_cam × P_cam × T_tool_flange

其中 T_tool_flange 是 T_flange_tool 的逆。实际编程时,UR的坐标系变换可通过pose_trans、pose_inv等函数实现。例如在URScript中,可先读取当前法兰位姿,再乘以手眼标定矩阵和相机目标位姿,得到基坐标系下的抓取点,最后用movel发送给机器人。

需要特别注意的是姿态表示的一致性。UR使用旋转矢量(轴角),而相机视觉库常输出旋转矩阵或四元数。在变换链中必须统一表示形式,否则会出现姿态翻转或角度跳变。建议在程序中统一转换为旋转矩阵进行乘法运算,最后再转回UR可接受的旋转矢量格式。

五、常见坐标系问题与排查思路

当抓取出现偏差时,可按坐标系链条逐段排查。若所有目标都朝同一方向偏移固定距离,通常是TCP设置错误或工具坐标系偏移未更新;若偏移量随机器人位姿变化而变化,则更可能是手眼标定矩阵不准;若目标在图像中识别正确但机器人抓取位置随机跳动,需检查相机与机器人之间的时间同步和坐标变换是否使用了过期数据。

另一个常见问题是工件坐标系未随料框移动而更新。例如料框被重新摆放后,仍使用旧的工件坐标系,导致所有抓取点整体偏移。解决方法是每次换料框后重新标定工件坐标系,或使用视觉识别料框上的基准标记自动更新工件坐标系。

总之,基坐标系、工具坐标系、工件坐标系、相机坐标系和手眼标定矩阵共同构成了视觉引导抓取的空间基准链。理解每个坐标系的定义、变换方向和误差来源,是保证UR机器人稳定抓取的基础。实际工程中,建议把标定参数、验证残差和更新日期记录在案,形成可追溯的标定档案,便于后续维护和问题定位。