机器人操作系统ROS(01):基本概念

  • 1、乌班图Ubuntu

这ROS系统是指机器人操作系统robot operating system,并不是实时操作系统RTOS:realt-ime operation ystem,这个机器人操作系统ROS不具备实时性。ROS在2007年起源于斯坦福大学,在2010年由WG美国公司发布,目标是提高代码复用效率。ROS作为软件框架,只能算次操作系统。 ROS一般安装在类linux系统上,常见的是乌班图Ubuntu。Ubuntu是基于Debian的一款发行,debian是社区型linux,不同于Redhat/suse之类公司化的linux。Ubuntu是基于Debian和GNOME的以桌面应用为主的Linux操作系统,很少用作服务器。后期桌面由Gnome改为Unity,最新版本16.04 LTS,代号Xenial ,32-bit版本大概1.5G。 准备单独电脑或者安装多系统或者安装VMware之类虚拟机:

1.1、如果是物理安装,UltraISO刻录ISO到优盘,install时建立一个50G的EXT4日志文件系统的主分区,建立一个2G的swap格式的用于swap的逻辑分区(内存足其实不需要),建立200M的EXT4格式的用于boot的逻辑分区(也不需要),建立home分区。

1.2、如果是VMware虚拟机安装,10.0的Workstation还支持32-bit,下载大概400M,还需要安装VMwareTools。

1.3、下载当前版本的ROS Kinetic Kame,安装,这个比较新没有教程,按照install instructions一步步就可以,中间如果出现问题多数是因为访问境外网站受限的缘故。

1.4、如果找不到software center,需要修改NoDisplay=false。如果遇到Hash Sum mismatch,一般是因为天朝的网络导致TCP包错,学校可以换edu.cn校园网,公司的只好sudo apt-get update –fix-missing,如果还是提示 failed to download,可以$sudo rm -fR /var/lib/apt/lists/* 然后$ sudo mkdir /var/lib/apt/lists/partial最后再$ sudo apt-get update,一般都会Reading package lists… Done。如果还是不行的话那就PVN翻墙了。翻墙之后选择日本新加坡等地区,然后用https://repogen.simplylinux.ch/generate.php产生source.lists。

  • 2、ROS特点

ROS采用分布式处理框架,又叫Nodes,可执行文件单独设计,运行时依靠通讯,实现模块间的轻度耦合,通讯包括基于服务的同步的远程过程调用通讯以及基于主题Topic的异步的数据流通讯,还有参数服务器上的数据存储。ROS框架的main核心部分主要由WG公司设计和维护,提供分布式计算的基本工具以及整个ROS核心部分的程序编写,universe全球代码由不同国家的ROS社区组织开发和维护:底层库代码例如OpenCV,中间功能代码如人脸识别,上层应用代码完成某一确定的功能。

ROS特点:

2.1、点对点设计。

ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别以及路径规划等功能带来的实时计算压力。

2.2、多语言支持。

ROS支持许多种不同的语言,例如C++、Python、Octave、LISP、Java,也包含其他语言的多种接口实现。为了支持交叉语言,ROS利用了简单的、语言无关的接口定义语言描述模块之间的消息传送。这种语言无关的消息处理,让多种语言可以自由的混合和匹配使用。

  • 3、ROS代码

3.1、重要概念:节点(node)、消息(message)、话题(topic)、服务(service)。

3.1.1节点nonde

node是一些运算任务的进程,也可以称为软件模块。当许多节点同时运行时,可以很方便的将端对端的通讯绘制成一个图表。在这个图表中,进程是图中的节点,端对端的连接关系就是其中弧线连接。

3.1.2消息message

message可以包含任意的嵌套结构和数组,节点之间通过消息进行通讯。

3.1.3话题topic。

消息message以一种发布/订阅的方式传递,一个节点可以在一个给定主题中发布消息,一个节点针对某个主题关注与订阅特定类型的数据,可能同时有多个节点发布或者订阅同一个主题的消息。发布者和订阅者彼此互不了解。

3.1.4服务service。

用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回应,类似于web服务器的web服务器是由URIs定义的,同时带有完整定义类型的请求和回复文档。

总结:

节点Node-可执行的最基本单元,用C++和Python来编写,

主题Topics-节点间传输数据的总线,

消息Messages-节点向特定主体发出的信息,

服务Services-用户开发的,直接与节点通信,

管理器ROS Maste-节点之间通信的管理员,提供命名,注册服务,跟踪和记录话题的发布和订阅,提供参数服务器。

在上面概念的基础上,需要有一个控制器可以使所有节点有条不紊的执行,这就是ROS控制器(ROS Master)。ROS Master 通过RPC(Remote Procedure Call Protocol,远程过程调用)提供了登记列表和对其他计算图表的查找。没有控制器,节点将无法找到其他节点,交换消息或调用服务。比如控制节点订阅和发布消息的模型如下:

3.2、文件系统。

指的是在硬盘上面查看的ROS源代码的组织形式,重要概念有包(package)、堆(stack)。

3.2.1包package

package包含节点、ROS依赖库、数据套、配置文件、第三方软件、或者任何其他逻辑构成。ROS软件以包的方式组织,包的目标是提供一种易于使用的结构以便于软件的重复使用。

3.2.2堆stack

stack是包的集合,提供一个完整的功能,例如“navigation stack”。Stack与版本号关联,同时也是如何发行ROS软件方式的关键。例如下图是在包和堆在文件中的具体结构:

stack.xml提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。manifest.xml提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。

  • 4、ROS流程

ROS控制器ROS Master允许节点互相发现和通讯,node就像网络上分布的各台计算机:

比如一台机器人连接一部相机,那么机器人和笔记本电脑都可以发现这个相机node,机器人的相机node负责图像采集,机器人的图像处理node负责后期加工,笔记本的显示node负责显示图像:

相机node先注册到ROS-master,然后通过发布比如/img-data这样的topic,机器人图像处理node和笔记本显示node就都可以订阅img-data这个topic。这样,只要相机node从相机接收到数据,就可以直接发布给另外两个node:

上面是推送的流程,那么可不可以由图像处理node请求时候才传输数据?这可以通过srevice实现。类似于node向ROS-master注册topic,node也可以向master注册service。

这个流程是图像处理node请求数据,相机node收集数据,然后响应reply。

0 回复

发表评论

Want to join the discussion?
Feel free to contribute!

发表评论