用户坐标系 / 工件坐标系
用户坐标系 (User Frame) 又称工件坐标系 (Work Object Frame), 是以工件或工作台为原点的坐标系。机器人程序里的点位通常相对于工件坐标系定义, 这样工件在台面上的安放角度或位置发生变化时, 只需重标工件坐标系, 点位自动跟随偏移, 不用重新示教。
为什么要工件坐标系
直接在 World 坐标下示教的问题:
| 情况 | 发生了什么 | 后果 |
|---|---|---|
| 工件换位置 | 工件被人移到别的台面 | 所有点位必须重示 |
| 工件倾斜 | 台面不水平, 工件斜 5° | 所有点位偏了 |
| 多工位重复 | 4 个工位上都做同一动作 | 每个工位重示教一遍 |
| 工件型号切换 | 同一工装上换型 | 每个型号独立一套点位 |
用了工件坐标系:
- 工件换位置 → 只标新位置, 点位自动偏移
- 倾斜 → 标出倾斜角, 程序不改
- 多工位 → 每工位一个用户坐标, 同一程序加
SetUserFrame(N)切换 - 换型 → 每型号独立用户坐标
前置条件
- 已完成 工具坐标系标定 (否则基于 TCP 的对点会不准)
- 工件或工装已固定到位, 标定期间不可移动
- 工件上能找到 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}。
操作步骤
- 在工件上找可重复识别的 3 个点, 优先 (按精度降序):
- 加工好的孔中心 (用对点销)
- 尖锐棱角
- 夹具定位销
- 贴一个十字标识贴纸 (精度差, 不推荐)
- 项目浏览器 → 机器人 → 右键 → 坐标系标定 → 用户坐标系 → 3 点法
- 输入名称, 如
Work_Pallet_A - 切到 工具坐标系 点动 (这样点动方向直观)
- 将 TCP 对准 P1, 点 记录原点
- 将 TCP 对准 P2 (X 轴方向), 点 记录 X 轴点
- 将 TCP 对准 P3 (XY 平面内), 点 记录 XY 平面点
- 点 计算, 系统给出 User Frame 的位姿并在 3D 视口显示绿色坐标系
- 确认 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, 点位不变
参数表
| 参数 | 类型 | 单位 | 范围 | 默认 | 说明 |
|---|---|---|---|---|---|
| UserId | UINT | - | 1..15 | 0 | 用户坐标编号, 0 = World |
| OrgX / Y / Z | LREAL | mm | - | 0 | 原点位置 |
| RotX / Y / Z | LREAL | ° | ±180 | 0 | 姿态 RPY |
| RefToolId | UINT | - | 0..15 | 0 | 标定时使用的工具号 (记录用, 不影响解释) |
排错清单
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 3D 视口坐标系方向反了 | P2 / P3 取错象限 | 重取 P2 (严格在 +X) 和 P3 (严格在 +Y 侧) |
| 工件被移动后程序还错位 | 忘了重标 | 工件每次重置必重标 |
| 标定残差大 (> 2 mm) | 3 个点太靠 (< 50 mm) | 拉开 3 个点距离, 建议 > 200 mm |
| 点位偏移方向完全反 | UserId 没切到 | 程序入口 SetUserFrame(N) 别忘 |
| X/Y 互换 | P2 不小心取成 Y 方向点 | 重取, 先 X 再 XY |
最佳实践
- 三点分散: 3 个点形成的三角形越接近等边, 方向越准; 三点共线或近似共线 → 奇异 → 标定拒绝
- 优先用加工孔: 用对点销插入孔中心, 比肉眼对尖锐棱角精度高一个数量级
- 先标 X 再标 Y: 记住向导顺序, 错了就重来
- 大工件多点标: 大型车身用 6 点法 (冗余最小二乘), 减小单点误差影响
- 命名有意义:
Work_Pallet_A_Station_3, 别叫UserFrame1 - 保存标定报告: 每次标定系统自动生成带日期的报告, 归档到 MES 方便追溯
- 多机器人协同: 所有机器人标定同一个工件坐标, 它们就能在 UserFrame 下说同一套坐标语言, 交接工件很方便
4 点 / 6 点冗余标定
3 点法只满足最小约束, 误差无法统计。对于高精度应用 (焊装 / 激光切割), 推荐多点冗余:
- 4 点法: P1 (原点) + P2 (X) + P3, P4 (XY 面多点), 最小二乘拟合平面法向 = Z 轴
- 6 点法: 3 个面 (XY / XZ / YZ) 各 2 点, 最小二乘解 6 个自由度, 残差可评估精度
残差 > 0.5 mm 一般不接受。
相关文档
- 工具坐标系 (TCP)
- 坐标系标定总览
- 点位管理
- PLCopen MC 功能块 —
MC_SetCoordinateTransform