Fast DDS入门一、Fast DDS介绍

Fast DDS入门二、Fast DDS在Windows平台的编译安装

1 前言

Fast DDS是DDS(数据分发服务)规范的C++实现,DDS是由对象管理组(OMG)定义的协议。Fast DDS库提供应用程序编程接口(API)和通信协议,用于部署以数据为中心的发布-订阅(DCPS)模型,目的是在实时系统之间建立高效可靠的信息分发。Fast DDS在资源处理方面具有可预测性、可扩展性、灵活性和高效性。为了满足这些要求,它使用了类型化接口,并依赖于一个多对多的分布式网络范例,该范例巧妙地允许将通信的发布方和订阅方分离。Fast DDS包括:

  • DDS API实现。

  • Fast DDS-Gen,一种用于桥接类型化接口和中间件实现的生成工具。

  • 底层RTPS有线协议实现。

除了以上内容,Fast DDS已被选为Robot Operating System 2(ROS 2)在每个长期(LTS)版本和大多数非LTS版本中支持的默认中间件。

2 什么是DDS

数据分发服务(DDS)是一种用于分布式软件应用程序通信的以数据为中心的通信协议。它描述了实现数据提供者和数据使用者之间通信的通信应用程序编程接口(API)和通信语义。

由于它是一个以数据为中心的发布-订阅(DCPS)模型,因此在其实现中定义了三个关键应用程序实体:发布实体,它定义了信息生成对象及其财产;订阅实体,定义信息消费对象及其财产;和配置实体,它们定义作为主题传输的信息类型,并使用其服务质量(QoS)财产创建发布者和订阅者,以确保上述实体的正确性能。

DDS使用QoS来定义DDS实体的行为特征。QoS由各个QoS策略(从QoSPolicy派生的类型的对象)组成。策略中对此进行了描述。

在DCPS模型中,为通信应用程序系统的开发定义了四个基本要素。

发布者是负责创建和配置其实现的DataWriter的DCPS实体。DataWriter是负责实际发布消息的实体。每个人都将有一个指定的主题,在该主题下发布消息。

订阅者是负责接收在其订阅的主题下发布的数据的DCPS实体。它服务于一个或多个DataReader对象,这些对象负责向应用程序传递新数据的可用性。

主题是绑定发布和订阅的实体。它在DDS域中是唯一的。通过TopicDescription,它可以统一发布和订阅的数据类型。

领域这是用于链接属于一个或多个应用程序的所有发布者和订阅者的概念,这些应用程序在不同主题下交换数据。这些参与域的单独应用程序称为DomainParticipant。DDS域由域ID标识。DomainParticipant定义域ID以指定其所属的DDS域。具有不同ID的两个DomainParticipant不知道网络中彼此的存在。因此,可以创建几个通信信道。这适用于涉及多个DDS应用程序的场景,它们各自的DomainParticipant彼此通信,但这些应用程序不得干扰。DomainParticipant充当其他DCPS实体的容器,充当发布者、订阅者和主题实体的工厂,并在域中提供管理服务。

这些元素如下图所示。

DDS域中的DCPS模型实体

3 什么是RTPS

实时发布订阅(RTPS)协议是为支持DDS应用程序而开发的,是一种基于尽力传输(如UDP/IP)的发布订阅通信中间件。此外,Fast DDS还支持TCP和共享内存(SHM)传输。

RTPS设计为支持单播和多播通信。

RTPS继承自DDS,可以找到域的概念,它定义了一个单独的通信平面。多个域可以同时独立共存。域包含任意数量的RTPSP参与者,即能够发送和接收数据的元素。为此,RTPSP参与者使用其端点:

RTPSWriter:能够发送数据的端点。

RTPSReader:能够接收数据的端点。

RTPSParticipant可以有任意数量的编写器和读取器端点。

RTPS高级架构

通信围绕主题展开,主题定义和标记正在交换的数据。主题不属于特定参与者。参与者通过RTPSWriter对主题下要发布的数据生成数据更新(Change),通过RTPSReader接收与其订阅主题相关的数据更新。通信单元称为Change,它表示在Topic下写入的数据的更新。RTPSReader/RTPSWriter在其历史记录中注册这些数据更新,历史记录是一种数据结构,用作最近数据更新的缓存。

在eProsima Fast DDS的默认配置中,当您通过RTPSWriter端点发布更改时,会在幕后执行以下步骤:

  • Change将添加到RTPSWriter的历史缓存中。

  • RTPSWriter将Change发送给它匹配的任何RTPSReader。

  • 接收到数据后,RTPSReader将使用新的Change更新其历史缓存。

Fast DDS支持多种配置,允许您更改RTPSWriter/RTPSReader的行为。RTPS实体的默认配置中的修改意味着RTPSWriter和RTPSReader之间的数据交换流发生了变化。此外,通过选择服务质量(QoS)策略,可以以多种方式影响这些历史缓存的管理方式,但通信循环保持不变。

4 DDS API

DDS采用的通信模型是多对多的单向数据交换,其中产生数据的应用程序将数据发布到订阅方的本地缓存。信息流由负责数据交换的实体之间建立的服务质量(QoS)策略来调节。

