ROS-Industrial Overview
这里写这个ROS-Industrial Overview的目的是对前面文章中一直说的ROS-Industrial进行一下补充说明,同时明确之后的工作路线,在这里写下我做这些的目的:记录将ABB Yumi机器人和ROS联合在一起,然后进行与智能相关的物理实验。一是用来鞭策自己,二是明确之后的方向。
目录
ROS-Industrial高层架构
首先看一下在官方网站上提供的ROS-Industrial High Level Architecture
在以上架构图中,我是以从下到上,从左到右的顺序对每一功能色块进行了序号标识,方便接下来的阐述。先总体说一个ROS-I,ROS-Industrial是一个在BSD (legacy) / Apache 2.0 (preferred)许可下的程序项目,它包括了用于工业硬件的库、工具和驱动程序。 ROS-Industrial的目标列举如下:
- Create a community supported by industrial robotics researchers and professionals
- Provide a one-stop location for industry-related ROS applications
- Develop robust and reliable software that meets the needs of industrial applications
- Combine the relative strengths of ROS with existing industrial technologies (i.e. combining ROS high-level functionality with the low-level reliability and safety of industrial robot controllers)
- Create standard interfaces to stimulate“hardware-agnostic”software development (using standardized ROS messages)
- Provide an easy path to apply cutting-edge research in industrial applications, using a common ROS architecture
- Provide simple, easy-to-use, well-documented APIs
架构理解
对于ROS-I架构的理解是仁者见仁,智者见智,这里只是表述一下自己的看法,对于这张架构图我是从下往上看的,因为我要弄明白底层是如何实现的,根据目的不同,看的角度也不一样,如果是做应用设计,那只关注上层就可以。在前面的文章中一直在研究ABB的ROS Server是如何写的,也用了四篇文章的篇幅搞清楚了每一行代码的功能与意义。那前面的四篇文章就是对应着最底的一层:ROS-I Controller Layer层,而我们具体到了ABB的,所以也就是相当于vendor specific的部分。
① ROS-I Controller Layer:这一层是控制器层,作为整个框架的最底层,这一层是在具体的机器人控制器上编写指令,从之前的文章来看,就是在对应的机器人控制器上写一个Server,让ROS传送来的数据可以在机器人控制器本地进行解析,然后调用机器人本身的控制接口进行机器人的具体控制。比如我们自己写的机器人控制器,用C++写的最底层函数支持驱动器的电流读取,同时也可以指定指令处理周期,直线圆弧插补、运动速度调整等,甚至可以直接编写好一个演示作业,你对外要做的就是当有指令进入控制器,你要对其进行解析,且解析之后可以调用对应的函数,让机器人进行相应的动作。简而言之,这一层的作用就是在机器人已有的动作函数与上层,例如ROS,传输的指令之间搭建一个桥梁。
② ROS-I Simple Message Layer:这一层从其名字中也可以看出一二,是对信息传输格式进行规范,所以这一层的作用就是在底层和其上的层次之间加入一条规范的通道,所以向上传送和向下传送的数据必须按照这条通道规范的格式进行传送,不然就报错。所以,简单的理解,就是ROS与机器人控制器中的服务器进行通信的协议,就如同我们常见的TCP/IP协议,小型飞行器上用的MAVLINK协议等,规定了数据的每一部分代表了什么意义,同时也通过其中某部分的不同,对进一步的数据解析行为进行了指定。
③ ROS-I Interface Layer:这一层提供了数据传输的接口,就如同我们在前面四篇文章中分析ROS Server的Socket函数及其附属或是扩展的函数那样,这一层指明了ROS的数据如何压缩到对应的数据结构中,并且如何一步步的将指令与数据通过这一层的接口,按照协议规定的格式,发送到底层控制器层。从其中的流程框架中,我们可以大体上分析出机器人的轨迹动作序列数据,要在这一层进行数据封装,流程经过Simple Message层,就表明封装的格式要按照Simple Message Layer的格式规范,最后将数据传送到机器人控制器,而机器人控制器的反馈数据则通过相同的过程与相反的流程反馈到的ROS。所以对机器人的实际控制指令与数据就在①②③这三层之间流转。
④ ROS-I Configuration:这一层是机器人及机器人控制器相关的配置信息,比如里面写的URDF,用于在Gazebo或是RVIZ中进行机器人的建模,parameters等指定机器人的相关参数,控制器的IP地址,各种可能用到的或用不到的信号量等等,诸如此类的信息或是函数。ROS-I Conventions可以理解为机器人或控制器在工业上的一些需要的传统的参数等。
⑤ ROS Layer:这一层就是完全是ROS的内容,任何在ROS生态中的都可以,不多解释。
⑥ MoveIt Layer:这一层这里先不说,以后会涉及到。
⑦ ROS-I Application Layer:这一层是针对工业应用的应用层,未来可能会包括工业的工艺规划,状态机等功能,不过状态机的功能ROS已经有对应的Package进行支持。
⑧ ROS GUI 与 ⑨ ROS-I GUI:对应一些界面上的东西,平时不怎么写界面,通用纯代码做的基本上是用代码,需要交互的时候才去写个界面,就不多说了。
路线
从上面的分析中,已经可以比较清楚的知道接一来的一步要进行如何进行,在前面的工作中我们从ABB的RAPID代码入手,进行了底层ROS Server的理解与分析,在整个架构中相当于完成了最底一层的理解,接下来要完成搞清楚如何将机器人与ROS完美的接合到一起,我们还需要对ROS-I Simple Message Layer,实际上就是simple_message这个package进行深入的理解,这一步之后则需要继续弄明白industrial_robot_client这个package如何工作,在完成这两步的前提下,基本上对于整个系统的搭建与融合就完成了,之后的其它应用会随着研究的深入,逐渐使用到。