3. UR焊接工件坐标系标定与多工件偏移

为什么焊接程序需要工件坐标系

焊枪TCP标定解决的是“焊丝尖端在哪里”,而工件坐标系解决的是“焊缝在哪里”。如果所有示教点都直接记录在UR基坐标系下,一旦工件被重新装夹、更换夹具或放到另一台变位机上,原程序就会整体偏移,必须重新示教。工件坐标系的作用是把焊接轨迹表达在“工件自己的坐标”里,装夹位置变化时只需更新工件坐标系,程序即可复用。

UR本身没有独立的“工件坐标系”寄存器,工程上通常用特征坐标系(Feature)+ 偏移量来实现:先在一个基准装夹位置标定一个工件坐标系,把焊缝示教点全部记录在该坐标系下;再为每个装夹位置测量一个偏移量,运行时把偏移量叠加到基准坐标系上,得到当前工件的实际坐标系。

三点法标定工件坐标系

三点法是最常用的工件坐标系标定方式,需要工件上三个可稳定触碰的特征点:

  • 原点 O:工件坐标系的原点,通常选在工件角点或定位销中心。
  • X方向点 Px:沿工件一条主边(如焊缝方向)取一点,O→Px 定义 X 轴。
  • Y方向点 Py:在工件平面内、与X轴大致垂直的方向取一点,用于确定 XY 平面和 Y 轴。

标定时用已标定好的焊枪TCP(或专用尖针)依次触碰这三点,记录各点在UR基坐标系下的位置,然后按以下关系计算工件坐标系:

X轴单位向量:  ex = normalize(Px - O)
临时向量:     t  = Py - O
Z轴单位向量:  ez = normalize(cross(ex, t))
Y轴单位向量:  ey = cross(ez, ex)

工件坐标系姿态 R = [ex, ey, ez]   (3x3)
工件坐标系原点 = O

注意:三点不能共线,且 O、Px、Py 应尽量分散,距离越远、夹角越接近90°,标定出的坐标系越稳定。若工件特征点无法直接触碰,可用尖针替代焊枪,但必须保证尖针TCP已标定。

三点法确定的是工件坐标系相对UR基坐标系的位姿。标定完成后,建议在工件上再取1~2个未参与标定的验证点,用计算出的坐标系反算其理论位置,与实际触碰位置比较,偏差应小于焊接工艺允许值(一般≤0.5 mm)。

多工件偏移量的建立

多工件偏移的核心思想是:只标定一次基准工件坐标系,其余装夹位置只测量偏移量。偏移量是当前工件坐标系相对基准工件坐标系的位姿差,通常用4个参数描述平面装夹场景:

参数含义典型来源
Δx沿基准X方向的平移定位销/挡块位置差
Δy沿基准Y方向的平移夹具槽位差
Δz沿基准Z方向的平移工件厚度/垫片差
Δθz绕Z轴的旋转工件摆放角度差

偏移量的获取方式有两种:一是用焊枪TCP触碰当前工件的三个特征点,与基准坐标系的理论特征点比较,反算出偏移量;二是对于重复定位精度高的夹具,直接使用夹具设计的名义偏移量,再用验证点确认。

偏移量叠加与程序复用

设基准工件坐标系为 F_base,当前工件的偏移量为 D = (Δx, Δy, Δz, Δθz),则当前工件坐标系为:

F_current = F_base * Trans(Δx, Δy, Δz) * RotZ(Δθz)

焊接程序中所有示教点都记录在 F_base 下。运行时,UR控制器把每个点先转换到基坐标系,再叠加偏移量,实际执行位置为:

P_base = F_base * P_teach
P_exec = F_current * P_teach = F_base * D * P_teach

这样同一套焊接程序只需切换偏移量 D,就能适配不同装夹位置。下面这张图展示了基准坐标系、偏移量、当前坐标系与程序点之间的数据流关系。

