- 精确位置比较
- 容差位置比较
下面我们分别进行详细说明。

精确位置比较
概念
精确位置比较,顾名思义,就是将当前机器人的 TCP(工具中心点)位置与程序中记录的某个目标位置进行完全一致的比较,它比较的是六个轴的角度值(关节坐标),而不是笛卡尔空间中的 X, Y, Z, U, V, W 坐标。
核心指令:POS_CMP
这是实现精确位置比较的主要指令。
语法
POS_CMP 期望位置变量, 当前位置变量, 结果变量
- 期望位置变量:一个已经记录好的位置数据,通常是
[位置数据]或[位置寄存器]。 - 当前位置变量:通常是
CR[当前机器人位置],代表机器人当前的实际位置。 - 结果变量:一个整数型信号或寄存器,用于存储比较结果。
- 结果 = 1:当前位置与期望位置完全匹配。
- 结果 = 0:当前位置与期望位置不匹配。
工作原理
POS_CMP 指令会比较两个位置数据中所有六个关节的角度值,只有在所有角度值都完全相同时,结果才为 1。即使机器人在笛卡尔空间中到达了同一个点,但如果关节角度不同(从不同方向接近),比较结果也会是 0。
示例
假设我们有一个已示教的位置 P1,我们想检查机器人是否回到了 P1 的位置。

// 程序开始
J P1 100% FINE // 移动到位置 P1
L P1 100mm/sec FINE // 直线移动到 P1,更新位置数据
// 比较当前位置是否与 P1 匹配
POS_CMP P1, CR[1], R[1]
// 根据结果进行判断
IF R[1] = 1 THEN
// 如果匹配,执行此操作
TP "Robot is at exact position P1!"
DO[1] := ON // 打开某个输出信号
ELSE
// 如果不匹配,执行此操作
TP "Robot is NOT at position P1!"
DO[1] := OFF
ENDIF
应用场景
- 安全门确认:确认机器人已经完全回到“安全位置”后,才能打开安全门。
- 特定工位的确认:确保机器人执行某个动作前,其姿态是预设的、唯一的。
- 调试:检查程序是否按预期执行,机器人是否精确地回到了某个点。
容差位置比较
概念
在现实世界的自动化应用中,由于工件定位误差、机器人重复定位精度、抓取误差等因素,机器人几乎不可能精确地回到理论上的点,我们需要一种方法来判断机器人是否“足够接近”一个目标点,这就是容差位置比较。
容差比较可以在关节空间或笛卡尔空间中进行。
核心指令:POS_CMP_TOL
这是实现容差位置比较的主要指令。
语法
POS_CMP_TOL 期望位置变量, 当前位置变量, 容差变量, 结果变量
- 期望位置变量:目标位置数据,如
[位置数据]或[位置寄存器]。 - 当前位置变量:通常是
CR[当前机器人位置]。 - 容差变量:一个包含容差数据的变量,用于定义在各个轴上的允许偏差范围。
- 结果变量:存储比较结果。
- 结果 = 1:当前位置在容差范围内。
- 结果 = 0:当前位置超出容差范围。
容差变量的定义
容差变量通常是一个 [位置数据] 类型的变量,你可以手动创建并编辑它,定义六个轴(关节或笛卡尔)的容差值。

关节空间容差 (Joint Tolerance): 定义每个关节轴允许的角度偏差。
笛卡尔空间容差 (Cartesian Tolerance): 定义在工具坐标系或用户坐标系下的平移和旋转偏差。
- 平移容差:单位通常是毫米,允许在 X, Y, Z 方向上的偏差。
- 旋转容差:单位通常是度,允许在 U, V, W(绕 X, Y, Z 轴旋转)上的偏差。
示例
假设我们要检查机器人是否在 P2 点的 10mm 范围内。
-
定义一个容差变量,在示教器上,你可以创建一个新的位置数据,
TOL_10MM,并将其值设置为[10, 10, 10, 0, 0, 0],这代表在 X, Y, Z 三个方向上的平移容差都是 10mm,旋转容差为 0。 -
编写程序:
// 示教目标位置 P2 J P2 100% FINE // 定义容差变量 (也可以在程序外预先示教好) L P2 100mm/sec FINE ! 创建一个名为 TOL_10MM 的位置数据,并编辑为 [10, 10, 10, 0, 0, 0] // 进行容差比较 POS_CMP_TOL P2, CR[1], TOL_10MM, R[2] // 根据结果进行判断 IF R[2] = 1 THEN // 如果在容差范围内,执行抓取等操作 TP "Robot is within tolerance of P2. Ready to grab!" // 执行抓取动作... ELSE // 如果超出容差范围,报警或重试 TP "Error: Robot is out of tolerance at P2!" ALARM[101] // 触发一个自定义报警 ENDIF
应用场景
- 物料抓取:检查机器人是否已经到达抓取点附近,即使工件有轻微偏移。
- 放置/装配:确认机器人是否将零件放置到了正确的区域,无需分毫不差。
- 视觉引导:视觉系统给出一个目标坐标后,机器人移动到该坐标附近,然后通过容差比较确认到位。
- 焊接/涂胶路径的起点/终点确认:确认焊枪或胶枪已经到达了工艺路径的起始或结束区域。
总结与对比
| 特性 | 精确位置比较 (POS_CMP) |
容差位置比较 (POS_CMP_TOL) |
|---|---|---|
| 比较方式 | 精确比较六个关节角度值 | 比较在指定容差范围内的位置 |
| 容差设置 | 无容差,必须完全一致 | 需要定义一个容差变量(关节或笛卡尔) |
| 比较空间 | 仅关节空间 | 关节空间 或 笛卡尔空间(更常用) |
| 结果 | 1 (完全匹配) 或 0 (不匹配) |
1 (在容差内) 或 0 (超差) |
| 适用场景 | 安全位置确认、姿态唯一性确认 | 物料抓取、放置、视觉引导等有误差容忍的应用 |
| 指令 | POS_CMP |
POS_CMP_TOL |
最佳实践与注意事项
- 理解关节 vs 笛卡尔:
POS_CMP是基于关节的,而POS_CMP_TOL默认是基于笛卡尔空间的,在大多数应用中,你关心的是工具在空间中的位置,而不是关节角度,POS_CMP_TOL更常用。 - 容差要合理:设置的容差值不能小于机器人的重复定位精度,否则机器人会因为自身的微小抖动而频繁“超差”,也不能过大,以免导致位置错误但未被检测到。
- 位置寄存器
CR的使用:CR[当前机器人位置]是一个非常强大的工具,它代表了机器人任何时刻的实时位置,在进行位置比较时,通常会先读取CR的值到一个临时变量或直接使用。 - 位置数据
[ ]的更新:当你移动机器人到一个新位置并用L指令时,该位置数据会更新,确保你比较的是“期望”的原始位置,而不是被更新后的位置。
希望这份详细的解释能帮助你更好地理解和使用 FANUC 机器人的位置比较功能!