ROS 和 ROS2 架构和通信

ROS 和 ROS2 架构和通信

  • 1. ROS 架构设计
    • 1.1 OS 层
    • 1.2 中间层
    • 1.3 应用层
  • 2. ROS 的通信机制
    • 2.1 话题通信机制
      • 2.1.1 Talker 注册
      • 2.1.2 Listener 注册
      • 2.1.3 ROS Master 进行信息匹配
      • 2.1.4 Listener 发送连接请求
      • 2.1.5 Talker 确认连接请求
      • 2.1.6 Listener 尝试与 Talker 建立 络连接
      • 2.1.7 Talker 向 Listener 发布数据
    • 2.2 服务通信机制
      • 2.2.1 Talker 注册
      • 2.2.2 Listener 注册
      • 2.2.3 ROS Master 进行信息匹配
      • 2.2.4 Listener 尝试与 Talker 建立 络连接
      • 2.2.5 Talker 向 Listener 发布数据
    • 2.3 参数管理机制
      • 2.3.1 Talker 设置变量
      • 2.3.2 Listener 查询参数值
      • 2.3.3 ROS Master 向 Listener 发送参数值
    • 2.4 话题与服务的区别
  • 3. ROS 2 的系统架构
    • 3.1 OS 层
    • 3.2 中间层
    • 3.3 应用层
  • 4. ROS 2 的关键中间件—-DDS
  • 5. ROS 2 的通信模型
    • 5.1 参与者(Participant)
    • 5.2 发布者(Publisher)
    • 5.3 订阅者(Subscriber)
    • 5.4 数据写入器(DataWriter)
    • 5.5 数据读取器(DataReader)
    • 5.6 话题(Topic)
    • 5.7 质量服务原则(Quality of Service)
  • 6. 什么是 RPC
    • 6.1 本地过程调用
    • 6.2 远程过程调用
      • 6.2.1 大致过程如下
    • 6.3 RPC 与 TCP

Reference:

  1. 胡春旭 《ROS 机器人开发实践》
  2. What is ROS 2.0 li>
  3. 什么是RPCli>
  4. Connected: An Internet Encyclopedia — RPC Protocol Overview

1. ROS 架构设计

ROS 架构如下图所示,可以将其分为三个层次:OS 层、中间层和应用层。

2.1.1 Talker 注册

Talker 启动,通过 1234 端口使用 RPC 向 ROS Master 注册发布者的信息,包含所发布消息的话题名;ROS master 会将节点的注册信息加入注册列表中。

2.1.2 Listener 注册

Listener 启动,同样通过 RPC 像 ROS Master 注册订阅者的信息,包含需要订阅的话题名。

2.1.3 ROS Master 进行信息匹配

Master 根据 Listener 的订阅信息从注册列表中进行查找,如果没有找到匹配的发布者,则等待发布者的加入;如果找到匹配的发布者信息,则通过 RPC 向 Listener 发布 Talker 的 RPC 地址信息。

2.1.4 Listener 发送连接请求

Listener 接收到 Master 发回的 Talker 地址信息,尝试通过 RPC 向 Talker 发送连接请求,传输订阅的话题名、消息类型以及通信协议(TCP/UDP)。

2.1.5 Talker 确认连接请求

Talker 接收到 listener 发送的连接请求后,继续通过 RPC 向 Listener 确认链接信息,其中包含自身的 TCP 地址信息。

2.1.6 Listener 尝试与 Talker 建立 络连接

Listener 接收到确认信息后,使用 TCP 尝试与 Talker 建立 络连接。

2.1.7 Talker 向 Listener 发布数据

成功建立连接后,Talker 开始向 Listener 发送话题消息数据。

从上面的分析中可以发现,前五个步骤使用的通信协议都是 RPC,最后发布数据的过程才使用到 TCP。ROS Master 在节点建立连接的过程中起到了重要作用,但是并不参与节点之间最终的数据传输。

2.2 服务通信机制

服务是一种带有应答的通信机制,通信原理如下图所示,与话题的通信相比,其减少了 Listener 与 Talker 之间的 RPC 通信。

2.3.1 Talker 设置变量

Talker 使用 RPC 向 ROS Master 发送参数设置数据,包含参数名和参数值;ROS Master 会将参数名和参数值保存到参数列表中。

2.3.2 Listener 查询参数值

Listener 通过 RPC 向 ROS Master 发送参数查找请求,包含索要查找的参数名。

2.3.3 ROS Master 向 Listener 发送参数值

Master 根据 Listener 的查找请求从参数列表中进行查找,查找到参数后,使用RPC 将参数数值发送给 Listener。

这里需要注意的是,如果 Talker 向 Master 更新参数值,Listener 在不重新查询参数值的情况下是无法知晓参数值已经被更新的。所以在很多场景中,需要一种动态参数更新机制。

2.4 话题与服务的区别

