本次读书笔记主要记录了本周关于《ROS机器人开发实践》的学习内容。
《ROS机器人开发实践》第二章 ROS架构 目录
- 2.1 ROS架构设计
- 2.2 计算图
2.2.1 节点
2.2.2 消息
2.2.3 话题
2.2.4 服务
2.2.5 节点管理器
- 2.3 文件系统
2.3.1 功能包
2.3.2 元功能包
- 2.4 开源社区
- 2.5 ROS的通信机制
2.5.1 话题通信机制
2.5.2 服务通信机制
2.5.3 参数管理机制
- 2.6 话题与服务的区别
第二章 ROS架构
2.1 ROS架构设计
我们都知道,ROS是一个优秀的机器人分布式框架,那么ROS的架构具体是怎样的呢?其实很简单,ROS的架构设计可以分为以下三个层次:
1.OS层
首先我们要明确ROS机器人操作系统和windows、Linux不一样,ROS不是一个传统意义上的操作系统,因为它无法在计算机硬件上直接运行,而是需要依托于Linux系统。正因如此,在前面的准备过程中,我们会发现,安装ROS前最重要的一步就是先安装Ubuntu操作系统(Ubuntu在ROS官网上支持度最高,也可以使用macROS等操作系统),这就是为什么无论你是选择虚拟机还是选择双系统的方式,安装Ubuntu都是不可或缺的一步。
2.中间层
中间层是用来实现ROS核心通信机制以及众多机器人开发库的,虽然ROS对Linux更加青睐,但是Linux是一个通用系统,所以它不会对ROS有丝毫的关照,所有关于机器人开发的中间件都得靠ROS自己来完成,所以ROS在中间层做了大量的工作,如:TCPROS/UDPROS通信系统。
3.应用层
应用层有一个负责保证节点正常运行的管理者——Master。
2.2 计算图
前面说到应用层有一个Master管理者负责节点的正常运行,那么什么是节点呢?节点(Node)就是一些执行运算任务的进程,一个系统一般由多个节点组成,也可以称为“软件模块”。简单来说,一个节点就是ROS中与其他节点进行联系的可执行文件(事实上节点就是package中的一个可执行文件)。举一个最简单的例子:
当我们成功运行turtlesim package中的turtlesim_node节点后,输入命令:
rosnode list
去查看当前正在运行的节点,我们会发现,我们已经成功运行了海龟节点,turtlesim节点就是一个简单的节点。结果如图所示:
-
2.2.2 消息
节点之间最重要的通信机制就是基于发布/订阅模型的消息通信。每一个消息都是一种严格的数据结构,支持标准数据类型,也支持嵌套结构和数组,还可以根据需求由开发者自主定义。
-
2.2.3 话题
消息以一种发布/订阅的方式传递。一个节点可以针对一个给定的话题发布消息,也可以关注某个话题并订阅特定类型的数据。发布者和订阅者并不了解彼此的存在,系统中可能同时有多个节点发布或者订阅同一个话题的消息。
-
2.2.4 服务
与话题不同,ROS中只允许有一个节点提供指定命名的服务,另外服务是一种同步传输模式,其基于客户端/服务器模型,包含两部分通信数据类型——分别用于请求和应答,类似于Web服务器。
-
2.2.5 节点管理器
节点管理器(ROS Master)的作用和它的名字一样,它是一个管理者,负责管理所有的节点运行地有条不紊。节点管理器的存在使得节点能够找到适时的其他节点,实现交换信息或调用服务,保证整个系统的正常运行。
2.3 文件系统
2.3.1 功能包
功能包是ROS软件中的基本单元,包含ROS节点、库、配置文件等。
2.3.2 元功能包
在新版本的ROS中,将原有功能包集的概念升级为“元功能包”,主要作用都是组织多个用于同一目的的功能包。例如一个ROS导航的元功能包中会包含建模、定位、导航等多个功能包。
2.4 开源社区
ROS开源社区中的资源非常丰富,而且可以通过网络共享以下软件和知识(见下图)。
- 发行版(Distribution):类似于Linux发行版,ROS发行版包括一系列带有版本号、可以直接安装的功能包,这使得ROS的软件管理和安装更加容易,而且可以通过软件集合来维持统一的版本号。
- 软件源(Repository):ROS依赖于共享网络上的开源代码,不同的组织机构可以开发或者共享自己的机器人软件。
- ROS wiki:记录ROS信息文档的主要论坛。所有人都可以注册、登录该论坛,并且上传自己的开发文档、进行更新、编写教程。
- 邮件列表(Mailing List):ROS 邮件列表是交流ROS更新的主要渠道,同时也可以交流ROS开发的各种疑问。
- ROS Answers:ROS Answers 是一个咨询ROS相关问题的网站,用户可以在该网站提交自己的问题并得到其他开发者的回答。
- 博客(Blog):发布ROS社区中的新闻、图片、视频(http://www.ros.org/news)。
2.5 ROS的通信机制
2.5.1 话题通信机制
话题在ROS中使用的最为频繁,其通信模型也较为复杂。在ROS中有两个节点:Talker和Listener,即发布者和订阅者。这里二者启动顺序无强制要求(都是同一个话题),假设Talker先启动,则建立通信的过程可以分为以下七步:
- Talker注册
- Listener注册
- ROS Master进行信息匹配
- Listener发送连接请求
- Talker确认连接请求
- Listener尝试与Talker建立网络连接
- Talker向Listener发布数据
2.5.2 服务通信机制
服务是一种带有应答的通信机制,与话题通信相比较而言,服务通信减少了Listener与Talker之间的RPC通信。因此建立服务通信的过程可以分为五步:
- Talker注册
- Listener注册
- ROS Master进行信息匹配
- Listener与Talker建立网络连接
- Talker向Listener发布服务应答数据
2.5.3 参数管理机制
参数类似于ROS中的全局变量,由ROS Master进行管理,其通信机制较为简单,不涉及TCP/UDP的通信。
- Talker设置变量
- Listener查询参数值
- ROS Master向Listener发送参数值
2.6 话题与服务的区别
话题与服务的区别
话题 | 服务 | |
同步性 | 异步 | 同步 |
通信模型 | 发布/订阅 | 客户端/服务器 |
底层协议 | ROSTCP/ROSUDP | ROSTCP/ROSUDP |
反馈机制 | 无 | 有 |
缓冲区 | 有 | 无 |
定时性 | 弱 | 强 |
节点关系 | 多对多 | 一对多(一个Server) |
适用场景 | 数据传输 | 逻辑处理 |