【无标题】

一、DDS简介

DDS(Data Distribution Service):

The DDS specification describes a Data-Centric Publish-Subscribe (DCPS) model for distributed application communication and integration. This specification defines both the Application Interfaces (APIs) and the Communication Semantics (behavior and quality of service) that enable the efficient delivery of information from information producers to matching consumers. The purpose of the DDS specification can be summarized as enabling the Efficient and Robust Delivery of the Right Information to the Right Place at the Right Time.

DDS是一种由Object Management Group(OMG)维护的规范(或标准),该规范描述了   用于分布式应用程序通信和集成的   以数据为中心的发布-订阅 (DCPS) 模型。 

在DDS规范中,有两个描述标准的基本文档:

  • DDS Specification:描述了以数据为中心的发布-订阅模型。该规范定义了API和通信语义(行为和服务质量),使消息从消息生产者有效地传递到匹配的消费者。DDS规范的目的可以概括为:“能够在正确的时间将正确的信息高效,可靠地传递到正确的位置”。
  • DDSI-RTPS:描述了RTPS(Real Time Publish Subscribe Protocol)协议。该协议实现了可靠的发布-订阅通信。RTPS是DDS实现的标准协议,它的目的和范围是确保基于不同DDS供应商的应用程序可以实现互操作。总结一句:实时发布订阅协议RTPS是DDS标准中的一个子集,是DDS标准中的通讯协议部分。

OMG是一个开放性的非营利技术标准联盟,由许多大型IT公司组成:包括IBM,Apple Computer,Sun Microsystems等。但OMG仅仅负责制定标准,而标准的实现则由其他服务提供商完成。

二、FastDds简介

前面说OMG仅仅负责制定标准,而标准的实现则由其他服务提供商完成。目前DDS的提供商包括下面这些:

Fast-RTPS是eprosima对于RTPS的C++实现,这是一个免费开源软件,遵循Apache License 2.0。

eProsima Fast RTPS在性能,功能和对最新版本RTPS标准(RTPS 2.2)的遵守方面均处于领先地位。关于Fast RTPS的性能可以查看这个链接:eProsima Fast RTPS Performance

ROS 2中也引入了DDS作为通讯组件。ROS 2相对于ROS 1最主要的一个变化就是DDS的引入。ROS 2的官方wiki上已经给出了引入DDS的原因和动机,总结起来有以下几点:

  • 使用第三方成熟的DDS作为ROS底层通讯和相关核心功能的框架可以极大减轻ROS 2的开发工作量。简单来说就是可以偷懒了。
  • DDS也是采用布订/阅机制进行网络通讯,这样就和ROS 1的通讯机制一样了。可以维持通讯架构不发生大的变化
  • ROS 1有个老祖宗roscore,这玩意管理着整个ROS网络的节点。但这老家伙时不时就抽风,导致ROS不稳定
  • 基于DDS的发布订/阅机制,新的节点可以被同一个DDS网络中的其它节点发现。也就是去中心化。
  • 然后就是DDS的一些特性可以自己拿来用比如高实时性、序列化支持、QoS等等

Fast-RTPS支持平台包括:Windows, Linux, Mac OS, QNX, VxWorks, iOS, Android, Raspbian。

Fast-RTPS提供了两个层次的API:

  • Publisher-Subscriber层:RTPS上的简化抽象。
  • Writer-Reader层:对于RTPS端点的直接控制。

相较而言,前者更简单易用,后者更底层。两个层次的核心角色如下图所示:

Publisher-Subscriber层为大多数开发者提供了一个方便的抽象。它允许定义与Topic关联的发布者和订阅者,以及传输Topic数据的简单方法。

Writer-Reader层更接近于RTPS标准中定义的概念,并且可以进行更精细的控制,但是要求开发者直接与每个端点的历史记录缓存进行交互。

Fast RTPS是并发且基于事件的。每个参与者都会生成一组线程来处理后台任务,例如日志记录,消息接收和异步通信。

事件系统使得Fast RTPS能够响应某些条件并安排定期活动。用户中几乎不用感知它们,因为这些事件大多数仅仅与RTPS元数据有关。

 

  • Domain

代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通讯实体(Participant)才可以通信。Domain用来创建,管理和销毁Participants。

  • Participant:包括Publisher和Subscriber,并管理它们的配置。
    • ParticipantAttributes:创建Participant的配置参数。
    • ParticipantListener:可以让开发者实现Participant的回调函数。
  • Publisher:在Topic上发布数据的对象。
    • PublisherAttributes:创建Publisher的配置参数。
    • PublisherListener:可以让开发者实现Publisher的回调函数。
  • Subscriber:在Topic上接受数据的对象。
    • SubscriberAttributes:创建Subscriber的配置参数。
    • SubscriberListener:可以让开发者实现Subscriber的回调函数。
  • Topic:话题

  • DataWriter

数据写入者,类似缓存,把需要发布的主题数据从应用层写入到DataWriter中。

  • DataReader

数据读取者,同样可以理解为一种缓存,从订阅者得到主题数据,随之传给应用层。

FastRTPS是基于Fast Buffers来完成通讯的
FastBuffer是什么
eProsima Fast Buffers是一个针对性能进行优化的开源序列化引擎

说人话: FastRTPS在通讯时使用了Fast Buffers:
Fast RTPS要通过网络发送消息时,发布节点要使用Fast Buffers把消息序列转化成byte array发送出去,然后订阅节点收到消息后要使用Fast Buffers把byte array还原成对应的消息对象
 

序列化方式:

 

ref:

About the Interface Definition Language Specification Version 4.2

ref:

中间件 DDS(数据分发服务-Data Distribution Service) - 知乎

About the Data Distribution Service Specification Version 1.4

https://fast-dds.docs.eprosima.com/en/latest/

What is DDS?

DDS与FastRTPS

RTPS

Fast RTPS什么鬼?第一讲:学习ROS 2之前不得不了解的DDS – 砖瓦匠

DDS与FastRTPS

中间件DDS之DCPS模型 - 知乎

MQTT与DDS的比较 - 知乎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值