2. UR力控系统架构与通信接口

UR机器人的力控能力并不是一个孤立功能,而是由控制器内部的实时力控模块、机器人状态发布通道以及外部通信接口共同构成的完整体系。理解这套架构,是后续做柔顺装配参数整定、上位机集成和PLC联调的前提。本章从控制器内部功能模块出发,沿着力/力矩数据流一路讲到RTDE、Dashboard接口以及与上位机、PLC的集成方式。

一、控制器内部的力控功能模块

在UR控制柜(CB3/CB3.1及e-Series)中,与力控直接相关的功能模块可以分成四层:

  • 伺服与关节力矩层:每个关节驱动器输出关节力矩,控制器通过动力学模型将其映射到TCP处的六维力/力矩(Fx、Fy、Fz、Tx、Ty、Tz)。这是力控的物理基础。
  • 力/力矩传感器层:e-Series内置的FT传感器(或外置力传感器)提供原始六维力信号,采样率约500Hz~1kHz,经滤波、重力补偿和工具负载补偿后得到“净接触力”。
  • 力控算法层:包括力模式(Force)、柔顺模式(Compliant)、力-位混合控制等。算法层接收目标力/刚度/阻尼参数,输出位置或速度修正量给轨迹规划器。
  • 安全与限幅层:对力、力矩、TCP速度、功率进行实时限幅,触发保护性停止或回退,保证装配过程不损伤工件和机器人。

这四层在控制器内部以实时任务方式运行,周期通常在1~8ms量级。外部程序(URScript或上位机)只能通过接口修改参数和读取状态,不能直接干预实时环。

二、RTDE与Dashboard接口的分工

UR提供两类主要外部接口,用途截然不同:

接口方向典型周期主要用途
RTDE(Real-Time Data Exchange)双向125Hz~500Hz实时读写力/力矩、TCP位姿、关节角、数字IO、力控参数
Dashboard Server请求-响应按需(秒级)加载程序、播放/暂停、查询机器人模式、设置用户角色
Primary/Secondary Client双向10Hz左右URScript下发、状态流、脚本级控制

做力控集成时,RTDE是主力通道:它支持“输入寄存器”和“输出寄存器”的订阅式配置,可以把actual_TCP_force、actual_TCP_pose、target_force等变量以固定周期推送给上位机,同时把上位机算出的力指令写回控制器。Dashboard则用于程序生命周期管理,例如在装配开始前加载force_assembly.urp,结束后停止程序。

RTDE的实时性依赖网络质量。建议上位机与控制器直连或走独立VLAN,避免与视觉相机、MES系统共用同一交换机端口,否则力数据抖动会直接影响柔顺效果。

三、力/力矩数据流

从传感器到上位机的完整数据流可以概括为:

  1. FT传感器采样原始六维力 → 控制器内部滤波与重力/负载补偿;
  2. 力控算法层计算净接触力,并与目标力比较,生成修正量;
  3. 修正量送入轨迹规划器,更新TCP目标位姿;
  4. 同时,actual_TCP_force等变量被写入RTDE输出寄存器;
  5. 上位机通过RTDE以125Hz读取,用于监控、记录或闭环修正;
  6. 上位机可将新的目标力/刚度写入RTDE输入寄存器,控制器在下一个实时周期生效。

这条链路的关键在于延迟:从传感器采样到上位机看到数据,典型延迟约8~20ms;从上位机写指令到机器人执行,再叠加一个控制周期。因此,上位机闭环适合做“慢修正”(如力阈值判断、装配阶段切换),而快速力跟踪必须交给控制器内部的力控算法。

UR力控系统架构与力/力矩数据流 UR控制器(实时环) FT传感器 / 关节力矩 原始六维力采样 500Hz~1kHz 重力/负载补偿 + 力控算法 Force / Compliant / 混合控制 轨迹规划器 位置/速度修正 → 关节指令 安全与限幅层 力/力矩/速度/功率保护 RTDE 接口 输出寄存器(125~500Hz) actual_TCP_force actual_TCP_pose 输入寄存器:target_force 刚度 / 阻尼 / 限幅参数 Dashboard Server 加载/播放/暂停程序 查询机器人模式与状态 请求-响应,秒级 上位机 / PLC 力监控、数据记录 装配阶段判断与切换 力阈值报警 / 结果判定 与MES/视觉系统协同 力/位姿数据 目标力/参数 程序控制 集成要点 RTDE做实时力闭环 Dashboard做程序生命周期 网络隔离保证实时性 典型端到端延迟:传感器→上位机 8~20ms;上位机→执行 再叠加1个控制周期

四、与上位机或PLC的集成方式

实际项目中,力控集成通常有三种典型模式:

模式A:上位机主导(PC + RTDE)。上位机用Python的rtde_receive和rtde_control库建立连接,以125Hz读取actual_TCP_force,在装配插入阶段监测Fz是否超过阈值(例如15N),一旦超过就通过RTDE输入寄存器把目标力从20N降到10N,或触发阶段切换。这种模式灵活,适合研发和中小批量。

模式B:PLC主导(Profinet/EtherNet-IP)。UR控制器作为从站接入PLC,PLC通过现场总线读写UR的IO和寄存器。力数据需要先在UR程序中映射到模拟量输出或通过RTDE转发给网关。这种模式实时性受总线周期限制(通常4~10ms),适合产线级集成,但力控参数调整不如上位机灵活。

模式C:混合模式。PLC负责安全联锁、工位节拍和结果判定,上位机负责力数据记录和参数优化,两者通过OPC UA或共享数据库交换装配结果。这是目前汽车零部件装配线较常见的做法。

无论哪种模式,都不要让上位机或PLC直接以高频(>50Hz)写目标力。UR控制器的力控算法本身已有闭环,外部高频写入会与内部环冲突,导致力振荡。建议外部修正周期不低于20ms,且每次修正量做限幅。

五、一个可参考的RTDE配置片段

下面是一个上位机读取力数据并写回目标力的最小示例(Python,ur_rtde库),参数为教学示例值:

import rtde_receive, rtde_control, time

rtde_r = rtde_receive.RTDEReceiveInterface("192.168.1.10")
rtde_c = rtde_control.RTDEControlInterface("192.168.1.10")

# 读取当前TCP力
force = rtde_r.getActualTCPForce()   # [Fx,Fy,Fz,Tx,Ty,Tz]
print("Fz =", force[2])

# 写入目标力(示例:Z向目标力10N,刚度500N/m)
rtde_c.forceMode("tool0", [0,0,1,0,0,0], [0,0,10,0,0,0], 2, [500,500,500,50,50,50])
time.sleep(0.5)
rtde_c.forceModeStop()

运行后应观察到机器人沿Z向施加约10N的力,getActualTCPForce()的Fz读数在10N附近波动,波动幅度与刚度设置和接触面刚度有关。若Fz持续偏离目标值超过20%,应检查工具负载是否已正确设置、重力补偿是否生效。

总结来看,UR力控系统架构的核心是“控制器实时环负责快速力跟踪,RTDE负责实时数据交换,Dashboard负责程序管理,上位机/PLC负责慢速决策与集成”。把这条数据流和接口分工理清楚,后续的柔顺装配参数整定和异常排查就有了明确的着力点。