1. RTDE协议入门

在UR机器人的控制体系中,RTDE(Real-Time Data Exchange,实时数据交换)并不是一个“替代一切”的万能接口,而是专门解决高频、双向、结构化数据交换问题的一条实时通道。要理解它的定位,先要看清UR控制器对外提供的几条主要通信路径各自擅长什么。

Dashboard Server 面向的是“控制柜级别的命令与状态”,例如上电、刹车释放、加载程序、播放程序、查询机器人模式。它基于文本命令,响应是字符串,适合做启动流程和状态巡检,但刷新频率低,不适合以毫秒级周期读取关节角度。URScript 是运行在控制器内部的脚本语言,能直接访问机器人状态、I/O、运动指令,适合编写机器人本体的逻辑,但外部PC要调用它通常需要通过端口或程序触发,实时性和数据吞吐都受限。Modbus TCP/RTU 是工业现场常见的寄存器式通信,适合与PLC、远程I/O交换少量开关量和整数,但它的数据模型是寄存器,不是UR内部语义化的关节、TCP位姿、力矩等结构,映射繁琐且带宽有限。

RTDE 的设计目标正好补上这块空白:它由UR控制器主动维护一份“可订阅的数据配方”,外部客户端通过TCP连接声明自己关心哪些字段,控制器按设定频率(常见如125Hz、500Hz)推送数据;同时客户端也可以向控制器写入少量输出字段,例如速度缩放、数字输出、标准数字输出等。它交换的是带名字、带类型、带时间戳的结构化数据,而不是字符串或寄存器。

UR控制体系中的四条通信路径与RTDE定位 UR控制器 实时内核 + 非实时服务 RTDE服务 / Dashboard / URScript / Modbus Dashboard Server 文本命令 / 字符串响应 上电、加载、播放、查询模式 低频 · 控制柜级 URScript 控制器内部脚本 运动、I/O、逻辑 本体逻辑 · 外部调用受限 Modbus TCP/RTU 寄存器 / 线圈 PLC、远程I/O 少量开关量 · 整数映射 RTDE 结构化字段 / 时间戳 高频双向数据交换 125Hz / 500Hz · 外部PC RTDE 数据交换基本原理 外部客户端(PC/PLC) connect() → 订阅字段 recv() / send() RTDE 服务 按配方打包数据 周期推送 / 接收写入 机器人实时状态 关节角、TCP位姿 力矩、I/O、速度缩放 订阅/写入 周期数据 读取 状态

从图中可以看到,RTDE 位于“外部客户端”和“机器人实时状态”之间,是一条由控制器主动维护的、按配方打包的周期数据通道。它的核心机制可以概括为三步:连接与握手、声明数据配方、周期交换。客户端连接控制器的30004端口(RTDE默认端口),协商协议版本;随后发送一份“输入/输出字段列表”,告诉控制器“我关心哪些字段、以什么频率推送”;控制器确认后,便按该频率持续发送数据包,客户端也可以在同一连接上写入允许的输出字段。

RTDE 的字段是语义化的,常见的有:actual_q(实际关节角度,6个double)、actual_TCP_pose(TCP位姿,6个double)、actual_TCP_speed、actual_joint_torques、robot_mode、safety_status、runtime_state、digital_input_bits、standard_analog_input0等。输出字段则包括 speed_slider_mask、speed_slider_fraction、standard_digital_output_mask、standard_digital_output、input_bit_register_0 等。这种“按名字订阅”的方式,比 Modbus 的寄存器映射直观得多,也比 Dashboard 的字符串解析更适合程序化处理。

典型应用场景主要有四类。第一类是外部实时监控与数据采集:上位机以125Hz读取关节角、TCP位姿和力矩,用于绘制轨迹、做碰撞检测或记录工艺数据。第二类是外部实时控制:通过写入速度缩放、数字输出或寄存器,让外部视觉/力控程序影响机器人行为,例如根据视觉结果动态调整速度倍率。第三类是与外部运动规划器配合:外部PC计算好关节目标后,通过RTDE写入寄存器,再由URScript程序读取寄存器并执行 servoj 或 movej,形成“外部规划 + 内部执行”的架构。第四类是状态机与安全逻辑:读取 robot_mode、safety_status、runtime_state,判断机器人是否处于运行、暂停、保护停止等状态,从而决定外部程序下一步动作。

学习建议:初学RTDE时,先用Python的 rtde_receive 接口订阅 actual_q 和 actual_TCP_pose,以125Hz打印数据,观察机器人静止和运动时的数值变化;确认能稳定接收后,再尝试用 rtde_control 写入 speed_slider_fraction,把速度倍率从1.0改为0.5,观察机器人运动速度是否明显下降。这个最小闭环能帮助你建立对“订阅—推送—写入—生效”全过程的直观认识。