工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟,ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-Industrial(ROS-I)。
ROS-I的官网: http://rosindustrial.org/
一、ROS-I的目标
- 将ROS强大的功能应用到工业生产的过程中;
- 为工业机器人的研究与应用提供快捷有效的开发途径;
- 为工业机器人创建一个强大的社区支持;
- 为工业机器人提供一站式的工业级ROS应用开发支持。
ROS向工业领域的渗透,可以将ROS中丰富的功能、特性带给工业机器人,比如运动规划,运动学算法,视觉感知,还有rviz,gazebo等工具,不仅降低了原本复杂严格的工业机器人研发门槛,而且在研发成本发面也具有极大的优势。
二、ROS-I的安装
在完整安装ROS之后,通过以下的命令就可以安装ROS-I了:
$ sudo apt-get install ros-indigo-industrial-core ros-indigo-open-industrial-ros-controllers
三、ROS-I的架构
- GUI:上层UI分为两个部分:一个部分是ROS中现在已有的UI工具;另外一个部分是专门针对工业机器人通用的UI工具,不过是将来才会实现。
- ROS Layer:ROS基础框架,提供核心通讯机制
- MoveIt! Layer:为工业机器人提供规划、运动学等核心功能的解决方案
- ROS-I Application Layer:处理工业生产的具体应用,也是针对将来的规划
- ROS-I Interface Layer:接口层,包括工业机器人的客户端,可以通过 simple message协议与机器人的控制器通信
- ROS-I Simple Message Layer:通信层,定义了通信的协议,打包和解析通信数据
- ROS-I Controller Layer:机器人厂商开发的工业机器人控制器。
从上边的架构我们可以看到,ROS-I在复用已有ROS框架、功能的基础上,针对工业领域进行了针对性的拓展,而且可以通用于不同厂家的机器人控制器。
四、ROS-I控制UR机械臂
Universal Robots是丹麦的一家工业机器人制作商,主要的机器人产品有:UR3、UR5和UR10,分别针对不同的负载:
我们以该机器人作为示例,看一下ROS-I的应用。
4.1 安装
首先我们需要安装UR机器人的ROS功能包集。
$ sudo apt-get install ros-indigo-universal-robot
该功能包集包含了UR仿真、运行需要的主要功能包:ur_description, ur_driver, ur_bringup, ur_gazebo, ur_msgs, ur10_moveit_config/ur5_moveit_config, ur_kinematics。
4.2 运行
安装完成后,使用下边的命令,我们就可以看到UR10的机器人模型了(第一次运行需要等待较长时间完成模型加载):
$ roslaunch ur_gazebo ur10.launch
然后我们让机械臂动起来,需要运行MoveIt运动规划的节点:
$ roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true
然后运行rviz:
$ roslaunch ur10_moveit_config moveit_rviz.launch config:=true
启动之后,我们可以看到rivz中的机器人模型和gazebo中的机器人模型应该是一样的姿态。在rviz中,我们可以用鼠标拖动机器人的终端,然后点击planning标签页中的plan nad execute就可以让机器人规划路径并且到达目标位置了,gazebo中的模型也会跟随变化。
4.3 分析
看到这里,也许我们会有一个疑问:这不就是MoveIt那一套东西么, 感觉和ROS-I并没有什么关系?再回头看ROS-I的架构,这种架构的上层控制本身就是复用的已有的软件包,ROS-I目前主要关注的是如何使用这些软件包来控制工业机械臂,也就是最下边的三层结构。我们把这三层从上到下分析一下:
首先是ROS-I Interface Layer层,这一层需要我们设计一个机器人的客户端节点,主要功能是完成数据从ROS到机械臂的转发,ROS-I为我们提供了许多编程接口,可以帮助我们快速开发,下图就是几个比较常用的API,具体API的使用说明可以查看官方文档。
对于机械臂来讲,这里最重要的是 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来完成。
全部评论(86)
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者