一、前言
本文描述了在 ROS 和特定中间件实现之间使用抽象中间件接口的基本原理。它将概述目标用例及其要求和约束。在此基础上解释了开发的中间件接口。
二、中间件接口
2.1 为什么ROS 2有中间件接口
ROS 客户端库定义了一个 API,它向用户公开发布/订阅等通信概念。
在 ROS 1 中,这些通信概念的实现基于自定义协议(例如 TCPROS)。
对于 ROS 2,已决定将其构建在现有中间件解决方案(即 DDS)之上。这种方法的主要优点是 ROS 2 可以利用该标准的现有且开发良好的实现。
ROS 可以建立在 DDS 的一种特定实现之上。但是有许多不同的实现可用,并且每种实现在支持的平台、编程语言、性能特征、内存占用、依赖关系和许可方面都有自己的优缺点。
因此,ROS 旨在支持多个 DDS 实现,尽管它们每个实现的确切 API 略有不同。为了从这些 API 的细节中抽象出来,引入了一个抽象接口,可以为不同的 DDS 实现实现。这个中间件接口定义了 ROS 客户端库和任何特定实现之间的 API。
接口的每个实现通常都是一个瘦适配器,它将通用中间件接口映射到中间件实现的特定 API。下面将省略适配器和实际中间件实现的共同分离。
+-----------------------------------------------+
| user land |
+-----------------------------------------------+
| ROS client li