【ROS教程 002】ROS 总体框架

根据ROS系统代码的维护者和分布来标示,主要有两大部分:

(1)main:核心部分,主要由Willow Garage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个ROS的核心部分的程序编写。

(2)universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。一种是库的代码,如OpenCV、PCL等;库的上一层是从功能角度提供的代码,如人脸识别,他们调用下层的库;最上层的代码是应用级的代码,让机器人完成某一确定的功能。

一般是从另一个角度对ROS分级的,主要分为三个级别:文件系统级、计算图级和开源社区级。

文件系统级:主要是使用一组概念来解释ROS内部构成、文件夹结构,以及工作所需的核心文件。

计算图级:体现进程和系统之间通信包括建立系统、处理各类进程、与多台计算机通信等

开源社区级:包括一系列的工具和概念方便开发人员之间共享知识、算法和代码。

1 ROS文件系统级

刚开始学习ROS有一些奇怪的概念需要我们熟悉,不过也很新颖。如下图所示

根据ROS系统代码的维护者和分布来标示,主要有两大部分:

(1)main:核心部分,主要由Willow Garage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个ROS的核心部分的程序编写。

(2)universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。一种是库的代码,如OpenCV、PCL等;库的上一层是从功能角度提供的代码,如人脸识别,他们调用下层的库;最上层的代码是应用级的代码,让机器人完成某一确定的功能。

一般是从另一个角度对ROS分级的,主要分为三个级别:文件系统级、计算图级和开源社区级。

文件系统级:主要是使用一组概念来解释ROS内部构成、文件夹结构,以及工作所需的核心文件。

计算图级:体现进程和系统之间通信包括建立系统、处理各类进程、与多台计算机通信等

开源社区级:包括一系列的工具和概念方便开发人员之间共享知识、算法和代码。

1 ROS文件系统级

刚开始学习ROS有一些奇怪的概念需要我们熟悉,不过也很新颖。如下图所示

为了方便管理和使用,当然根据功能的不同将不同组件放在不同的文件夹下。

功能包(Package) ——功能包是ROS软件组织的基本形式,具有最小的结构和最少的内容,用于创建ROS程序,包括进程(节点)、配置文件等。

功能包清单 (Manifest)——通过xml文件对功能包进行配置管理,包括功能包、许可信息、依赖关系、编译标志等。

功能包集 (Stack)——将几个具有某些功能的功能包组织在一起就得到一个功能包集。

功能包级 (Stack manifest)——清单 提供一个关于功能包集的清单,包括开源代码的许可证信息、与其他功能包集的依赖关系

消息类型 (Message/msg type)——消息是一个进程发送到其他进程的信息。ROS系统有许多已经定义好的标准消息,你也可以自定义消息,消息存储在对应功能包的msg文件夹下。 消息类型的说明存储在mypackage/msg/MyMessageType.msg中,也就是对应功能包的msg文件夹下。

服务类型 (Service/srv type)——定义了服务的请求和响应的数据结构。这些描述说明存储在mypackage/srv/MyServiceType.srv中,也就是对应功能能包的srv文件夹下。

2 ROS计算图级

ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他节点发布的信息,并将自身数据发布到网络上。

节点(Node)—— 主要的计算执行进程,如果想要一个可以与其他节点进行交互的进程,需要创建一个节点,并将此节点连接到ROS网络。节点需要使用如roscpp或rospy的ROS客户端库进行编写。

节点管理器(Mater) —— 用于节点的名称注册和查找。注意ROS本身是一个分布式网络系统,可以在某一台计算机上运行节点管理器,在其他计算机上运行由该管理器管理的节点。

参数服务器(Parameter Server) —— 参数服务器能够使数据通过关键词存储在一个系统的核心位置,通过使用参数就能够在运行时配置节点或改变节点的工作任务。

消息(Message) —— 节点通过消息完成彼此之间的沟通。消息包含一个节点发送到其他节点的数据信息。ROS中包含很多标准类型的消息,同时也可以自定义消息。

主题(Topic) ——主题由ROS网络对消息进行路由和消息管理的数据总线。每一条消息都要发布到相应的主题。节点可以通过订阅某个主题接收来自其他节点的消息。一个节点可以订阅一个主题而并不需要该节点同时发布该主题。这就保证了消息的发布者和订阅者之间相互解耦,完全无需知晓对方的存在。主题的名称必须是独一无二的,否则在同名主题之间的消息路由会发生错误。

服务(Service)—— 在发布主题时,正在发送的数据能够以多对多的方式交互。但当需要从某个节点获得一个请求或应答时,就不能通过主题来实现了,服务配上用场,服务能够允许我们直接与某个节点进行交互。此外,服务必须有一个唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用ROS客户端库所编写的代码与它通信。

消息记录包((Bag)—— 消息记录包是一种用于保存和回放ROS消息数据的文件格式。消息记录包是一种用于存储数据的重要机制。它能够获取并记录各种难以收集的传感器数据。我们可以通过消息记录包反复获取实验数据,进行必要的开发和算法测试。

3 ROS开源社区级

ROS开源社区级主要关于ROS资源,能够通过独立的网络社区分享软件和知识。这些资源包括

发行版(Distribution)—— ROS发行版是可以独立安装的,带有版本号的一系列功能包集。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合来维持一致的版本。

软件源(Repositorie)—— ROS依赖于共享开源代码与软件源的网站或主机服务,在这里不同的机构能够发布分享各自的机器人软件和程序。

ROS Wiki—— ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户和贡献自己的文件,提供更正和更新,编写教程以及其他信息。

邮件列表(Mailing list)—— ROS用户邮件列表是关于ROS的主要交流渠道,能够交流从ROS软件更新到ROS软件使用中的各种疑问或信息。

References:

Aaron Martinez Enrique Fern andez, ROS机器人程序设计[B], P14-42, 2014.

中文的版本 cn - ROS Wiki

http://wiki.ros.org/roschina/%E6%95%99%E7%A8%8B

http://www.cnblogs.com/cv-pr/p/4837240.html

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180111G09J4100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券