跳到主要内容

用户坐标系 / 工件坐标系

用户坐标系 (User Frame) 又称工件坐标系 (Work Object Frame), 是以工件工作台为原点的坐标系。机器人程序里的点位通常相对于工件坐标系定义, 这样工件在台面上的安放角度或位置发生变化时, 只需重标工件坐标系, 点位自动跟随偏移, 不用重新示教。

为什么要工件坐标系

直接在 World 坐标下示教的问题:

情况发生了什么后果
工件换位置工件被人移到别的台面所有点位必须重示
工件倾斜台面不水平, 工件斜 5°所有点位偏了
多工位重复4 个工位上都做同一动作每个工位重示教一遍
工件型号切换同一工装上换型每个型号独立一套点位

用了工件坐标系:

  • 工件换位置 → 只标新位置, 点位自动偏移
  • 倾斜 → 标出倾斜角, 程序不改
  • 多工位 → 每工位一个用户坐标, 同一程序加 SetUserFrame(N) 切换
  • 换型 → 每型号独立用户坐标

前置条件

  1. 已完成 工具坐标系标定 (否则基于 TCP 的对点会不准)
  2. 工件或工装已固定到位, 标定期间不可移动
  3. 工件上能找到 3 个特征点: 原点、X 轴参考、XY 平面参考

3 点法 — 标准工件坐标系

原理

让 TCP 依次对准工件上 3 个参考点:

  • P1 (Origin): 工件坐标原点
  • P2 (X-axis): 在工件 +X 方向上的任意点
  • P3 (XY-plane): 在工件 +XY 平面上、且 +Y 分量非零的任意点

计算:

x_u = normalize(P2 - P1)
v = P3 - P1
y_u = normalize(v - (v · x_u) · x_u)
z_u = x_u × y_u
origin_u = P1
R_user = [x_u, y_u, z_u]

得到用户坐标系相对于 World (或 Base) 的 4×4 齐次矩阵 ^{World}T_{User}

操作步骤

  1. 在工件上找可重复识别的 3 个点, 优先 (按精度降序):
    • 加工好的孔中心 (用对点销)
    • 尖锐棱角
    • 夹具定位销
    • 贴一个十字标识贴纸 (精度差, 不推荐)
  2. 项目浏览器 → 机器人 → 右键 → 坐标系标定用户坐标系3 点法
  3. 输入名称, 如 Work_Pallet_A
  4. 切到 工具坐标系 点动 (这样点动方向直观)
  5. 将 TCP 对准 P1, 点 记录原点
  6. 将 TCP 对准 P2 (X 轴方向), 点 记录 X 轴点
  7. 将 TCP 对准 P3 (XY 平面内), 点 记录 XY 平面点
  8. 计算, 系统给出 User Frame 的位姿并在 3D 视口显示绿色坐标系
  9. 确认 X/Y/Z 三个轴朝向符合预期, 点 保存

适用场景

场景标定要点
平面工装 (码垛盘)P1 = 左下角, P2 = 右下角, P3 = 左上角
圆盘工件P1 = 圆心, P2 = 0° 刻度, P3 = 90° 刻度 (圆心靠夹具销定)
斜面 (倾斜夹具)P1/P2/P3 都在斜面上, 用户坐标系的 Z 轴会自动沿斜面法线
车身 (汽车焊装)P1 = 基准孔, P2 = 定位孔, P3 = 副基准
多工位每工位独立用户坐标, 程序里 SetUserFrame(N) 切换

使用方式

示教器侧: 切到用户坐标点动

切到用户坐标系后, 按 +X/+Y/+Z 机器人沿工件定义的方向移动, 方便精调点位。

程序侧: 点位引用工件系

VAR
pHome : ROBOT_POS := (X := 0, Y := 0, Z := 200); // 相对 UserFrame
pPick : ROBOT_POS := (X := 100, Y := 50, Z := 0);
MoveJob : MC_MoveLinearAbsolute;
END_VAR

SetUserFrame(Robot1, UserId := 1); // 切到工件坐标系 1 (Pallet_A)
SetTool(Robot1, ToolId := 1); // 切到工具 1

MoveJob(Robot := Robot1, Execute := TRUE,
Position := pPick, // pPick 自动基于 UserFrame1 解释
Velocity := 100.0);

当工件从 Pallet_A 搬到 Pallet_B, 只需:

SetUserFrame(Robot1, UserId := 2);          // 换到 Pallet_B, 点位不变

参数表

参数类型单位范围默认说明
UserIdUINT-1..150用户坐标编号, 0 = World
OrgX / Y / ZLREALmm-0原点位置
RotX / Y / ZLREAL°±1800姿态 RPY
RefToolIdUINT-0..150标定时使用的工具号 (记录用, 不影响解释)

排错清单

现象可能原因解决方法
3D 视口坐标系方向反了P2 / P3 取错象限重取 P2 (严格在 +X) 和 P3 (严格在 +Y 侧)
工件被移动后程序还错位忘了重标工件每次重置必重标
标定残差大 (> 2 mm)3 个点太靠 (< 50 mm)拉开 3 个点距离, 建议 > 200 mm
点位偏移方向完全反UserId 没切到程序入口 SetUserFrame(N) 别忘
X/Y 互换P2 不小心取成 Y 方向点重取, 先 X 再 XY

最佳实践

  1. 三点分散: 3 个点形成的三角形越接近等边, 方向越准; 三点共线或近似共线 → 奇异 → 标定拒绝
  2. 优先用加工孔: 用对点销插入孔中心, 比肉眼对尖锐棱角精度高一个数量级
  3. 先标 X 再标 Y: 记住向导顺序, 错了就重来
  4. 大工件多点标: 大型车身用 6 点法 (冗余最小二乘), 减小单点误差影响
  5. 命名有意义: Work_Pallet_A_Station_3, 别叫 UserFrame1
  6. 保存标定报告: 每次标定系统自动生成带日期的报告, 归档到 MES 方便追溯
  7. 多机器人协同: 所有机器人标定同一个工件坐标, 它们就能在 UserFrame 下说同一套坐标语言, 交接工件很方便

4 点 / 6 点冗余标定

3 点法只满足最小约束, 误差无法统计。对于高精度应用 (焊装 / 激光切割), 推荐多点冗余:

  • 4 点法: P1 (原点) + P2 (X) + P3, P4 (XY 面多点), 最小二乘拟合平面法向 = Z 轴
  • 6 点法: 3 个面 (XY / XZ / YZ) 各 2 点, 最小二乘解 6 个自由度, 残差可评估精度

残差 > 0.5 mm 一般不接受。

相关文档