工件坐标系标定与多工件偏移数据流 基准工件坐标系标定 触碰 O、Px、Py 三点 ex = normalize(Px−O) ez = normalize(ex × (Py−O)) ey = ez × ex → F_base (R, O) 焊缝示教点(记录在F_base下) P1_teach, P2_teach, ... 含位置 + 姿态 与装夹位置无关 → 程序可复用 多工件偏移量 D Δx, Δy, Δz, Δθz 来源:触碰测量 / 夹具名义值 每个装夹位置一组 → 切换D即切换工件 坐标系合成 F_current = F_base × Trans(Δx, Δy, Δz) × RotZ(Δθz) P_exec = F_current × P_teach UR控制器执行 焊枪按当前工件坐标系走焊缝 验证点复核 偏差 ≤ 0.5 mm 则通过

实操:标定与偏移量建立流程

  1. 准备:确认焊枪TCP已标定并验证;在工件上标记 O、Px、Py 三个特征点,并记录它们在工件图纸上的理论坐标。
  2. 标定基准坐标系:手动移动UR,用焊枪尖端依次触碰 O、Px、Py,记录三个基坐标系位置。按前述公式计算 F_base。
  3. 记录示教点:在基准装夹位置示教焊缝关键点,全部记录在 F_base 下。
  4. 测量偏移量:把工件装到第二个装夹位置,再次触碰 O、Px、Py,得到 O'、Px'、Py'。计算 D = F_base⁻¹ × F_current,提取 Δx、Δy、Δz、Δθz。
  5. 验证:在第二个装夹位置取一个未参与标定的验证点,用 F_current 反算其理论位置,与实际触碰位置比较,偏差应≤0.5 mm。
  6. 批量建立:对每个装夹位置重复第4~5步,形成偏移量表。

偏移量表(可直接填写)

装夹位号Δx (mm)Δy (mm)Δz (mm)Δθz (°)验证点偏差 (mm)是否可用
基准位 A0000—是
位 B+120.00000.3是
位 C+240.00000.4是
位 D0+150.0000.2是
位 E+120.0+150.0000.5是

表中数值为示例,实际应以现场触碰测量结果为准。若某位验证点偏差超过工艺允许值,应检查夹具重复定位精度、工件来料一致性或标定触碰点是否准确。

偏移量中的旋转分量 Δθz 必须与平移分量一起使用。如果只加平移而忽略旋转,当工件摆放角度有偏差时,焊缝末端会出现明显错位。对于平面装夹,通常只需 Δx、Δy、Δθz;若工件厚度或垫片高度变化,再补 Δz。

程序中的偏移量切换

在UR Polyscope中,可用一个整数变量 fixture_id 选择当前装夹位,再用 Switch 或赋值语句把对应的偏移量写入位姿变量。例如:

# 伪代码示意:根据装夹位号选择偏移量
if fixture_id == 1:
    offset = p[0, 0, 0, 0, 0, 0]        # 基准位
elif fixture_id == 2:
    offset = p[0.120, 0, 0, 0, 0, 0]    # 位B,单位m
elif fixture_id == 3:
    offset = p[0.240, 0, 0, 0, 0, 0]    # 位C
# 实际执行点 = 基准坐标系下的示教点 叠加 offset
target = pose_trans(F_base, pose_trans(offset, P_teach))

注意UR中位姿平移单位是米,表中mm需除以1000。旋转分量若不为零,应使用 pose_trans 或旋转向量正确合成,不要简单相加欧拉角。

常见问题与判断

  • 验证点偏差大:优先检查三点是否共线、触碰点是否在同一工件表面、TCP是否松动。
  • 换位后焊缝整体偏移:检查偏移量符号方向是否与基准坐标系一致,Δx/Δy 是否用错轴。
  • 焊缝角度不对:检查 Δθz 是否遗漏或旋转中心是否选在工件原点。
  • 不同工件之间差异大:说明来料一致性差,应增加来料定位或改用视觉/激光寻位。