前言
本文主要介绍DDS的商业及开源实现版本,还有开源版本Fast DDS的基本情况。
一、DDS实现
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
前面的文章大致了解了DDS协议的基本情况。OMG只是定义了DDS协议及其规范,将具体实现交给了第三方公司或者组织。百度了下,市面上大概有以下厂家实现自家的DDS开发套件。
公司 | 组件名称 | 商用/开源 | 语言支持 | 平台支持 | 协议支持 | 功能安全 | 优点 | 缺点 | 官网 |
---|---|---|---|---|---|---|---|---|---|
RTI | RTI Connext | 商用 | C, Traditional C++, Modern C++, Python, C#/.NET, Java, Ada, JavaScript (node.js)^, LabVIEW*, Simulink*, REST/HTTP | Linux, Windows, macOS, VxWorks, QNX, INTEGRITY, Android, Deos, QNX OS for Safety INTEGRITY-178, FreeRTOS, SafeRTOS, LynxOS-178, ThreadX, Helix Virtualization Platform, AUTOSAR | DDS 1.4*, DDS Wire Protocol (RTPS) 2.2*, DDS Security 1.1*#, C++ Language DDS PSM 1.0, XTypes: Extensible and Dynamic Topic Types 1.3*, RPC over DDS 1.0*, Web-Enabled DDS 1.0*, DDS XML Syntax 1.0*, IDL 4.2*. | 通过ASIL-D认证 | 1、对DDS标准的适配及支持非常全面(RTI是OMG的成员,也是DDS标准的主要起草者)2、丰富的调试、测试、仿真工具集 | 可能有点贵 | https://www.rti.com/products |
eProsima | Fast DDS | 开源 | C++ | Windows, Linux, Mac OS, QNX, VxWorks, iOS, Android, Raspbian/Debian Buster. | OMG DDS 1.4 OMG RTPS 2.2 | 有专门的功能安全版本:Safe DDS | 1、遵守Apache License 2.0开源2、性能优秀,优于ZeroMQ及其他开源DDS(官方说法)3、工具集较丰富 | 对QoS的支持不如RTI全面 | https://www.eprosima.com/index.php |
OCI | OpenDDS | 开源 | C++ | Windows, Linux, Mac OS | OMG DDS 1.4 | \ | 1、开源2、相比前面两个,应该更轻量级一些,容易上手 | 工具集不如前两个丰富 | https://opendds.org/ |
eclipse | Cyclone DDS | 开源 | C、C++ ,Python | Windows, Linux, Mac OS, QNX,FreeRTOS | OMG DDS 1.4 | \ | 1、开源2、轻量级,适合小型嵌入式系统 | 工具集不如前两个丰富 | https://cyclonedds.io/ |
备注:以上信息都是从各家官网上查找,如有错漏,欢迎在评论区指正。
RTI毕竟作为OMG的成员,而且还是DDS标准的起草者,对DDS的实现相比其他厂商要更全面,相应的调试、测试,仿真工具也很齐全。公司不差钱的话,肯定选RTI。
其他几个开源版本,从各家官网信息来看,Fast DDS整体应该更优一些:
- 对DDS标准的支持更全面
- 工具链更丰富,有monitor、spy这些工具辅助调、测试、数据流量分析,还有数据回放工具
- 性能上更优秀,不过这个官方自己说的(Fast DDS官网上有跟其他中间件ZeroMQ和其他DDS开源版本的对比测试https://www.eprosima.com/index.php/resources-all/performance)
- 不过Fast DDS的技术支持是要收费的。
二、Fast DDS
基于上述考察,选择Fast DDS深入学习及应用,本人所在公司项目也用的Fast DDS。
官网资源
官网主页面Products一列,可以看到eprosima公司很多产品,简要说明下:
产品/工具 | 说明 |
---|---|
DDS suite | eProsima DDS套件是一个Docker镜像,包含了eProsima最重要的开源DDS解决方案和示例。这个多产品DDS Docker镜像提供了一种易于使用的方式来下载和测试eProsima的开源产品及其功能。它还可以用于直接在其上构建应用程序。基本是包含了下面产品和工具的一个大的组合包。 |
Fast DDS | 实现了OMG DDS 1.4和OMG RTPS 2.2可互操作的有线协议标准的DDS中间件。 |
Safe DDS | 一个遵循ISO 26262认证标准的中间件实现版本,更适配MCU平台。 |
DDS Monitor | DDS Monitor是一个开源的图形桌面应用程序,旨在监控使用eProsima Fast DDS库部署的DDS环境。用户可以实时跟踪DDS实体之间的发布/订阅通信状态,还可以选择要测量的各种通信参数,如延迟、吞吐量、丢包等。还可以记录和计算这些参数的统计测量,显示平均值,方差和标准差。 |
DDS Spy | DDS Spy是一个开源的DDS网络工具。通过其交互式命令行界面(CLI),可以以人类可读的方式实时访问和显示用户数据。该工具不仅允许查看连接的DomainParticipants、它们的端点(datawriter和DataReaders)和它们的主题的信息,它还以示意图的格式显示通过网络主题发送的用户数据。 |
DDS Router | eProsima DDS Router是一个开源的终端用户软件,它可以实现跨局域网的DDS网络的通信。 |
DDS Visualizer | eProsima Fast DDS Visualizer是一个图形化工具,提供实时2D图表来可视化来自Fast DDS实体的数据流量信息。 |
DDS Record and Replay | eProsima DDS Record and Replay是一款终端用户软件应用程序,可以将发布到DDS环境中的DDS数据保存为MCAP格式数据库,允许在与原始数据时间戳相关联的Fast DDS中精确回放记录的网络事件。 |
Micro XRCE-DDS | eProsima Micro XRCE-DDS是一个开源中间件产品,它实现了OMG(对象管理组)极端资源约束环境(DDS-XRCE)连接协议。为资源极度受限的MCU平台打造。 |
Fast DDS组成
Fast DDS由以下几部分组成:
- DDS API
- Fast DDS-Gen,代码生成工具
- 底层RTPS协议库
Fast DDS特性
- 两个API层:eProsima Fast DDS包括一个专注于可用性的高级DDS兼容层和一个提供对RTPS协议更精细访问的低级RTPS兼容层。
- 实时性配置:eProsima快速DDS可以配置为提供实时功能,保证在指定的时间限制内的响应。
- 内置发现服务:eProsima Fast DDS可动态探测发布者和订阅者,无需提前配置。
- 同步和异步发布模式:eProsima Fast DDS支持同步和异步数据发布。
- 尽力及稳定的传输:eProsima Fast DDS在尽力而为通信协议(如UDP)上支持可选的可靠通信范式。同时支持TCP传输。
- 支持多种传输层协议:eProsima Fast DDS实现了可插拔传输的架构。当前版本实现了五种传输协议:UDPv4、UDPv6、TCPv4、TCPv6和SHM(共享内存)。
- 安全:eProsima Fast DDS可以配置为提供安全通信。为此,它在三个级别实现了可插拔安全性:远程参与者的身份验证、实体的访问控制和数据加密。
- 统计模块:可以配置eProsima Fast DDS收集用户应用程序正在交换的数据的信息并进行统计及展示。
- 流控:支持用户可配置流量控制,可用于限制在某些条件下要发送的数据量。
- 即插即用连接:eProsima Fast DDS可以自动发现新的应用程序和服务,并且可以随时加入和离开网络,而无需重新配置。
- 可伸缩性和灵活性:DDS建立在全局数据空间的概念之上。中间件负责在发布者和订阅者之间传播信息。这保证了分布式网络可适应重新配置,并可扩展到大量实体。
- 应用程序的可移植性:DDS规范包括一个特定于平台的IDL映射,允许使用DDS的应用程序只需要重新编译就可以在DDS实现之间切换。
- 可扩展性:eProsima Fast DDS允许协议扩展和增强新的服务,而不会破坏向后兼容性和互操作性。
- 可配置性和模块化:eProsima Fast DDS提供了一种直观的配置方式,可以通过代码或XML配置文件进行配置。模块化允许简单的设备实现协议的一个子集,并且仍然参与网络。
- 高性能:eProsima Fast DDS使用静态底层序列化库Fast CDR,这是一个c++库,根据RTPS规范中定义的标准CDR序列化机制进行序列化。
- 易用性:该项目提供了一个开箱即用的示例,DDSHelloWorld(参见Getting Started),它将发布者和订阅者引入通信,展示了如何部署eProsima Fast DDS。此外,交互式演示ShapesDemo可供用户深入DDS世界。
- 低资源消耗:eProsima Fast DDS:允许预分配资源,最小化动态资源分配。避免使用无限制的资源。最大限度地减少复制数据的需要。
- 多平台:操作系统依赖项被视为可插拔的模块。用户可以在目标平台上使用eProsima Fast DDS库轻松实现平台模块。默认情况下,该项目可以在Linux、Windows和MacOS上运行。
- 免费和开源:Fast DDS库、RTPS库、生成器工具、内部依赖项(如eProsima Fast CDR)和外部依赖项(如foonathan库)都是免费和开源的。
Fast DDS的技术手册(最新正式版本2.14.1):https://fast-dds.docs.eprosima.com/en/v2.14.1/
我们使用上首先关注Fast DDS,其他工具后续使用到再看。