学习新事物,方法高于技术本身,如果没有把握"BIG PICTURE"的话很难理解进去。通过以下几点进行理解ROS:

  • ROS实际上不是操作系统,他只是一个通信的框架,一个代码管理的架构。任务的时序规划和CPU资源分配工作都是靠LINUX来实现,所以,ROS脱离不了LINUX,ROS依附在LINUX上。
  • 机器人的核心平台是:多传感器和处理器之间的通信,处理器和执行器之间的通信,这些通信必须保持一个统一的时钟,试想如果从传感器传回来的数据时间上不同步,那就谈不上数据融合了。
  • ROS主要解决了两个问题:其一,让设备间的通讯有一个统一的调度中枢(ROSCORE),通过这个中枢控制信号传递,让开发者明白机器人的活动状态。其二,代码管理的框架,让不同开发者采用不同语言进行混合开发,这样可以集成各种软件的优势协同工作,有点类似于异构系统。

ROS系统的架构主要被设计和划分成三部分,没一部分都代表一个层级的概念:

  • 文件系统级(FileSystem Level)
  • 计算图级(Computaion Graph Levell)
  • 开源社区级(Community Level)

第一级是文件系统级。你将会使用这一组概念来理解ROS的内部构成,文件夹结构,以及工作所需要的核心文件。

第二级是计算图级,体现的是进程和系统之间的通信。你将会看到ROS各个概念和功能,包括建立系统,处理各类进程,与多台计算机通信等。

第三级是开源社区级。这个层级是非常重要的,因为开源社区的大力支持才使得ROS在快速的发展。

1、理解ROS文件系统级别

刚接触ROS,里面涉及了很多的陌生的概念,但当你理解了这些概念之后,就会轻车熟路,倍感亲切了。ROS的文件系统结构如下图所示:

  • 功能包(Package):功能包是ROS中软件组织的基本形式。一个功能包具有最小的结构和最少的内容,用于创建ROS程序。它可以包含ROS运行的进程(节点),配置文件等。
  • 功能包清单(Manifest):功能包清单提供关于功能包,许可信息,依赖关系,编译标志等的信息。功能包清单是一个manifests.xml文件,通过这个文件能够实现功能包的管理。
  • 功能包集(Stack):如果你将几个具有某些功能的功能包组织在一起,那么你将会获得一个功能包集。在ROS系统中,存在大量的不同用途的功能包集例如导航功能包集。
  • 功能包集清单(Stack manifest):功能包清单(stack.xml)提供了一个关于功能包集的清单,包括开源代码的许可证信息,与其他功能包集的依赖关系等。
  • 消 息类型(Message/msg type):消息是一个进程发送到其他进程的信息。ROS系统有许多已经定义好的标准消息,你也可以自定义消息,消息存储在对应功能包的msg文件夹下。 消息类型的说明存储在mypackage/msg/MyMessageType.msg中,也就是对应功能包的msg文件夹下。
  • 服务类型(Service/srv type):对服务类型进行描述说明的文件,在ROS系统中服务的请求和相应的数据结构,这些描述说明存储在mypackage/srv/MyServiceType.srv中,也就是对应功能能包的srv文件夹下。

下面是一个功能包的文件结构示例图:

 2、理解计算图级

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

在该层级最基本的概念包括有节点,节点管理器,参数服务器,消息,服务,主题和消息记录包。这些概念都以不同的方式向计算图级提供数据。

  • 节 点(Node):节点是主要的计算执行进程。一个功能包可以有多个节点功能,就是说可以有多个main入口。如果你想要有一个可以与其他节点进行交互的进 程,那么需要创建一个节点,并将节点链接到ROS网络。通常情况下,系统包含能够实现不同功能的多个节点,为了减少系统的风险,最好每个节点的功能都是功 能较为单一的,而不是在系统中创建一个保罗万象的大节点。就诶点能够使用如roscpp(C++)或rospy(python)的ros客户端库进行编写 程序。
  • 节点管理器(Master):节点管理器用于节点的名称注册和查找等。如果你的整个ROS系统中没有节点管理,就不会有节点,服 务,消息之间的通信。需要注意的是,由于ROS本身是一个分布式网络系统,你可以在一台计算机上运行节点管理器,在其他计算机上运行由该管理器管理的节 点。
  • 参数服务器(Parameter Server):参数服务器能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能在运行时配置节点或者改变节点的工作任务。
  • 消息(Message):节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的数据信息。ROS中包含多种标准类型的消息,例如整型,字节等,同时你也可以基于标准消息开发自定义类型的消息。
  • 主 题(Topic):主题是由ROS网络对消息进行陆游和消息管理的数据总线。每条消息都发布到相应的主题。当一个节点发送数据时,我们就说该节点正在向主 题发布消息。节点可以通过订阅某个主题,接收来自其他节点的消息。一个节点可以订阅一个主题,而并不需要该节点同时发布该主题。这就保证了消息的发布者和 订阅者之间的相互解偶,完全无需知晓对方的存在。主题的名称必须是独一无二的,否则同名主题之间的消息路由就出现错误。
  • 服务(Service): 在发布主题时,正在发送的数据能够以多对多的方式交互。但当你需要从某个节点获得一个请求或应答时,就不能通过主题来实现了,在这种情况下,就需要用到服 务了,服务能够允许我们直接与某个节点进行交互。此外,服务必须有一个唯一的名称。当一个节点提供某个服务时,所有节点都可以通过使用ROS客户端库所编 写的代码与它通信。
  • 消息记录包(Bag):消息记录包是一种用于保存和回放ROS消息数据的文件格式。消息记录包是一种用于存储数据的 重要机制。他能够获取并记录各种难以收集的传感器数据。我们可以通过消息记录包反复获取实验数据,进行必要的开发和算法测试。在使用复杂机器人进行实验工 作时,需要经常使用消息记录包。

