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)。
六、可直接使用的检查清单
为便于复现,下面给出一份按顺序执行的检查清单,每项都对应一个可观察的结果:
| 步骤 | 命令/操作 | 预期结果 |
|---|---|---|
| 1 | ls ~/ur_ws/src | 看到 Universal_Robots_ROS2_Driver 等目录 |
| 2 | rosdep check --from-paths src --ignore-src | 无缺失依赖输出 |
| 3 | colcon build --symlink-install | 末尾显示 Summary: N packages finished |
| 4 | source install/setup.bash | 无报错,ros2 pkg list 含 ur_robot_driver |
| 5 | ros2 launch ur_robot_driver ur_control.launch.py --show-args | 列出 ur_type、robot_ip 等参数 |
| 6 | 启动 URSim 并开启远程控制 | URSim 界面显示“远程控制”已启用 |
| 7 | ros2 launch ... ur_type:=ur5e robot_ip:=192.168.56.101 | 终端出现 Robot connected,RViz 模型随动 |
192.168.56.101,真实机器人则需按现场网络配置填写。
setup.bash 而不加区分,否则可能出现包版本覆盖。若需切换,建议新开终端或使用 --extend 方式明确叠加顺序。