4. UR ROS2驱动安装与工作空间构建

UR 官方为 ROS 2 提供的驱动是 Universal_Robots_ROS2_Driver,它由若干 ROS 2 功能包组成,负责把 UR 控制器的实时数据(关节状态、TCP 位姿、IO 状态)通过 RTDE 协议读入 ROS 2,并把 ROS 2 侧的轨迹指令下发回控制器。本节围绕“获取官方驱动包 → 安装依赖 → colcon 编译 → 配置环境变量 → 验证”这条主线展开,目标是在本机得到一个可被 ros2 launch 正常启动、并能与真实 UR 或 URSim 建立连接的 ROS 2 工作空间。

一、驱动包结构与获取方式

官方驱动仓库通常包含以下关键功能包:ur_robot_driver(核心驱动节点,负责 RTDE 通信与硬件接口)、ur_description(UR 各型号的 URDF/xacro 模型与网格)、ur_moveit_config(MoveIt 2 配置)、ur_calibration(标定工具)、ur_dashboard_msgs 与 ur_msgs(消息与服务定义)。理解这一结构有助于判断编译报错时是哪个包缺依赖。

获取方式有两种:一是直接克隆源码到工作空间,二是通过 apt 安装二进制包。若需要修改驱动或使用较新特性,推荐源码方式。以 ROS 2 Humble 为例:

mkdir -p ~/ur_ws/src
cd ~/ur_ws/src
git clone -b humble https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver.git
# 若需 URSim 或标定辅助,可一并克隆
git clone -b humble https://github.com/UniversalRobots/Universal_Robots_ROS2_Description.git

注意分支要与 ROS 2 发行版对应:Humble 用 humble 分支,Iron/Jazzy 用对应分支。分支不匹配是后续编译失败最常见的原因之一。

二、依赖安装

ROS 2 工作空间编译前必须补齐系统依赖与 ROS 依赖。推荐使用 rosdep 自动解析:

cd ~/ur_ws
sudo rosdep init        # 若已初始化可跳过
rosdep update
rosdep install --from-paths src --ignore-src -r -y

此外,UR 驱动依赖一些非 ROS 库,例如 libur_client_library(RTDE 客户端库)、urdf、xacro、controller_manager、joint_state_broadcaster、joint_trajectory_controller 等。若 rosdep 未能覆盖,可手动安装:

sudo apt install ros-humble-ur-client-library \
                 ros-humble-controller-manager \
                 ros-humble-joint-state-broadcaster \
                 ros-humble-joint-trajectory-controller \
                 ros-humble-urdf ros-humble-xacro

依赖安装完成后,可用 rosdep check --from-paths src --ignore-src 复查是否仍有缺失项,输出为空表示依赖已齐备。

三、colcon 编译

编译前先 source ROS 2 环境,再执行 colcon build。建议首次编译使用 --symlink-install,便于后续修改 launch 或配置文件时无需重新编译:

source /opt/ros/humble/setup.bash
cd ~/ur_ws
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

编译过程中若出现 Could not find a package configuration file provided by "ur_client_library",说明 RTDE 客户端库未安装或版本不匹配;若出现 urdfdom 相关错误,通常是 urdf 依赖缺失。编译完成后,工作空间根目录会出现 build/、install/、log/ 三个目录,其中 install/ 是后续要 source 的目标。

四、环境变量配置

每次打开新终端都需要 source 工作空间的 setup.bash,否则 ros2 launch 找不到驱动包。为避免重复输入,可写入 ~/.bashrc:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "source ~/ur_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证环境变量是否生效,可执行 echo $ROS_DISTRO 应输出 humble,执行 ros2 pkg list | grep ur_ 应能看到 ur_robot_driver、ur_description 等包。若 ros2 pkg list 中找不到这些包,说明工作空间未正确 source 或编译未成功。

五、验证与连接检查

验证分两层:先确认包与 launch 文件可被 ROS 2 识别,再确认驱动能与控制器建立 RTDE 连接。第一层可执行:

ros2 pkg executables ur_robot_driver
ros2 launch ur_robot_driver ur_control.launch.py --show-args

第二层需要真实 UR 或 URSim。以 URSim 为例,先在 URSim 中启动机器人并开启远程控制,然后运行:

ros2 launch ur_robot_driver ur_control.launch.py \
  ur_type:=ur5e \
  robot_ip:=192.168.56.101 \
  launch_rviz:=true

若连接成功,终端会打印 Robot connected 与 RTDE 数据流信息,RViz 中机器人模型会随真实/仿真机器人姿态变化;若失败,常见提示为 Failed to connect to robot,此时应检查 IP、网络连通性、UR 控制器是否已启用远程控制、以及防火墙是否放行 RTDE 端口(默认 30004)。

UR ROS2 驱动安装与工作空间构建流程 ① 获取官方驱动包 git clone 到 ~/ur_ws/src 分支匹配 ROS 发行版 ur_robot_driver / ur_description ur_moveit_config / ur_calibration ② 安装依赖 rosdep update rosdep install --from-paths src ur_client_library controller_manager 等 ③ colcon 编译 source /opt/ros/humble colcon build --symlink-install 生成 build/ install/ log/ -DCMAKE_BUILD_TYPE=Release ④ 环境变量 source install/setup.bash 写入 ~/.bashrc echo $ROS_DISTRO ros2 pkg list | grep ur_ ⑤ 验证:包识别 → 启动 → RTDE 连接 包与 launch 识别 ros2 pkg executables ur_robot_driver ros2 launch ... --show-args 启动驱动节点 ur_type:=ur5e robot_ip:=192.168.56.101 RTDE 连接结果 成功:Robot connected 失败:Failed to connect 常见问题与排查方向 编译报错 缺 ur_client_library 缺 urdfdom / xacro 分支与 ROS 版本不匹配 找不到包 未 source install/setup.bash colcon build 未成功 终端环境变量未刷新 连接失败 IP 不通 / 远程控制未开 RTDE 端口 30004 被拦 URSim 未启动或未使能

六、可直接使用的检查清单

为便于复现,下面给出一份按顺序执行的检查清单,每项都对应一个可观察的结果:

步骤命令/操作预期结果
1ls ~/ur_ws/src看到 Universal_Robots_ROS2_Driver 等目录
2rosdep check --from-paths src --ignore-src无缺失依赖输出
3colcon build --symlink-install末尾显示 Summary: N packages finished
4source install/setup.bash无报错,ros2 pkg list 含 ur_robot_driver
5ros2 launch ur_robot_driver ur_control.launch.py --show-args列出 ur_type、robot_ip 等参数
6启动 URSim 并开启远程控制URSim 界面显示“远程控制”已启用
7ros2 launch ... ur_type:=ur5e robot_ip:=192.168.56.101终端出现 Robot connected,RViz 模型随动
提示:若使用真实 UR 控制器,请先在示教器“设置 → 系统 → 远程控制”中启用远程控制,并确认控制器软件版本与驱动分支兼容。URSim 的默认 IP 常为 192.168.56.101,真实机器人则需按现场网络配置填写。
注意:不要在同一终端中同时 source 多个工作空间的 setup.bash 而不加区分,否则可能出现包版本覆盖。若需切换,建议新开终端或使用 --extend 方式明确叠加顺序。