FANUC 机器人 PR 寄存器

FANUC 机器人 PR 寄存器(位置寄存器)完全解析

PR(Position Register,位置寄存器)是 FANUC 机器人系统中核心的位置存储与操作单元,用于记录机器人关节坐标、笛卡尔坐标(位置 + 姿态)、工具坐标等关键位置信息,是机器人编程(TP 程序、Karel 程序)中实现位置灵活控制的核心工具。

一、PR 寄存器基础属性

1. 基本定义

  • 数量:标准配置下提供PR[1]~PR[99](部分高端型号可扩展至 PR [199]/PR [299]),支持自定义命名(如 PR [HOME]、PR [PICK])。
  • 存储格式
    • 关节型(JNT):存储 J1~J6 轴的关节角度(°);
    • 笛卡尔型(POS):存储 X/Y/Z(位置,mm)+W/P/R(姿态,°),支持世界坐标、用户坐标、工具坐标等坐标系。
  • 访问权限:可通过 TP 示教器、TP 程序、Karel 程序、上位机(如 Socket/MACRO)读写,需%RW 访问权限(Karel 程序)。

2. 核心用途

  • 存储固定点位(如抓取位、放置位、原点);
  • 动态计算位置(如偏移、插值、轨迹修正);
  • 与外部设备交互(如接收上位机下发的目标位置);
  • 记录机器人当前位置(如故障时的位置回溯)。

二、PR 寄存器的操作方式

1. TP 示教器手动操作

(1)查看 / 修改 PR 值
  1. 进入「位置」→「位置寄存器」界面;
  2. 选择目标 PR 号(如 PR [1]);
  3. 切换坐标系(关节 / 世界 / 用户 / 工具);
  4. 直接输入数值(如 X=100.0,Y=200.0,Z=300.0),或通过「当前位置」将机器人当前位置写入 PR。
(2)复制 / 粘贴 PR 值
  • 选中 PR [1] → 「编辑」→「复制」→ 选中 PR [2] →「粘贴」,快速复用位置。

2. TP 程序中操作 PR 寄存器

(1)基础赋值

tp

-- 将机器人当前位置写入PR[1](世界坐标系) PR[1]=LPOS[1] ; LPOS[1]表示当前位置(世界坐标) -- 直接赋值笛卡尔坐标(X/Y/Z/W/P/R) PR[2]=(X100.0,Y200.0,Z300.0,W0.0,P0.0,R0.0) -- 赋值关节坐标(J1~J6) PR[3]=(J10.0,J20.0,J30.0,J40.0,J50.0,J60.0) 
(2)位置偏移(核心用法)

tp

-- PR[1]的X轴偏移50mm,结果存入PR[4] PR[4]=PR[1]+(X50.0) -- 相对工具坐标系偏移(Z轴下降20mm) PR[5]=PR[1]+(Z-20.0,TOOL[1]) -- 多轴组合偏移 PR[6]=PR[1]+(X10.0,Y-5.0,R15.0) 
(3)运动指令调用 PR

tp

-- 以关节运动方式移动到PR[1]位置,速度50% J PR[1] 50% FINE -- 以线性运动方式移动到PR[2]位置,速度100mm/s L PR[2] 100mm/sec CNT10 
(4)与变量联动(动态计算)

tp

-- 定义数值变量 R[1]=50.0 -- PR[7]的X轴偏移R[1]的值 PR[7]=PR[1]+(XR[1]) 

3. Karel 程序中操作 PR 寄存器

Karel 通过GET_POS_REG/SET_POS_REG函数读写 PR 寄存器,需包含%ENVIRONMENT sysdef%INCLUDE klevpos(位置操作相关头文件)。

(1)读取 PR 寄存器值

karel

VAR pr_num : INTEGER := 1 -- PR寄存器号 pos_data : POSITION -- 存储位置数据的结构体 status : INTEGER -- 操作状态码 BEGIN -- 读取PR[1]的位置数据(笛卡尔坐标) GET_POS_REG(pr_num, pos_data, status) IF status = 0 THEN -- 提取X/Y/Z坐标(mm) WRITE('PR[1] X: ', pos_data.x, CR) WRITE('PR[1] Y: ', pos_data.y, CR) WRITE('PR[1] Z: ', pos_data.z, CR) -- 提取W/P/R姿态(°) WRITE('PR[1] W: ', pos_data.w, CR) WRITE('PR[1] P: ', pos_data.p, CR) WRITE('PR[1] R: ', pos_data.r, CR) ELSE WRITE('读取PR[1]失败,状态码: ', status, CR) ENDIF END 
(2)写入 PR 寄存器值

karel

VAR pr_num : INTEGER := 2 pos_data : POSITION status : INTEGER BEGIN -- 初始化位置数据(X=100,Y=200,Z=300,W=0,P=0,R=0) pos_data.x = 100.0 pos_data.y = 200.0 pos_data.z = 300.0 pos_data.w = 0.0 pos_data.p = 0.0 pos_data.r = 0.0 pos_data.coord = WORLD_COORD -- 指定坐标系:世界坐标 pos_data.type = POS_TYPE -- 类型:笛卡尔坐标 -- 写入PR[2] SET_POS_REG(pr_num, pos_data, status) IF status = 0 THEN WRITE('PR[2]写入成功', CR) ELSE WRITE('PR[2]写入失败,状态码: ', status, CR) ENDIF END 
(3)位置偏移计算(Karel)

karel

VAR pr1_data, pr4_data : POSITION status : INTEGER BEGIN -- 读取PR[1] GET_POS_REG(1, pr1_data, status) -- X轴偏移50mm pr4_data = pr1_data pr4_data.x = pr4_data.x + 50.0 -- 写入PR[4] SET_POS_REG(4, pr4_data, status) END 

三、PR 寄存器的高级用法

1. 坐标系切换

PR 寄存器可存储不同坐标系的位置,切换时需明确指定:

tp

-- PR[1]存储工具坐标系位置 PR[1]=(X50.0,Y0.0,Z-10.0,W0.0,P0.0,R0.0,TOOL[1]) -- PR[1]存储用户坐标系位置 PR[1]=(X100.0,Y200.0,Z300.0,W0.0,P0.0,R0.0,UFRAME[2]) 

2. 与 TCP 通信联动(结合前文 TCP 程序)

通过 Karel 的 TCP 客户端程序接收上位机下发的位置数据,写入 PR 寄存器:

karel

-- 假设从TCP读取到126字节数据,解析为X/Y/Z/W/P/R VAR recv_str : STRING[128] x_val, y_val, z_val : REAL w_val, p_val, r_val : REAL pos_data : POSITION BEGIN -- 从TCP读取数据(前文readline函数) readline(sockfd, recv_str, 126) -- 解析字符串为数值(示例:recv_str="100.0,200.0,300.0,0.0,0.0,0.0") sscanf(recv_str, "%f,%f,%f,%f,%f,%f", x_val, y_val, z_val, w_val, p_val, r_val) -- 写入PR[5] pos_data.x = x_val pos_data.y = y_val pos_data.z = z_val pos_data.w = w_val pos_data.p = p_val pos_data.r = r_val SET_POS_REG(5, pos_data, status) END 

3. 关节 / 笛卡尔坐标互转

tp

-- 将PR[1]的关节坐标转为笛卡尔坐标,存入PR[2] PR[2]=CONV_POS(PR[1],POS_TYPE,WORLD_COORD) -- 将PR[2]的笛卡尔坐标转为关节坐标,存入PR[3] PR[3]=CONV_POS(PR[2],JNT_TYPE,WORLD_COORD) 

四、常见问题与排查

1. PR 寄存器值写入失败

  • 原因 1:无读写权限 → 检查 Karel 程序是否加%RW 访问,TP 程序是否解锁「程序保护」;
  • 原因 2:坐标系不匹配 → 确认写入时指定的坐标系(如 TOOL/UFRAME)已配置;
  • 原因 3:数值超限 → 检查坐标值是否超出机器人运动范围(如 X 轴最大行程 ±1000mm)。

2. 调用 PR 运动时报警

  • 报警「位置超出范围」:PR 中的坐标超出机器人关节 / 笛卡尔软限位,需修正 PR 值;
  • 报警「姿态异常」:W/P/R 姿态超出工具坐标系允许范围,需调整姿态值;
  • 报警「坐标系未定义」:PR 中指定的 TOOL/UFRAME 未配置,需先定义工具 / 用户坐标。

3. PR 值丢失

  • 原因:未将 PR 值写入永久存储 → 在 TP 示教器中执行「位置」→「保存」,或在 Karel 中调用SAVE_POS_REG函数。

五、PR 寄存器与其他寄存器的区别

寄存器类型用途存储内容核心差异
PR位置存储 / 运动控制关节 / 笛卡尔坐标支持位置运算、运动指令调用
R数值存储 / 逻辑运算整数 / 浮点数仅支持数值计算
AR程序参数 / 临时存储数值 / 字符串仅在程序执行时有效
LR位置偏移 / 精细调整相对偏移量仅用于位置修正

