ROS学习笔记3:ROS架构(了解)

        笔记3不涉及实际操作,主要是用自己的语言和思路简略整理了《ROS机器人开发实践》一书第2章内容。第一次看这一章的内容会有不知道在讲什么的感觉,但这一章的内容确实对后续实践操作章节的理解有非常大的帮助。

一、ROS架构:

        ROS是一个优秀的机器人分布式框架。ROS架构的三个层次:基于Linux系统的OS层;实现ROS核心通信机制以及众多机器人开发库的中间层;在ROS Master的管理下保证功能节点的正常运行的应用层。

ROS学习笔记3:ROS架构(了解)_第1张图片

1.OS层:

        ROS无法直接运行在计算机硬件上,需要依托于Linux、macOS等操作系统运行。

2.中间层:

        Linux是一个通用系统,没有针对机器人开发提供的特殊中间件,因此在中间层,ROS封装了关于机器人开发的中间件,主要包括:

(1)基于TCP/UDP网络封装的TCPROS/UDPROS通信系统。

(2)一种用于进程内的通信方法Nodelet,为多进程通信提供一种更优化的数据传输方式。

(3)在通信机制上提供的大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。

3.应用层:

(1)ROS运行的管理者:Master(负责整个系统的正常运行)。

(2)功能包:ROS社区内共享了大量的机器人应用功能包,这些功能包内的模块以节点为单位运行。

二、重要概念:

        从系统实现的角度来看:ROS可分为三个层次:计算图、文件系统、开源社区。

ROS学习笔记3:ROS架构(了解)_第2张图片

1.计算图:

        从计算图的角度来看,ROS系统软件的功能模块以节点为单位独立运行,可以分布于多个相同或不同的主机中,在系统运行时通过端对端的拓扑结构进行连接。

ROS学习笔记3:ROS架构(了解)_第3张图片

(1)节点与节点管理器:

        节点(Node,又称“软件模块”):一些执行运算任务的进程,一个系统一般由多个节点组成。

        节点管理器(ROS Master):通过远程过程调用(RPC)提供登记列表和对其他计算图表的查找功能。ROS Master是一个管理者,没有它节点将无法找到彼此,也无法交换消息或调用服务,整个系统也将瘫痪。

(2)消息与话题:

        消息:ROS中基于发布订阅通信机制传递的一种严格的数据结构,由节点处理消息并进行发送或接收,最终实现想要的功能。可通过rosmsg来查看关于消息的操作。

        话题:消息以一种发布/订阅(Publisher/Subcriber)的方式传递。一个节点可以针对一个给定的话题(Topic)发布消息(这个节点称为发布者Talker),也可以关注某个话题并订阅特定类型的数据(这个节点称为订阅者Listener)。

       话题是发布者节点和订阅者节点之间传输数据的管道,传输的数据叫做消息。

(3)服务: 

        服务是节点之间同步通信的一种方式,其中提供服务者称为服务者节点,被服务者称为客户端节点。客户端节点(Client)可以发布请求(Request),服务者节点(Server)处理后反馈应答(Response)。catkin_ws

2.文件系统:

        类似于操作系统,ROS将所有文件按照一定的规则进行组织,不同功能的文件放在不同的文件夹下。

ROS学习笔记3:ROS架构(了解)_第4张图片

(1)功能包:

        功能包是ROS 软件中的基本单元,包含ROS节点、库、配置文件等。

        功能包的典型文件结构如下:

ROS学习笔记3:ROS架构(了解)_第5张图片

1)config:放置功能包中的配置文件,由用户创建,文件名可以不同。

2)include:放置功能包中需要用到的头文件。

3)scripts:放置可以直接运行的python脚本。

4)src:放置需要编译的C++代码。

5)launch:放置功能包中的所有启动文件。

6)msg:放置功能包自定义的消息类型。

7)srv:放置功能包自定义的服务类型。

8)action:放置功能包自定义的动作指令。

9)CMakeLists.txt(必须):编译器编译功能包的规则。