作为一个以数据为中心的模型,DDS建立在所有感兴趣的应用程序都可以访问的“全局数据空间”的概念之上。希望贡献信息的应用程序声明其成为发布者的意图,而希望访问部分数据空间的应用程序则声明其成为订阅者的意图。每当发布者向这个空间发布新数据时,中间件就会将信息传播给所有感兴趣的订阅者。

通信发生在域之间,即连接所有能够相互通信的分布式应用程序的隔离抽象平面。只有属于同一个域的实体才能进行交互,订阅数据的实体和发布数据的实体之间的匹配由主题管理。主题是明确的标识符,主题名称在域中唯一,并与数据类型和一组特定QoS数据相关联。

DDS实体建模为类或类型化接口,后者意味着更有效的资源处理,因为处理已知的数据类型比动态分配内存更有效率。这是OMG的说法,咸鱼认为这方面提高的效率不明显也不重要,但是接口清晰对通信开发者之间更重要,使得协作开发更有效。

Fast DDS入门一、Fast DDS介绍_第1张图片

DDS域内信息流动的概念图。只有属于同一域的实体才能通过匹配主题发现彼此,从而在发布者和订阅者之间交换数据。

5 Fast DDS-Gen

依赖接口意味着需要一种生成工具,将类型描述转换为适当的实现,以填补接口和中间件之间的空白。该任务由专用生成工具Fast DDS Gen执行,Fast DDS Gen是一个Java应用程序,它使用接口定义语言(IDL)文件中定义的数据类型生成源代码。

6 RTPS Wire Protocol

Fast DDS用于通过标准网络交换消息的协议是实时发布-订阅协议(RTPS),这是OMG联盟定义和维护的DDS互操作性有线协议。该协议通过TCP/UDP/IP等传输提供发布者-订阅者通信,并保证不同DDS实现之间的兼容性。

考虑到发布-订阅设计用于满足DDS应用领域所解决的相同需求的规范,RTPS协议映射到许多DDS概念,因此是DDS实现的自然选择。所有RTPS核心实体都与RTPS域相关联,RTPS域表示端点匹配的隔离通信平面,RTPS协议中指定的实体与DDS实体一一对应,从而允许通信发生。

7 Fast DDS主要特征

  • 两个API层。Fast DDS包括关注可用性的高级DDS兼容层和提供对RTPS协议的更精细访问的低级RTPS兼容层。

  • 实时行为。Fast DDS可以配置为提供实时功能,保证在指定的时间限制内做出响应。

  • 内置发现服务器。Fast DDS基于对现有发布者和订阅者的动态发现,无需联系或设置任何服务器即可连续执行此任务。但是,也可以配置客户机服务器发现以及其他发现范例。

  • 同步和异步发布模式。Fast DDS支持同步和异步数据发布。

  • 尽最大努力和可靠的沟通。Fast DDS支持在尽力就好通信协议(如UDP)上的可选可靠通信模式。此外,设置可靠通信的另一种方法是使用我们的TCP传输。

  • 传输层。Fast DDS实现了可插拔传输的体系结构。实现了五种传输:UDPv4、UDPv6、TCPv4、TCPv6和SHM(共享内存)。

  • 安全Fast DDS可配置为提供安全通信。为此,它在三个级别实现了可插拔的安全性:远程参与者的身份验证、实体的访问控制和数据加密。

  • 统计模块。Fast DDS可以被配置为收集和提供关于用户应用程序正在交换的数据的信息。

  • 吞吐量控制器。支持用户可配置的吞吐量控制器,可用于限制在特定条件下发送的数据量。

  • 即插即用连接。新的应用程序和服务被自动发现,可以随时加入和离开网络,而无需重新配置。

  • 可扩展性和灵活性。DDS建立在全球数据空间的概念之上。中间件负责在发布者和订阅者之间传播信息。这保证了分布式网络能够适应重新配置并可扩展到大量实体。

  • 应用程序可移植性。DDS规范包括到IDL的平台特定映射,允许使用DDS的应用程序在DDS实现之间切换,只需重新编译。

  • 可扩展性。Fast DDS允许通过新服务扩展和增强协议,而不破坏向后兼容性和互操作性。

  • 可配置性和模块性。Fast DDS通过代码或XML配置文件提供了一种直观的配置方式。模块化允许简单设备实现协议的一个子集,并仍然参与网络。

  • 高性能。Fast DDS使用静态低级串行化库Fast CDR,这是一个C++库,根据RTPS规范中定义的标准CDR串行化机制进行串行化。

  • 易于使用。该项目附带了一个开箱即用的示例,即HelloWorld示例。DDS层和RTPS层部分将对DDS和RTPS进行详细说明。

  • 资源消耗低。

  • 允许预分配资源,以最小化动态资源分配。

  • 避免使用无限资源。

  • 将复制数据的需要降至最低。

  • 多平台。操作系统依赖项被视为可插拔模块。用户可以在其目标平台上使用Fast DDS库轻松实现平台模块。默认情况下,该项目可以在Linux、Windows和MacOS上运行。

  • 免费开源。Fast DDS库、下面的RTPS库、生成器工具、内部依赖项(例如eProsima Fast CDR)和外部依赖项(如foonathan库)是免费的开源的。

Fast DDS入门二、Fast DDS在Windows平台的编译安装

你可能感兴趣的:(Fast,DDS入门,网络协议)