通过ROS使用UR机器人是比较简单的, 因为UR系列机器人可以说是使用最为广泛的协作机械臂, 各方面的软件支持和学习资料都非常全面.
第一步还是先安装对应的现有软件包(packages), 这里需要安装两个软件包:
- 由UR机器人官方提供的机器人驱动软件包:
Universal_Robots_ROS_Driver
, 其中提供机器人底层驱动, 机器人标定等基本底层功能. - 由
ROS industrial
开源项目提供的UR机器人控制软件包:Universal Robot
, 其中提供控制各个版本UR机器人的 ROS 通信节点, 机器人 URDF 模型, 以及 Moveit 控制软件等顶层功能.
与RealSense相机相同, 这两个软件包也都有提供编译好发行版本, 可以分别通过下面的方式安装两行简单的命令安装:
# Install universal robots ros driver
apt install ros-${ROS_DISTRO}-ur-robot-driver
# Install universal robiots
sudo apt-get install ros-$ROS_DISTRO-universal-robots
- UR 官方建议通过这种方式安装ROS driver的软件发行版 (binary release),因为设置起来比较方便,而且会自动更更新。但同时也指出,一些最新的特性可能还未发行,所以从源代码安装 (build from source) 可以最快体验新开发的特性。
依据这个说明,因为后面使用机器人的时候会涉及到很多对于源代码和配置文件的修改,所以我们这里选择从源代码安装,只需要将两个仓库clone到~/catkin_ws/src
目录,然后再编译工作空间即可:
# 启动并进入docker container
cd ~/catkin_ws/src
# Clone UR ros driver package repository
git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver
# Clone Universal Robot package repository
git clone -b $ROS_DISTRO-devel https://github.com/ros-industrial/universal_robot.git
- 我们docker里安装的是ROS noetic版本,所以环境变量 ROS_DISTRO的值就是noetic, 所以上面两行命令都会安装noetic版本的软件包
- Universal robot 这个仓库在最近几个月才发行了noetic的版本,之前ROS noetic一直都是用的melodic的软件包,两者是兼容的
- 依据UR官方ROS2 driver仓库的说明,对于moveit的支持已经被合并到了默认的driver软件包里,所以以后使用ROS2来控制UR机器人就不再需要安装这两个包了,安装一个driver包即可。
- 上述命令已经添加到了dockerfile里, 启动容器后不需要再执行
安装好这些包之后, 测试和使用只需要启动对应的节点即可. 既可以在真实的机器人上进行测试, 也可以在无硬件的情况下只在仿真环境中进行规划测试, Universal Robot的README.md对于这两种使用情况的流程说得非常清楚, 可以参考. 我这里重点说一下如何理解这些步骤, 这里用到的不同的launch文件都是干什么的, 都启动了哪些节点,有哪些功能, 以及一些需要设置的参数.
使用ROS连接使用真实的UR机器人, 需要做一些预先的准备和设置工作, 其中主要包括:
- 在机器人控制器上安装用于外部控制的 urcap 插件
- 从机器人中提取出厂时存储的标定信息
- 设置机器人的ip地址等
这些步骤在官方仓库中已经介绍地十分详细, 这里不再赘述.
roslaunch ur_robot_driver <robot_type>_bringup.launch robot_ip:=192.168.xx.xx
这个launch file 具体做了而什么请看这个总结.
roslaunch ur5_moveit_config moveit_planning_execution.launch sim
这个launch file 具体做了而什么请看这个总结.
roslaunch ur5_moveit_config moveit_rviz.launch
这个launch file只是负责打开rviz
显示程序.
控制实际机器人时记得打开机器人上的外部控制程序, 否则实际机器人是不会动的.
# Bring up the simulated robot in Gazebo
roslaunch ur_gazebo ur5_bringup.launch
# For setting up the MoveIt! nodes to allow motion planning run:
roslaunch ur5_moveit_config moveit_planning_execution.launch sim:=true
# For starting up RViz with a configuration including the MoveIt! Motion Planning plugin run:
roslaunch ur5_moveit_config moveit_rviz.launch
可以看到这里跟真实机器人的主要区别就是
- 机器人的驱动启动文件变成了
ur_gazebo ur5_bringup.launch
. Gazebo模拟了UR robot driver的行为, 比如发布机器人的joint_states等. - 在启动
moveit_planning_execution.launch
的时候设置sim
参数为真. 去检查launch文件内容可以看到, 这个参数的设置主要是对机器人的控制器轨迹话题进行了重映射. 因为仿真环境跟真实机器人环境的控制器有所不同. 如果忘记调整这个, 在规划时会报找不到控制器的错误.