话题和服务是 ROS 中最基础也是使用最多的通信方法,具体总结如下:

条目 话题 服务
同步性 异步 同步
通信模型 发布/订阅 客户端/服务器
反馈机制
底层协议 ROSTCP/ROSUDP ROSTCP/ROSUDP
缓冲区
实时性
节点关系 多对多 一对多(一个Server)
使用场景 弱逻辑处理,多数据传输 强逻辑处理,少数据传输

总之,话题是 ROS 中基于 发布/订阅 模型的异步通信模式,这种方式将信息的产生和使用双方解耦,常用于不断更新的、含有较少逻辑处理的通信数据;而服务多用于处理 ROS 中的同步通信,采用 客户端/服务器 模型,常用于数据量较小但有强逻辑处理的数据交换。

3. ROS 2 的系统架构

ROS 2 重新设计了系统架构,图再搬来一次。

5.1 参与者(Participant)

在 DDS 中,每一个发布者或者订阅者都成为参与者,对应于一个使用 DDS 的用户,可以使用某种定义好的数据类型来 读/写 全局数据空间。

5.2 发布者(Publisher)

数据发布的执行者,支持多种数据类型的发布,可以与多个数据写入器(DataWriter)相联,发布一种或多种主题(Topic)的消息。

5.3 订阅者(Subscriber)

数据订阅的执行者,支持多种数据类型的订阅,可以与多个数据读取器(DataReader)相联,订阅一种或多种主题(Topic)的消息。

5.4 数据写入器(DataWriter)

上层应用向发布者更新数据的对象,每个数据写入器对应一个特定的Topic,类似于ROS 1中的一个消息发布者。

5.5 数据读取器(DataReader)

上层应用从订阅者读取数据的对象,每个数据读取器对应一个特定的Topic,类似于ROS 1中的一个消息订阅者。

5.6 话题(Topic)

和 ROS 1 中的概念类似,话题需要定义一个名称和一种数据结构,但 ROS 2 中的每个话题都是一个实例,可以存储该话题中的历史消息数据。

5.7 质量服务原则(Quality of Service)

简称 QoS Policy,这是 ROS 2 中新增的、也是非常重要的一个概念,控制各方面与底层的通信机制,主要从时间限制、可靠性、持续性、历史记录这几个方面,满足用户针对不同场景的数据需求。

6.3 RPC 与 TCP

RFC 1831 中记录的远程过程调用(Remote Procedure Call, RPC) 协议旨在以与 TCP 不同的方式扩展 IP。TCP 的目标是大数据流的传输(比如文件下载),而 RPC 是为 络编程而设计的。

RPC 的关键特征有:

  • Request-reply:RPC 是一个 请求-应答 协议,可以表现出此类协议的典型“乒乓”行为。这不是 RPC 设计的基础(因为多个请求可以是未完成的,应答可以以任何顺序出现),但是大多数程序将发出单个 RPC 请求,然后阻塞等待应答。
  • UDP 或 TCP 传输:RPC 实际上是通过 UDP 或 TCP 进行操作的。RPC/UDP 是一种无连接、无状态的协议。RPC/TCP 较慢,但提供可靠的有状态连接。
  • 标准化的数据表示:RPC 使用 eXternal Data Representation(XDR) 协议对其数据进行编码,该协议记录在RFC 1832 中,它标准化了整数、浮点数和字符串的格式,允许不同类型的计算机无缝地增强信息。
  • 身份验证:RPC 支持将一台机器上的调用程序验证为另一台机器上的目标子例程。身份验证可以以几种不同的模式进行操作。在 NFS 操作过程中,身份验证通常采用将 UNIX 用户和 group IDs 传递给文件服务器进行权限检查的形式。

RPC 服务对接:
TCP 和 UDP 都依赖众所周知的 port numbers 来执行服务会合。例如,TCP TELNET 服务在 port 21 上可用,FTP 在端口 23 上可用,SMTP 在 port 25 上可用,等等。连接到 TCP 和 UDP 服务只需要连接到正确的 port number。

RPC 在这个过程中引入了另一个步骤,将服务与给定的 port number 分离。它使用一个名为 PORTMAP 或 RPCBIND 的特殊 RPC 服务来实现这一点。这些在 RFC 1833 中记录的绑定协议通常被称为 portmapper,它们在 RPC 服务中是唯一的,因为它们有自己的指定 port(port 111)。运行在任意 port number 上的其他 RPC 服务可以使用到 port 111 的 RPC 调用来注册自己。portmapper 提供其他 RPC 调用以允许服务查找。

这种设计最重要的结果是,portmapper 必须是第一个启动的 RPC 程序,并且必须保持恒定的操作。

RPC 本质上不一定是 TCP,或者说常见的 RPC 是基于 TCP 的或使用 TCP 之上的某种协议的。

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8763 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月19日
下一篇 2021年6月19日

相关推荐