ROS学习记录2——ROS框架的概述
零之前言
要想真的用好ROS这款框架,需要我们需要比较好了解整个框架的架构。本文只做概念性的记录,后面会详细编写其内容。
对于这一节内容,我选择了几个比较好的博客链接分享:
ROS学习笔记二:ROS系统架构及概念
一、三层级
ROS被分为三部分与层级:文件系统级
、计算图级
、开源社区级
。
1.文件系统级
引用一张图,其中文件系统级可以由综合功能包和功能包构成,综合功能包由许多功能包构成,ROS提供了许多的综合功能包以便我们调用。而功能包里的东西,是我们的重点。
我们来看看一个ROS的里的文件结构的例子,等会儿讲解的时候也可以对照着这组图来看:
①工作空间
我们先tree一个目录(该目录就是工作目录
),这个目录里有:build
、devel
、src
三个子文件夹。其中的build
和devel
分别是编译的中间产物和结果,我们可以不用太去管它,最重要的就是src这个文件夹了,我们编写的东西,基本上都存放在这里。
②功能包
结合图例,我们的功能包就是这个src文件夹里的example,这个包就叫做功能包,里面可能会有以下东西:
类型 | 必需 | 路径 | 作用 |
---|---|---|---|
文件夹 | 必需 | /include/包名 | 用于存放我们写的代码的头文件 |
文件夹 | 否 | /msg | 用于编写我们非标准通信数据类型格式 |
文件夹 | 否 | /script | 用于存放脚本文件 |
文件夹 | 必需 | /src | 用于存放我们编写的节点的源码 |
文件 | 必需 | / | 用于编译的Cmake语句 |
文件 | 必需 | / | 功能包清单文件 |
对于功能包的管理,ROS推出了一些类似于Linux的命令,例如roscd
、rosls
等,至于用法不赘述,可以看这里的详细例子:创客智造-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问答
- 博客
- ……