UR机器人和ROS-Industrial入门

Note1: 本文主要讲了ROS-Industrial节点与Universal Robots UR5 (controller CB3)的通信过程。此过程在UR5中进行测试,当应用在UR10中也采用相同的过程。

  • 准备工作
  • 综述
  • 实现步骤
    • 安装必要的软件
    • 配置硬件
    • 在ROS中描述机械臂
    • 与UR机器人进行通信
    • 使用MoveIt 操作硬件
    • 仿真学习
  • 分析ROS IndustrialROS-I2

准备工作

需要前期准备的安装环境:
1. ROS kinetic系统
2. ROS-Industrial 的 universal_robot包
UR5机器人控制器的镜像版本是 3.0。

驱动兼容性
需要检查 universal_robot包的驱动和控制器的兼容性。

综述

universal_robot包通过以太网连接与硬件进行通信,当建立连接的时候ROS-Industrial上传由URScript编写的程序,URScript是类似python的UR机器人自己的脚本语言。这段程序负责监听ROS-Industrial的 simple_messages 包发送的消息信息,并将这些消息解释成硬件指令。

我们不必明确了解安装在UR机器人上的所有与ROS-Industrial进行通信的程序

实现步骤

安装必要的软件

可以通过 apt-get (preferred) 命令,也可以用源码进行安装。参考 universal_robot包进行。

配置硬件

确保机器人控制器能够通过以太网进行通信。UR控制器的网络功能默认是关闭的。打开网络功能需要示教盒进行操作,操作步骤是Setup Robot -> Setup Network Menu (shown in the below attachment).

UR机器人和ROS-Industrial入门_第1张图片
可以使用动态ip地址、静态ip地址,用ping命令进行调试

ping IP_OF_THE_ROBOT

如果没反应则检查错误。

在ROS中描述机械臂

launch文件可以用来启动描述机械臂的ur_description包。

与UR机器人进行通信

注意:如果UR机器人控制器的版本在3.0及以上的,需要使用新的驱动包ur_modern_driver ,包中ur_Interface_Hardware源码文件中,需要把”->interface_hardware”改成”->type”。

一下命令用于ROS与UR机器人建立连接,需要把”IP_OF_THE_ROBOT”改成机器人控制器的IP地址。

roslaunch ur_modern_driver ur5_bringup.launch robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]

这时及以后就应该手在急停按钮附近了

在一个新终端里,就可以使用脚本语言控制机器人按照预定义的位置进行运动了

rosrun ur_driver test_move.py//可以试一下,没试过

使用MoveIt! 操作硬件

设置moveit!节点:

roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch

启动带有运动规划插件的 RViz

roslaunch ur5_moveit_config moveit_rviz.launch config:=true

由于MoveIt!在 [π,π] 范围内进行运动规划有困难,所以将关节约束在 [π2,π2] 范围内,使用关节约束的版本的命令:

roslaunch ur_modern_driver ur5_bringup.launch limited:=true robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true 

仿真学习

有些时候操作机器人不方便,那么可以通过gazebo仿真学习

roslaunch ur_gazebo ur10.launch
roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true
roslaunch ur10_moveit_config moveit_rviz.launch config:=true

分析ROS Industrial(ROS-I)2

工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟,ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-Industrial
UR机器人和ROS-Industrial入门_第2张图片

  1. GUI:上层UI分为两个部分:一个部分是ROS中现在已有的UI工具;另外一个部分是专门针对工业机器人通用的UI工具,不过是将来才会实现。
  2. ROS Layer:ROS基础框架,提供核心通讯机制
  3. MoveIt! Layer:为工业机器人提供规划、运动学等核心功能的解决方案
  4. ROS-I Application Layer:处理工业生产的具体应用,也是针对将来的规划
  5. ROS-I Interface Layer:接口层,包括工业机器人的客户端,可以通过 simple message协议与机器人的控制器通信
  6. ROS-I Simple Message Layer:通信层,定义了通信的协议,打包和解析通信数据
  7. ROS-I Controller Layer:机器人厂商开发的工业机器人控制器。

从上边的架构我们可以看到,ROS-I在复用已有ROS框架、功能的基础上,针对工业领域进行了针对性的拓展,而且可以通用于不同厂家的机器人控制器。

这种架构的上层控制本身就是复用的已有的软件包,ROS-I目前主要关注的是如何使用这些软件包来控制工业机械臂,也就是最下边的三层结构。我们把这三层从上到下分析一下:

首先是ROS-I Interface Layer层,这一层需要我们设计一个机器人的客户端节点,主要功能是完成数据从ROS到机械臂的转发,ROS-I为我们提供了许多编程接口,可以帮助我们快速开发,下图就是几个比较常用的API,具体API的使用说明可以查看官方文档。
UR机器人和ROS-Industrial入门_第3张图片

对于机械臂来讲,这里最重要的是 robot_state和 joint_trajectory。 robot_state包括很多状态信息,ROS-I都已经帮我们定义好了,可以去industrial_msgs包里看到消息的定义文件。joint_trajectory订阅了MoveIt规划出来的路径消息,然后打包发送给最下层的机器人服务器端。通常会把这一层的功能封装成robot_name_driver功能包,可以看ROS-I中ABB和UR的机械臂都是这样的,可以参考他们的源码进行设计。

然后是ROS-I Simple Message Layer层,这一层主要是上下两层的通信协议。Simple Message这个协议是基于TCP的,上下层客户端和服务器端的消息交互,全部通过这一层提供的API进行打包和解析。具体使用方法可以参考http://wiki.ros.org/simple_message,也可以直接看ROS-I的源码:https://github.com/ros-industrial/industrial_core,主要实现SimpleSerialize和TypedMessage两个类的功能即可。

最下层的ROS-I Controller Layer是厂家自己的控制器,考虑到实时性的要求,一般不会使用ROS,只要留出TCP的接口即可,接收到trajectory消息解析之后,就按照厂家自己的算法完成动作了。可见,如果我们想要通过ROS-I来控制自己的机械臂,最下边的三层使我们需要实现的重点,上层运动规划部分可以交给ROS来完成。


这里写图片描述


  1. Getting Started with a Universal Robot and ROS-Industrial ↩
  2. http://www.guyuehome.com/ ↩

你可能感兴趣的:(ROS)