Skip to content

踩坑github.com7 天前

优傲 UR5e / UR10e 运行 ROS 2 Driver 报 External Control program stopped 与反向端口阻断 ​

硬件与软件环境 ​

  • 机型:Universal Robots UR5e / UR10e(PolyScope 5.12+)
  • 软件栈:Ubuntu 22.04 + ROS 2 Humble + ur_robot_driver

故障现象与报错 ​

在 Ubuntu 上启动 ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur5e robot_ip:=... 后,机械臂关节状态 /joint_states 可以正常读取(500Hz),但在示教器上点击播放 External Control 程序时,示教器立刻弹窗报错 The connection to the remote PC could not be established 或终端报 External Control program stopped。

根因分析 ​

优傲 ROS 2 驱动采用双向加反向连接架构:

  • 状态读取(RTDE 端口 30004)由 PC 主动连机械臂控制柜,所以只要能 ping 通就能读 /joint_states;
  • 轨迹控制(External Control URCap)则是由 机械臂控制柜主动反向连接 PC 的 50001~50004 端口。如果 Ubuntu 开启了 ufw 防火墙,或者在 Docker 容器中未映射 50001-50004 端口,或者示教器 Installation -> External Control 里填的 Host IP 不是当前 PC 网卡地址,反向连接就会立即失败。

解决步骤 ​

  1. 核对示教器 External Control 配置: 进入示教器 Installation -> URCaps -> External Control,确认 Host IP 填写的是 Ubuntu 上位机直连机械臂那张有线网卡的真实 IPv4 地址,Custom port 为 50002。
  2. 放行 Ubuntu 防火墙端口 50001:50004:
    bash
    sudo ufw allow 50001:50004/tcp
    sudo ufw allow 50001:50004/udp
    若在 Docker 容器内运行 ROS 2,启动容器时必须加上 --network host。
  3. 关闭冲突的第三方 Fieldbus(Profinet / EtherNet/IP):若控制柜同时开启了 Profinet 或 Modbus 从站并占用了控制寄存器,RTDE 写入掩码会报冲突,需在 Installation -> Fieldbus 中将其设为 Disable。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub UniversalRobots/Universal_Robots_ROS2_Driver访问 2026-10-21