1. 课程导入与UR ROS2驱动全景

UR(Universal Robots)协作机械臂在工业自动化与科研教学中应用广泛,其开放的控制接口和良好的安全性,使其成为学习 ROS2 机器人集成的理想平台。本课程围绕“UR ROS2 驱动与机器人集成”展开,目标是让学习者能够独立完成从驱动安装、通信建立、运动控制到系统集成的完整链路。在正式进入驱动配置之前,先建立对 UR 机器人型号体系、ROS2 生态定位以及驱动架构的整体认知,能够显著降低后续调试的盲目性。

UR 机器人型号与 ROS2 生态定位

UR 目前主流在售型号包括 UR3e、UR5e、UR10e 和 UR16e,数字代表额定负载能力(单位 kg),后缀 e 表示 e-Series 系列。UR3e 负载 3 kg、工作半径约 500 mm,适合桌面级精密装配;UR5e 负载 5 kg、半径约 850 mm,是教学与中小型产线最常见的型号;UR10e 负载 10 kg、半径约 1300 mm,用于较大工作空间;UR16e 负载 16 kg、半径约 900 mm,侧重重载搬运。所有 e-Series 均运行 Polyscope 操作系统,对外提供三类主要接口:基于 TCP 的 Dashboard Server(端口 29999)用于远程上下电、加载程序;URScript 接口(端口 30001/30002/30003)用于实时指令与状态流;RTDE(Real-Time Data Exchange,端口 30004)用于高频状态与 IO 数据交换。ROS2 驱动正是通过这些接口与控制器通信。

在 ROS2 生态中,UR 官方维护的 Universal_Robots_ROS2_Driver 已经过 ROS2 官方认证,支持 Humble、Iron、Jazzy 等发行版。它并非简单封装,而是将 UR 控制器抽象为标准的 ROS2 组件:通过 ros2_control 框架暴露关节轨迹控制器,通过 robot_state_publisher 发布 TF 变换,通过 MoveIt2 完成运动规划。这意味着学习者掌握 UR 驱动后,所学的 ros2_control、TF、MoveIt2 知识可以迁移到其他机械臂,UR 在这里扮演的是“标准范例”的角色。

驱动架构概览

理解驱动架构是后续排障的关键。UR ROS2 驱动采用分层结构:最底层是 ur_client_library,负责与 UR 控制器建立 TCP/RTDE 连接并解析协议;其上是 ur_robot_driver,作为 ros2_control 的硬件接口(Hardware Interface),周期性地读取关节状态并下发位置/速度指令;再往上是 ur_description 提供的 URDF/xacro 模型,定义连杆、关节、惯性参数与 mesh 外观;控制器层由 joint_state_broadcaster、scaled_joint_trajectory_controller 等组成;应用层则是 MoveIt2、RViz2 以及用户自定义节点。

数据流方向可以这样理解:RTDE 以约 125 Hz 的频率把关节角度、TCP 位姿、IO 状态送入 ur_robot_driver,驱动将其转换为 sensor_msgs/JointState 并由 joint_state_broadcaster 发布;同时 scaled_joint_trajectory_controller 接收 FollowJointTrajectory 动作目标,按比例缩放速度后通过 URScript 的 servoj 指令下发给控制器。这种“状态上行、指令下行”的双向链路,是判断驱动是否正常工作的核心依据。

UR ROS2 驱动分层架构与数据流 应用层 MoveIt2 规划 RViz2 可视化 用户自定义节点 控制器层 joint_state_broadcaster scaled_joint_trajectory_controller 驱动层 ur_robot_driver (HW接口) ur_description (URDF) 通信层 ur_client_library RTDE :30004 URScript :30002 Dashboard :29999 UR 控制器 (Polyscope) 状态上行 (JointState / TF) 指令下行 (servoj / 轨迹)

学习路径与实验环境搭建

本课程的学习路径遵循“先通链路、再控运动、后做集成”的顺序。第一步完成驱动安装与网络连通,确认能通过 ros2 topic echo /joint_states 看到关节数据;第二步启动 MoveIt2 与 RViz2,实现规划与执行;第三步接入真实 IO、夹爪或视觉,完成一个抓取放置任务。这条路径的每一步都有明确的验证信号,避免“装完不知道对不对”。

实验环境建议使用 Ubuntu 22.04 + ROS2 Humble,这是目前 UR 官方驱动支持最稳定的组合。安装方式推荐二进制包与源码编译二选一:二进制安装执行 sudo apt install ros-humble-ur 即可获得 ur_robot_driver、ur_description、ur_moveit_config;若需要修改驱动源码,则使用 colcon build 从 Universal_Robots_ROS2_Driver 仓库编译。网络方面,需将 PC 与 UR 控制器置于同一网段,例如控制器 IP 设为 192.168.1.10,PC 设为 192.168.1.100,并确认能 ping 通。随后在 Polyscope 中安装 externalcontrol URCap,这是驱动接管控制器的前提。

下面给出一个最小可用的启动命令示例,用于验证驱动链路是否打通。该示例假设机器人 IP 为 192.168.1.10,使用模拟模式(use_fake_hardware:=true)先排除真实硬件因素:

ros2 launch ur_robot_driver ur_control.launch.py \
  ur_type:=ur5e \
  robot_ip:=192.168.1.10 \
  use_fake_hardware:=true \
  launch_rviz:=false

启动后另开终端执行 ros2 topic hz /joint_states,正常应看到约 100~125 Hz 的发布频率;若频率为 0 或报连接超时,应优先检查 IP、防火墙与 URCap 是否已加载。确认模拟模式正常后,将 use_fake_hardware 改为 false,并在示教器上运行 External Control 程序,即可切换到真实机器人。此时在 RViz2 中应能看到机器人模型与真实姿态一致,这是判断驱动真正接管成功的最直观依据。

首次连接真实机器人前,务必确认机器人处于远程控制模式、已加载 External Control 程序,并设置好安全限位。建议先在低速、小范围下测试,再逐步放开速度与工作空间。