ROS初学(二):ROS的三种基本通信机制(来自赵虚左老师)

一、综述

ROS引入通信机制,是为了实现ROS节点(进程)之间的通信。利用ROS进程的分布式框架,可以使得每个进程独立的工作,甚至分布于不同的主机工作。机器人上的各种传感器,比如雷达、GPS等,需要传递数据以实现对机器人的合理控制,进程通信的实现则是其中传输数据的关键。

ROS的基本通信方式将分为三种:

1.话题通信(发布订阅模式)

2.服务通信(请求响应模式)

3.参数服务器(参数共享模式)

接下来将会详细介绍三种通信方式的理论模型

二、话题通信

话题通信,一般就是指:一个节点发布消息,另一个节点订阅该消息。适用于不断更新的、少逻辑处理的数据传输场景。

1.话题通信的三个角色

话题通信涉及到三个角色。

Talker(发布者)

负责像订阅者发布数据。

Listener(订阅者)

负责接收发布者的数据。

ROS Master(管理者)

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

2.话题通信建立的流程

下图就是话题通信建立的示意图,摘抄自课程笔记。

ROS初学(二):ROS的三种基本通信机制(来自赵虚左老师)_第1张图片

step0:

发布者在管理者处注册,其中包含所发布消息的话题名称。管理者会将节点的注册信息加入到注册表中。

step1:

订阅者在管理者处注册,包含需要订阅消息的话题名称。管理者会将节点的注册信息加入到注册表中。

step2:

管理者根据注册表中的发布者、订阅者的话题名称进行匹配,并将发布者的地址信息告诉订阅者。

step3:

订阅者向发布者发送连接请求,传输订阅的话题名称、消息类型以及通信协议(TCP/UDP)。

step4:

发布者响应订阅者的请求,并发送自身的 TCP 地址信息。

step5:

 订阅者根据步骤4 返回的消息使用 TCP 与发布者建立网络连接。

step6:

连接建立以后,发布者向订阅者发送信息。

3.注意事项及说明

1.step0与step1没有先后顺序的要求,即发布者和订阅者的启动没有先后的要求

2.只有当发布者和订阅者的话题名称相同时才能进行话题通信

3.发布者和订阅者可以有多个

4.发布者和订阅者关闭以后就不再需要管理者,即使管理者关闭,话题通信仍能进行。

5.在代码编写中,我们关注的一般是话题、消息传输的格式等等,而发布者和订阅者所建立连接的过程是被封装好的。

三、服务通信

服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。一般用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。

1.服务通信的三个角色

和话题通信相似,服务通信也有三个角色

client(客户端)

负责向服务端发送请求,并接收服务端发送的数据。

server(服务端)

负责接收处理请求,并对客户端做出响应。

ROS Master(管理者)

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

2.服务通信建立的流程

下图就是服务通信建立的示意图,摘抄自课程笔记。

ROS初学(二):ROS的三种基本通信机制(来自赵虚左老师)_第2张图片

step0:

服务端启动,在管理者处注册,其中包含提供的服务的名称。管理者会将节点的注册信息加入到注册表中。

step1:

客户端启动,在管理者处注册,其中包含请求的服务的名称。管理者会将节点的注册信息加入到注册表中。

step2:

管理者根据服务端和客户端的服务名称进行匹配,并将服务端的地址信息告知客户端。

step3:

客户端与服务端进行网络连接,并发送有关请求。

step4:

服务端处理请求数据,产生响应并发送给客户端。

3.注意事项

1.客户端请求被处理时,要保证服务端已经启动

2.服务端和客户端都可以存在多个

四、参数服务器

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。参数服务器一般用于存储一些多节点共享的数据,类似于全局变量。

1.参数服务器的三个角色

ROS Master (管理者)

管理者作为一个公共的容器保存数据

Talker (参数设置者)

参数设置者往容器中存储数据

Listener (参数调用者)

 参数调用者读取容器中所需的数据

2.参数服务器实现步骤

如图所示,是参数服务器的模型

ROS初学(二):ROS的三种基本通信机制(来自赵虚左老师)_第3张图片

 

step1:

参数设置者向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。

step2:

参数调用者向参数服务器发送参数查找请求,请求中包含要查找的参数名。

step3:

ROS Master 根据步骤2请求提供的参数名查找参数值,并将查询结果发送给参数调用者。

3.参数可以使用的数据类型

  • 32-bit integers

  • booleans

  • strings

  • doubles

  • iso8601 dates

  • lists

  • base64-encoded binary data

  • 字典

4.注意事项

1.参数服务器不再是talker与listener之间传输数据

2.参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据

你可能感兴趣的:(ROS初学,自动驾驶,人工智能,机器学习)