3、开源社区级

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

  • 发行者(Distribution):ROS发行版是可以独立安装的,带有版本号的一系列功能包集。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合来维持一致的版本。
  • 软件源(Repositorie):ROS依赖于共享开源代码与软件源的网站或主机服务,在这里不同的机构能够发布分享各自的机器人软件和程序。
  • ROS Wiki:ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户和贡献自己的文件,提供更正和更新,编写教程以及其他信息。
  • 邮件列表(Mailing list):ROS用户邮件列表是关于ROS的主要交流渠道,能够交流从ROS软件更新到ROS软件使用中的各种疑问或信息。

参考资料

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

[2]. ROS的Big Picture理解

ROS知识(2)----理解ROS系统结构的更多相关文章

  1. SLAM+语音机器人DIY系列:(二)ROS入门——7.理解tf的原理

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. ROS知识(18)----Pluginlib原理

    目录 Overview Example Providing a Plugin Registering/Exporting a Plugin The Plugin Description File Re ...

  4. 理解ros话题--6

    理解ROS话题(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/) Description: 本教程介绍ROS话题(topics)以及如何使用ro ...

  5. ROS知识(5)----消息与服务的示例

    ROS中已经定义了较多的标准类型的消息,你可以用在这些标准类型的消息上再自定义自己的消息类型.这个在复杂数据传输很有用,例如节点和服务器进行交互时,就可能用到传输多个参数到服务器,并返回相应的结果.为 ...

  6. ROS知识(3)----功能包package编译的两种方式

    ROS的包编译有两种方法(我知道的),一种是用rosmake,这种方法简单:另一种是用catkin_make,这种方法更方便包的管理和开发.这两种方法都是先建立工作空间workspace(类似于vs下 ...

  7. 由浅到深理解ROS(1)

    ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...

  8. ROS笔记3 理解nodes

    http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes 介绍几个命令行工具用法 roscore rosnode rosrun A node reall ...

  9. ROS知识(20)----使用Master_API查询Master管理的节点话题服务内容

    在一些应用中会需要获取master的uri地址,发布的话题,订阅的话题,发布的服务,节点的信息等等.这些功能我们通常可一通过rosnode list, rosnode info, rostopic l ...

随机推荐

  1. Core Data 迁移与版本管理

    原文  http://chun.tips/blog/2014/11/28/core-data-ban-ben-qian-yi-jing-yan-zong-jie/ 主题 Core DataiOS开发 ...

  2. iOS - ShareSDK第三方分享(图文和视频)和登录

    由于近期工作需要自己抽时间搞了一下第三方分享,这里使用的是shareSDK的第三方,在使用的过程中有一些心得和体会,特在此和大家分享一下~ 1.在经过将近一周时间的开发,终于搞定ios分享了. 2.由 ...

  3. python---使用md5加密

    python中使用md5进行加密字符串: __author__ = 'Administrator' #-*- coding: utf-8 -*- import hashlib aa = ' #需要加密 ...

  4. Django---渲染到模板

    简单的路由操作: from index import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', vie ...

  5. TFS二次开发09——查看文件历史(QueryHistory)

    这篇文章给大家展示怎样获取一个文件的历史版本,内容很简单,直接上代码了. string tpcURL = "http://127.0.0.1:8080/"; TfsTeamProj ...

  6. 线性参照,M值的相关测试

    怎样使用普通线要素获取带M值的线要素 怎样查看线要素各个折点上的M值,怎样导出为一张表 线性参照:http://resources.arcgis.com/zh-cn/help/main/10.2/in ...

  7. LightOj 1265 - Island of Survival(概率)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1265 题目大意:有一个生存游戏,里面t只老虎,d只鹿,还有一个人,每天都要有两个生物碰 ...

  8. [python]去掉 unicode 字符串前面的 u(转)

    add by zhj: 其实一般情况下,不会遇到变量c这种编码的,往往是哪些出错了,才会出现这种情况.所以遇到这种情况,要先 查看代码,避免这种情况的出现 原文:https://mozillazg.c ...

  9. TcMalloc的介绍以及Windows下安装使用

    本文由博主(SunboyL)原创,转载请注明出处:http://www.cnblogs.com/xsln/p/Introduction_TcMalloc.html 介绍: TcMalloc(Threa ...

  10. mysql获取下一篇和上一篇文章的ID

    mysql获取上一篇和下一篇文章的ID只要在当前页面读取上一个和下一个的ID就可以了.假设当前ID为10:搜索上一个的ID:select  id  from table where id<10 ...