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

> 原文链接：https://robotics.hellobike.com/pitfalls/ur5e-ur10e-ros2-driver-external-control-stopped
> 频道：pitfalls | 更新日期：2026-10-21 | 标签：优傲, UR5e, UR10e, ROS2, URCap, ExternalControl
> 核心摘要：示教器启动 External Control URCap 后立即停止或报 Connection refused，源于宿主机防火墙阻断 50001-50004 反向通信端口或 RTDE 频率冲突。

# 优傲 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。

## 原始参考来源 (Sources)

- [GitHub UniversalRobots/Universal_Robots_ROS2_Driver](https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver)