Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9085806
  • 博文数量: 1732
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19830
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1732)

文章存档

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2021-03-29 17:50:26

面向服务的通信协议. 
DDS定义:Data Distribution Service 数据分发服务,是新一代分布式实时通信中间件协议,采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。


DDS最早应用在美国海军系统,用于解决军舰系统复杂网络环境中大量软件升级的兼容性问题。国内已有主机厂开始研究,主要针对自动驾驶相关需求,工具方面,在汽车电子领域常用的工具厂商也在开发这部分内容。ROS2中也引入了DDS来传递信息.

DDS的相关标准包括核心协议(DDSI-RTPS,DDS-XTypes,DDS-Security,Interface Definition Language (IDL)…),API(DDS C++ API,DDS Java API),拓展协议(DDS-RPC,DDS-XML…)等13份协议集合,  DDS处于OS和App之间, 支持多种编程语言以及多种底层协议, 同时也是跨平台的.


数据通讯

点击(此处)折叠或打开

  1. DDS发布订阅模型DCPS
  2. 讲具体协议之前,我们先熟悉下几个专有名词:

  3. Domain:代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;如果考虑车内通信,可以只划分1个Domain,也可以按照交互规则或其他规则,定义多个Domain;
  4. Domain Participant:代表域内通信的应用程序的本地成员身份,简单来说,就是说明同一数据域内的通信成员;
  5. Topic:是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),如果把车内所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”,进一步弱化了节点的概念,所以域参与者已经不是节点的概念了;
  6. DataWriter:数据写入者,类似缓存,把需要发布的主题数据从应用层写入到DataWriter中;
  7. DataReader:数据读取者,同样可以理解为一种缓存,从订阅者得到主题数据,随之传给应用层;
  8. Publisher:发布者,发布主题数据,至少与1个DataWriter关联,通过调用DataWriter的相关函数将数据发出去;
  9. Subscriber:订阅者,订阅主题数据,至少与1个DataReader关联。当数据到达时,应用程序可能忙于执行其他操作或应用程序只是等待该消息时,这样就会存在两种情况,同步访问和异步通知。

QoS服务质量

目前共支持22种QoS策略,每种策略都可以应用在不同的角色上,而针对同一角色,可单独使用一种QoS,也可以组合使用多种QoS策略


  1. RELIABILITY (可靠性)

  2. 参数定义:

  3. Kind = RELIABLE ,如果当网络发生错误, DataReader可能无法收到DataWriter的样本数据时,会对样本数据进行重发,保证DataReader能够收到数据;

  4. Kind = BEST_EFFORT,如果当网络发生错误, DataWriter不会重新发送丢失的样本数据,这样,无法保证DataReader能够收到数据;

  5. 如果在DataWriter上应用此QoS策略,设置Kind = RELIABLE,这样保证了DataWriter发布的数据都能被DataReader收到。
  1. LIFESPAN (生命周期)

  2. 参数定义:

  3. 该QoS的作用是避免交付“过期”的数据,参数为时间duration,默认为无穷大,表示数据样本永远不会失效;如果duration设置为有限数值,同时发送方和接收方的时钟同步,通过在发送端的源时间戳添加定义的duration字段,这样接收方根据时间戳信息计算出数据是否已失效,如果失效了,可以直接删除数据。

参考 
阅读(1342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~