PR 寄存器是 FANUC 机器人位置控制的核心,结合 TP 程序 / Karel 程序 / TCP 通信可实现灵活的位置控制,是工业现场实现机器人自动化、柔性化生产的关键工具。

Read more

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 遥感数据集 NWPU VHR-10数据集是 10个类别地理空间目标检测的挑战性数据集,共650张图片。 YOLO和COCO格式 数据集按默认划分比例:390张训练集、130张验证集、130张测试集。 手动标注了757架飞机、302艘船只、655个储罐、390个棒球场、524个网球场、159个篮球场、163个田径场、224个港口、124座桥梁和598辆车辆。 📊 一、数据集总体信息 项目描述数据集名称NWPU VHR-10(Northwestern Polytechnical University Very High Resolution 10-class Dataset)任务类型遥感图像中的地理空间目标检测(Object Detection in Remote Sensing Images)图像总数650 张(均为高分辨率遥感图像,源自 Google Earth 等平台)图像分辨率约 600×600

小米 “养龙虾”:手机 Agent 落地,智能家居十年困局被撬开

小米 “养龙虾”:手机 Agent 落地,智能家居十年困局被撬开

3月6日,小米正式推出国内首个手机端类 OpenClaw Agent 应用 ——Xiaomi miclaw,开启小范围邀请封测。这款被行业与网友戏称为小米 “开养龙虾” 的新品,绝非大模型浪潮下又一款语音助手的常规升级,而是基于自研 MiMo 大模型、具备系统级权限、全场景上下文理解能力的端侧智能体。 作为深耕智能家居领域的行业媒体,《智哪儿》始终认为:智能家居行业过去十年的迭代,始终没能跳出 “被动执行” 的底层困局。而 miclaw 的落地,不止是小米在端侧 AI 赛道的关键落子,更是为整个智能家居行业的底层逻辑重构,提供了可落地的参考范本。需要清醒认知的是,目前该产品仍处于小范围封测阶段,复杂场景执行成功率、端侧功耗表现、第三方生态适配进度等核心体验,仍有待大规模用户实测验证。本文将结合具象场景、量化数据与多维度视角,客观拆解 miclaw 的突破价值、现实挑战,以及它对智能家居行业的长期影响。 01 复盘行业困局:智能家居十年 始终困在 “被动执行”

全面的System Verilog教程:从基础到高级验证

本文还有配套的精品资源,点击获取 简介:System Verilog是用于系统级验证、芯片设计与验证以及FPGA实现的强大硬件描述语言。它扩展了Verilog的基础特性,支持高级语言结构,如类、接口、任务和函数,优化了验证流程。教程内容涵盖System Verilog的基础概念、结构化编程元素、并发与同步机制、现代验证方法学、UVM验证方法论以及标准库的应用。旨在教授学生掌握System Verilog语法和高级特性,实现高效、可维护的验证代码。 1. System Verilog概述及应用领域 1.1 System Verilog的起源与发展 System Verilog是作为硬件设计和验证领域的重要语言,由Verilog发展而来,随后被进一步扩展以满足现代电子设计自动化的需要。其发展始于20世纪90年代,目的是在原有Verilog HDL的基础上,提供更为强大的设计验证功能。 1.1.1 Verilog与VHDL的区别 虽然Verilog和VHDL都是硬件描述语言(HDL),但它们在语法和使用方法上存在差异。Verilog更接近于C语言,而VHDL的语法结构则更接近

ESP32 小智 AI 机器人入门教程从原理到实现(自己云端部署)

此博客为一篇针对初学者的详细教程,涵盖小智 AI 机器人的原理、硬件准备、软件环境搭建、代码实现、云端部署以及优化扩展。文章结合了现有的网络资源,取长补短,确保内容易于理解和操作。 简介: 本教程将指导初学者使用 ESP32 微控制器开发一个简单的语音对话机器人“小智”。我们将介绍所需的基础原理、硬件准备、软件环境搭建,以及如何编写代码实现语音唤醒和与云端大模型的对接。通过本教程,即使没有深厚的 AI 或嵌入式经验,也可以一步步制作出一个能听懂唤醒词并与人对话的简易 AI 机器人。本教程提供详细的操作步骤、代码示例和图示,帮助您轻松上手。 1. 基础原理 ESP32 架构及其在 AI 领域的应用: ESP32 是一款集成 Wi-Fi 和蓝牙的双核微控制器,具有较高的主频和丰富的外设接口,适合物联网和嵌入式 AI 应用。特别是新版的 ESP32-S3 芯片,不仅运行频率高达 240MHz,还内置了向量加速指令(