10)package.xml(必须):功能包清单。

(2)功能包清单:

        每个功能包都包含一个叫package.xml的功能包清单,用于记录功能包的基本信息。

(3)元功能包:

        元功能包是一种特殊的功能包,只包含一个package.xml元功能包清单文件。它的主要作用是将多个功能包整合成为一个逻辑上独立的功能包,类似于集合概念。

        元功能包清单的package.xml文件相较于功能包的package.xml文件,需要包含一个引用的标签。


    

(4)消息类型:

        消息是ROS节点之间发布/订阅的通信信息,可以使用ROS提供的消息类型,也可以使用.msg文件在功能包的msg文件夹下自定义所需要的消息类型。

(5)服务类型:

        服务类型定义了ROS客户端/服务器通信模型下的请求和应答数据类型,可以使用ROS系统提供的服务类型,也可以使用.srv文件在功能包的srv文件夹中进行定义。

(6)代码:

        用来放置功能包节点源代码的文件夹。

3.ROS文件工程结构(工作空间catkin_ws):

        代码文件需要放置到一个固定的空间内,即工作空间。

        工作空间就是包含软件包的目录,存放工程开发相关文件。一个典型的工作空间(catkin_ws)包含以下目录:

1)src:源码空间

2)bulid:编译空间

3)devel:开发空间

4)install:安装空间

ROS学习笔记3:ROS架构(了解)_第6张图片

4.开源社区:

        主要是发行版,软件源,ROS wiki,邮件列表,ROS Answer,Blog。

三、ROS的通信机制:

        ROS的核心是分布式通信机制,基本通信方式分为以下三种:

1.话题通信机制(异步通信机制):

(1)话题:

        节点间用来传输数据的重要总线,使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。

(2)消息:

        消息是话题数据,具有一定的类型和数据结构,使用编程语言无关的.msg文件定义,编译过程中生成对应的代码。

(3)话题通信的三个角色:

1)发布者Talker:负责向订阅者发布数据。

2)订阅者Listener:负责接收发布者的数据。

3)管理者ROS Master:负责保管发布者和订阅者注册的信息,并匹配话题相同的发布者与订阅者,帮助发布者与订阅者建立连接。

(4)建立通信的过程:

1)Talker注册

2)Listener注册

3)ROS Master注册

4)Listener发送连接请求

5)Talker确认连接请求

6)Listener尝试与Talker建立网络连接

7)Talker向Listener发布数据

ROS学习笔记3:ROS架构(了解)_第7张图片

2.服务通信机制(同步通信机制):

(1)服务通信的三个角色:

1)客户端client:负责向服务端发送请求,并接收服务端发送的数据。

2)服务端server:负责接收处理请求,并对客户端作出相应。

3)管理者ROS Master:负责保管客户端和服务端注册的信息,并匹配话题相同的客户端与服务端,帮助客户端和服务端建立连接。

(2)建立通信的过程:

1)Talker注册

2)Listener注册

3)ROS Master进行信息匹配

4)Listener与Talker建立网络连接

5)Talker向Listener发布服务应答数据

ROS学习笔记3:ROS架构(了解)_第8张图片

 

(3)对比话题通信极致机制和服务通信机制:

ROS学习笔记3:ROS架构(了解)_第9张图片

3.参数管理机制:

        参数类似于ROS中的全局变量,由ROS Master进行管理,其通信机制较为简单,不涉及TCP/UDP的通信。

(1)参数服务器的三个角色:

1)管理者ROS Master:管理者作为一个公共的容器保存数据。

2)参数设置者Talker:参数设置者往容器中存储数据。

3)参数调用者Listener:参数调用者读取容器中所需的数据。

(2)建立通信的过程:

1)Talker设置变量

2)Listener查询参数值

3)ROS Master向Listener发送参数值

ROS学习笔记3:ROS架构(了解)_第10张图片

 

你可能感兴趣的:(ROS编程技术,学习,机器人)