坐标系标定
机器人编程前必须标定坐标系,否则示教点在换工具或换工件后完全不可用。
三套坐标系
| 坐标系 | 作用 |
|---|---|
| 工具坐标系(TCP) | 末端工具的位置/方向,如焊枪尖、夹爪中心 |
| 工件坐标系 | 工件在台面上的位置,编程时点位基于它 |
| 基坐标系 | 机器人底座位置(多机联动或机器人移动时用) |
正确标定后,换工具只改 TCP、换工件只改工件坐标系,不用重示教所有点。
工具坐标系标定(TCP)
常用 四点法:
- 在工作区放一个尖锥作为固定参考点
- 让机器人用末端工具从 4 个不同姿态去戳这个点
- 每次对准后点「记录」
- 系统自动算出 TCP 偏移(X/Y/Z)
- 如需姿态,加第 5 点:沿工具 Z 轴方向抬高
入口:项目浏览器 → 机器人 → 右键 → 坐标系标定 → 选 工具坐标系 → 按向导点
工件坐标系标定
常用 三点法:
- 在工件上找 3 个参考点:原点、X 轴上一点、XY 平面上一点
- 让机器人 TCP 依次对准这 3 个点
- 每点「记录」一次
- 系统自动算出工件坐标系的位姿
基坐标系标定(多机器人)
多机联动时,需要把每台机器人的基坐标系对齐到一个世界坐标。方法:
- 在每台机器人工作区放同一组参考点
- 用每台机器人去戳这些点
- 系统算出各自的基坐标变换
- 之后所有机器人在世界坐标下说同一套语言
标定验证
标定完成后必须验证:
- 在 3D 视口里看工具轴是否指向正确方向
- 在点动面板里切到工具坐标,按 +Z 键,工具应沿自身方向移动
- 示教一个已知点,看 3D 视口里位置是否对
验证不通过 → 重新标定。
常见错误
| 现象 | 原因 |
|---|---|
| TCP 标定后工具不指向尖端 | 四点取得太靠,姿态差异不够大 |
| 工件坐标下 X 轴反了 | 第二点没取在正 X 方向上 |
| 抖动大 | 标定姿态太极端,奇异点附近误差大 |
坐标系体系总览
Darra 机器人坐标系层级遵循 ISO 9787:
World (世界)
├─ Base (机器人底座)
│ └─ Joint 1..6 (关节链)
│ └─ Flange (法兰)
│ └─ Tool 0 (默认等于法兰)
│ └─ Tool 1 (工具 1)
│ └─ Tool N (工具 N)
├─ UserFrame 1 (工件 1)
├─ UserFrame 2 (工件 2)
└─ UserFrame N
所有点位、运动指令都要明确参考哪个坐标系. 指令默认:
- 机器人 JOG: 按当前选择的坐标系
- 点位存储: 工件 / 用户坐标系 (切换工件不用重示)
- 伺服 PDO: 关节坐标 (经正运动学由 TCP 转换)
坐标系变换链
World → Base: 机器人底座相对 World 的位姿 (固定)
Base → Flange: 关节角 q₁..q₆ 由正运动学算出
Flange → Tool: 由 TCP 标定给出
World → User: 由工件坐标系标定给出
Tool → User: 动态计算, 程序里用来判断 "工具末端在工件上什么位置"
典型正向计算:
^{World}T_{Tool} = ^{World}T_{Base} · ^{Base}T_{Flange}(q) · ^{Flange}T_{Tool}
^{Base}T_{Flange}(q) 由机器人正运动学给出, 其他是用户标定的常量。
三大标定的先后顺序
必须按以下顺序执行, 否则后一步会依赖前一步的错误结果:
- 基坐标 (若多机): 先校准所有机器人到同一 World
- 工具坐标 (TCP): 工具装好后马上标 (见 TCP 标定)
- 工件坐标 (UserFrame): 用已标定好的 TCP 去标 (见 用户坐标系)
- 视觉标定 (若有相机): 用已标定好的 TCP 去标 (见 视觉标定)
坐标系精度要求对照
| 坐标系 | 典型精度 | 工业标准 | 检测方法 |
|---|---|---|---|
| Base (多机) | ±1 mm | ISO 9787 | 双机互测对点 |
| Tool (TCP) | ±0.3 mm | - | 4 点 / 6 点残差 < 0.5 mm |
| User / Work | ±0.5 mm | - | 3 点法残差 < 0.5 mm |
| Camera (手眼) | ±0.5 mm | - | 视觉叠加 vs 实物 |
SCL 代码示例
VAR
SetBase : MC_SetKinTransform;
SetTool : MC_SetKinTransform;
SetUser : MC_SetKinTransform;
END_VAR
// 设置基坐标 (若重新安装了机器人, 校准一次)
SetBase(
Robot := Robot1,
Execute := TRUE,
Frame := FRAME_BASE,
Position := (X := 1000, Y := 0, Z := 0, Rx := 0, Ry := 0, Rz := 0)
);
// 切换工具
SetTool(
Robot := Robot1,
Execute := TRUE,
Frame := FRAME_TOOL,
FrameId := 1 // Tool1
);
// 切换工件
SetUser(
Robot := Robot1,
Execute := TRUE,
Frame := FRAME_USER,
FrameId := 2 // UserFrame 2 (Pallet_B)
);
程序里随时可切 Tool / UserFrame, 后续运动指令都基于当前坐标系解释。
参数表
| 参数 | 类型 | 说明 |
|---|---|---|
| BaseId | UINT | 基坐标编号 (0 = World, 1..N = 自定义) |
| ToolId | UINT | 工具坐标编号 (0 = Flange, 1..15) |
| UserFrameId | UINT | 用户坐标编号 (0 = World/Base, 1..15) |
| CalibrationMethod | ENUM | 4P / 6P / 3P / AUTO |
| CalibrationResidual | LREAL | RMS 残差 mm |
| CalibrationDateTime | DT | 标定时间戳 |
排错清单 (综合)
| 现象 | 可能原因 | 解决 |
|---|---|---|
| 点位换工件后完全错 | 没用工件坐标系, 点位绑死到 World | 用工件系重示教关键点 |
| 换工具后 TCP 对不准 | 工具公差 | 重做 TCP 标定 |
| 多机器人 "说不同话" | 基坐标没对齐 | 标所有机器人到同一 World |
| 视觉抓取偏移 | 视觉标定过期 | 重做 视觉标定 |
程序里 SetTool(1) 无效 | ToolId 未标定或被删 | 先标定再切换 |
| TCP 标定残差大 | 4 点姿态差异不够 | 扩大姿态差异, 见 TCP |
最佳实践
- 定期抽检: 每周选 1~2 个已标点位, 让机器人回去看实际精度
- 标定证书: 每次标定自动生成报告, 归档到 MES 追溯
- 版本化配置: 坐标系配置提交 git, 改动有记录
- 换人换工具必重标: 哪怕工具型号相同, 物理换过就重标
- 温度稳定后标定: 机器人开机预热 30 min 后再标, 比冷态准
- 不要混用 World 和 UserFrame 点位: 一个项目里统一用工件坐标系
- 多工位用 UserFrame 序号: Station_A → UserFrame 1, Station_B → UserFrame 2
相关文档
- 工具坐标系 (TCP) — TCP 细节
- 用户坐标系 — 工件坐标系细节
- 视觉标定
- 机器人诊断 — 精度监控