零之前言

要想真的用好ROS这款框架,需要我们需要比较好了解整个框架的架构。本文只做概念性的记录,后面会详细编写其内容。
对于这一节内容,我选择了几个比较好的博客链接分享:
ROS学习笔记二:ROS系统架构及概念

一、三层级

ROS被分为三部分与层级:文件系统级计算图级开源社区级

1.文件系统级

在这里插入图片描述
引用一张图,其中文件系统级可以由综合功能包和功能包构成,综合功能包由许多功能包构成,ROS提供了许多的综合功能包以便我们调用。而功能包里的东西,是我们的重点。

我们来看看一个ROS的里的文件结构的例子,等会儿讲解的时候也可以对照着这组图来看:
在这里插入图片描述
在这里插入图片描述

①工作空间

我们先tree一个目录(该目录就是工作目录),这个目录里有:builddevelsrc三个子文件夹。其中的builddevel分别是编译的中间产物和结果,我们可以不用太去管它,最重要的就是src这个文件夹了,我们编写的东西,基本上都存放在这里。

②功能包

结合图例,我们的功能包就是这个src文件夹里的example,这个包就叫做功能包,里面可能会有以下东西:

类型必需路径作用
文件夹必需/include/包名用于存放我们写的代码的头文件
文件夹/msg用于编写我们非标准通信数据类型格式
文件夹/svr用于编写我们服务的数据格式
文件夹/script用于存放脚本文件,python代码也放这里
文件夹必需/src用于存放我们编写的节点的源码
文件必需/用于编译的Cmake语句
文件必需/功能包清单文件

对于功能包的管理,ROS推出了一些类似于Linux的命令,例如roscdrosls等,至于用法不赘述,可以看这里的详细例子:创客智造-ROS入门教程-1.1.2 ROS文件系统介绍

③综合功能包

综合功能包是一些只有一个package.xml文件的特定包,它不包含其他文件,如代码等。综合功能包用于引用其他功能特性类似的功能包。

④消息

消息存放在功能包的/src/msg里,用于规定通信的非标准数据类型。

⑤服务

服务存放于功能包的/srv里,用于规定通信的非标准数据类型。

ROS使用了一种简化的服务描述语言来描述ROS的服务类型

2.计算图集

ROS的计算图集由下图所示组成

这图展示了运行时它们的关系:
在这里插入图片描述

名称作用
节点(node)节点是主要的计算执行进程,推荐一个节点只对应一个功能
节点管理器(master)顾名思义,可以直接理解为管理这些节点是否存活,管理它们之间的关系的东西,也就是我们运行时用roscore启动的东西之一
参数服务器(parameter server)参数服务器是可通过网络访问的共享的多变量字典。节点使用此服务器来存储和检索运行时的参数。
消息(message)消息包括一个节点发生到话题到其他节点的数据类型
话题(topic)话题相当于消息的中转站,多个节点可以给同一个节点发送同一种消息,多个节点也可以在节点力接收同一种消息
服务(service)用于节点至节点的传输(不经过话题) ,其数据类型也可能需要自定义
消息记录包(bag)消息纪录包是由ROS创建的一组文件。它使用 .bag 格式保存消息、主题、服务和其他ROS数据信息。(类似于日志文件,查错方便)

说明:话题和服务是两种不同不同的通信方式。两者有所差别,详细的内容可以看这些博客:
ROS学习笔记6~Topic(话题) 和Service(服务)的区别
ROS话题和服务
我们可以大概可以这样理解消息话题与服务,话题与服务是节点的通讯方式,而消息是话题的数据类型。

3.开源社区级别

这一级别的内容没有什么可以说的,主要就是可以学习ROS的资源包括一下内容:

  • 发行版
  • 软件库
  • ROS维基
  • Bug提交系统
  • 邮件列表
  • ROS问答
  • 博客
  • ……
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