FastDDS-3. DDS层
3. DDS层
eProsima Fast DDS公开了两个不同的API,以在不同级别与通信服务交互。主要API是数据分发服务(DDS)数据中心发布订阅(DCPS)平台独立模型(PIM)API,简称DDS DCPS PIM,由Fast DDS遵循的数据分发服务1.4版规范定义。本节旨在解释Fast DDS下此API的主要特性和使用模式,并对其分为五个模块进行深入解释:
- Core: 它定义了由其他模块细化的抽象类和接口。它还提供了服务质量(QoS)定义,以及支持中间件的基于通知的交互。
- Domain: 它包含充当服务入口点的DomainParticipant类,以及许多类的工厂。DomainParticipant还充当构成服务的其他对象的容器。
- Publisher: 它描述了发布端使用的类,包括Publisher和DataWriter类,以及PublisherListener和DataWriterListener接口。
-Subscriber: 它描述了订阅端使用的类,包括Subscriber和DataReader类,以及SubscriberListener和DataReaderListener接口。 - Topic: 它描述了用于定义通信主题和数据类型的类,包括Topic和TopicDescription类,以及TypeSupport和TopicListener接口。
3.1 Core
此模块定义其他模块将使用的基础结构类和类型。它包含实体类、QoS策略和状态的定义。
- Entity: 实体是具有状态的DDS通信对象,可以使用策略进行配置。
- Policy: 控制实体行为的每个配置对象。
- Status: 与实体关联的每个对象,其值表示该实体的通信状态。
3.1.1 Entity
实体是所有DDS实体的抽象基类,意味着支持QoS策略、侦听器和状态的对象。
3.1.1.1 Entity的类型
- DomainParticipant: 此实体是服务的入口点,充当发布服务器、订阅服务器和主题的工厂。有关详细信息,请参阅DomainParticipant。
- Publisher: 它充当一个工厂,可以创建任意数量的DataWriter。有关详细信息,请参阅Publisher。
- Subscriber: 它充当一个工厂,可以创建任意数量的DataReader。有关详细信息,请参阅订阅服务器。
- Topic: 此实体位于发布实体和订阅实体之间,充当通道。有关详细信息,请参阅主题。
- DataWriter: 是负责数据分发的对象。有关详细信息,请参阅DataWriter。
- DataReader: 用于访问接收数据的对象。有关详细信息,请参阅DataReader。
下图显示了所有DDS实体之间的层次结构:
3.1.1.2 通用实体特征
所有实体类型都具有实体概念所共有的一些特征。这些是:
3.1.1.2.1 Entity标识符
每个实体都由一个唯一的ID标识,该ID在DDS实体与其对应的RTPS实体(如果存在)之间共享。该ID存储在Entity基类上声明的Instance Handle对象上,可以使用getter函数get_Instance_Handle()访问该对象。
3.1.1.2.1 QoS策略
可以使用一组配置策略来配置每个实体的行为。对于每个实体类型,都有一个对应的服务质量(QoS)类,该类对影响所述实体类型的所有策略进行分组。用户可以创建这些QoS类的实例,根据自己的需要修改包含的策略,并在创建过程中或稍后使用每个实体公开的set_QoS()函数来配置实体(DomainParticipant::set_qos(),Publisher::set_qos(),Subscriber::set.qos(),Topic::set.qos(),DataWriter::set_qos(),DataReader::set.qos())。有关可用策略及其说明的列表,请参阅策略。QoS类及其包含的策略在每个实体类型的文档中进行了解释。
3.1.1.2.3 Listener监听器
侦听器包含一些函数,实体使用这些函数来响应事件。因此,侦听器充当异步通知系统,允许实体向应用程序通知实体中的状态更改。因此,侦听器就像一个异步通知系统,允许实体向应用程序通知实体中的状态更改。
所有实体类型都定义一个抽象侦听器接口,该接口包含实体将触发的回调函数,以将状态更改传递给应用程序。用户可以实现自己的侦听器,从这些接口继承并实现应用程序所需的回调。然后,他们可以在创建过程中或稍后使用每个实体公开的set_listener()函数将这些侦听器链接到每个实体(DomainParticipant::set_listenr(),Publisher::set_litener(),Subscriber::set-listener((),Topic::set-liistener()),DataWriter::set _listener。每个实体类型的侦听器接口及其回调在每个实体类型文档中进行了解释。当事件发生时,它由具有非空侦听器的最低级别实体处理,并且在其StatusTask中启用了相应的回调。高级侦听器继承自低级侦听器,如下图所示:
注意:
on_data_on_readers()回调在on_data_available()之前拦截消息。这意味着如果启用了DomainParticipantListener,用户应该考虑默认情况下侦听器使用StatusMask::all()。由于保留了回调实体层次结构,在这种情况下将调用on_data_on_readers()。如果应用程序希望改用on_data_available(),则应禁用Statusask的相应位。
重要:
在创建实体时使用StatusMask::none()仅禁用DDS标准回调:
- on_sample_rejected()
- on_liveliness_changed()
- on_requested_deadline_missed()
- on_requested_incompatible_qos()
- on_data_available()
- on_subscription_matched()
- on_sample_lost()
- on_offered_incompatible_qos()
- on_offered_deadline_missed()
- on_liveliness_lost()
- on_publication_matched()
- on_inconsistent_topic()
- on_data_on_readers()
始终启用特定于Fast DDS的任何回调:
- on_participant_discovery()
- on_ParticipantAuthentication()
- on_subscriber_discovery()
- on_publisher_discovery()
- on_type_discovery()
- on_type_dependencies_reply()
- on_type_information_received()
- on_unacknowledged_sample_removed()
警告: 只创建一个线程来侦听每个实现的侦听器,因此建议保持侦听器函数的简单性,将此类信息的处理留给适当的类。
警告:
不要在侦听器成员函数的范围内创建或删除任何实体,因为这可能会导致未定义的行为。相反,建议使用Listener类作为信息通道,并使用上层Entity类来封装此类行为。
3.1.1.2.4 Status
每个实体都与一组状态对象相关联,这些状态对象的值表示该实体的通信状态。这些状态值的更改会触发调用相应的Listener回调以异步通知应用程序。有关所有状态对象的列表及其内容的描述,请参见状态。在那里,您还可以找到哪个状态适用于哪个实体类型。
3.1.1.2.5 StatusCondition
每个实体都有一个StatusCondition,每当其启用状态更改时,都会通知它。StatusCondition提供实体和等待集之间的链接。有关详细信息,请参阅“条件和等待集”一节。
3.1.1.2.6 启用实体
所有实体都可以创建为已启用或未启用。默认情况下,工厂被配置为创建已启用的实体,但可以对已启用的工厂使用EntityFactoryQosPolicy进行更改。禁用的工厂创建禁用的实体,而不管其QoS如何。禁用实体的操作仅限于以下操作:
- Set/Get 实体的QoS策略
- Set/Get 实体监听器
- Create/Delete 子实体
- 得到实体的状态,即使他们没有改变
- 查找操作
在这种状态下调用的其他函数都会返回NOT_ENABLED.
相关文章:
FastDDS-3. DDS层
3. DDS层 eProsima Fast DDS公开了两个不同的API,以在不同级别与通信服务交互。主要API是数据分发服务(DDS)数据中心发布订阅(DCPS)平台独立模型(PIM)API,简称DDS DCPS PIM…...
9.2 IGMPv2
实验目的 (1) 熟悉IGMPv2的应用场景 (2) 掌握IGMPv2的配置方法 实验拓扑 实验拓扑如图9-17所示: 图9-17:IGMPv2 实验步骤 配置IP地址(请参考上一个实验)运行IGPÿ…...
巨头混战,抢着“兜底”自动驾驶安全
诚然,中国汽车行业的发展绝对不会拘泥于电动化,必定会在电动化的基础上,迎接下半场的快速智能化。 2021年6月,长城汽车线控底盘全球首次发布。 彼时,长城汽车技术副总裁宋东先宣布,整合了线控转向、线控制…...
RightCapital 第一轮面试题
现在我们就马上开始吧! 答案在文末 JavaScript 是一门单线程的静态类型语言(单选题) 正确 错误 在 JavaScript 中下面哪种类型的值是不可变的(immutable)(单选题) Object Symbol Array Date …...
Python曲线肘部点检测-膝部点自动检测
文章目录一. 术语解释二. 拐点检测肘部法则是经常使用的法则。很多时候,可以凭人工经验去找最优拐点,但有时需要自动寻找拐点。最近解决了一下这个问题,希望对各位有用。一. 术语解释 **肘形曲线(elbow curve)**类似人胳膊状的曲线ÿ…...
【算法题】最大矩形面积,单调栈解法
力扣:84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 题意很简单,翻译一下就是:求该图中…...
活动策划|深度分析年货节活动该如何策划!
四月初,不平凡的初春开始恢复往日的平静。对于新零售行业,疫情的缓解也逐渐平稳生态链的运转。2020年新零售的格局在洗礼后,业务的聚焦点也从前端促销转移到后端履约的体验闭环,同时很大程度的推进企业在危机公关下的应对。618大促…...
Idea启动遇到 Web server failed to start. Port 8080 was already in use. 报错
Idea启动遇到问题-记录 报错英文提示: APPLICATION FAILED TO START Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to liste…...
Python3中zip()函数知识点总结
1.引言 在本文中,我将带领大家深入了解Python中的zip()函数,使用它可以提升大家的工作效率。 闲话少说,我们直接开始吧! 2. 基础知识 首先,我们来介绍一些基础知识点: Python中的某些数据类型是不可变的…...
过滤器,监听器,拦截器的原理与在Servlet和Spring的应用
在Java Web的开发中,最原始和初期的学习都是从Servlet开始的,Servlet是Java最为耀眼的技术,也是Java EE的技术变革。目前大火主流的框架spring boot也的spring mvc部分也是基于拓展servlet完成的。回到之前的文章spring 实现了对servlet的封装…...
minio spring boot 秒传、分片上传、断点续传文件实现
此处后端使用的是前期封装的自定义starter,具体链接可参考:minio对象存储spring boot starter封装组件 这里主要针对前期封装的组件,做一个简单的应用,前端直传可查看之前的文章 秒传 秒传的逻辑比较简单,在前传上传…...
MTK平台使用Omnipeek分析空口协议讲解
讲解这个之前,我们先来了解下beacon/robe Request/Probe Response 三种帧 beacon帧 信标帧,由AP以一定的时间间隔周期性发出,以此来告诉外界自己无线网络的存在。 Beacon帧作为802.11中一个周期性的帧,Beacon周期调高,对应睡眠周期拉长,故节能(即越来休息100ms再起来…...
string和自动推断类型
欢迎来观看温柔了岁月.c的博客目前设有C学习专栏C语言项目专栏数据结构与算法专栏目前主要更新C学习专栏,C语言项目专栏不定时更新待C专栏完毕,会陆续更新C项目专栏和数据结构与算法专栏一周主要三更,星期三,星期五,星…...
【软件测试】从功能到自动化测试,测试人的进阶之路细节,这些必不可少......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试流程࿰…...
C语言青蛙跳台阶【图文详解】
青蛙跳台阶前言1. 题目介绍2. 解题思路3. 利用图片来演示青蛙跳台阶的原理4. 如何用C语言实现青蛙跳台阶前言 在本文,我们要与一只活泼可爱的小青蛙合作,带领着它跳上台阶,这个小家伙精力充沛,特别擅长于跳跃。我们要让它做我们的…...
笔记(五)——list容器的基础理论知识
list容器是一个双向链表容器,可以高效地进行插入删除元素,但是不能随机存取元素(不支持at()和[]操作符)。一、list容器的对象构造方法list对象采用模板类的默认构造形式例如list<T> lst;#include<iostream>…...
浅谈网络中接口幂等性设计问题
所谓幂等性设计,就是说,一次和多次请求某一个资源应该具有同样的副作用。用数学的语言来表达就是:f(x) f(f(x))。 在数学里,幂等有两种主要的定义。 在某二元运算下,幂等元素是指被自己重复运算(或对于函数…...
《C Primer Plus》第13章复习题与编程练习
《C Primer Plus》第13章复习题与编程练习复习题1. 下面的程序有什么问题?2. 下面的程序完成什么任务?(假设在命令行环境中运行)3. 假设程序中有下列语句:4. 编写一个程序,不接受任何命令行参数或接受一个命…...
计算机SCI论文应该怎么作图? - 易智编译EaseEditing
计算机SCI论文,作图时要注意以下几个方面的问题: 1.图片的格式要tiff或者eps; 2.文件大小不能超过10M; 3.长和宽也给出了具体要求; 4.色彩模式要RGB或者灰度图; 5.文中的文字字体和大小; …...
【一】kubernetes集群部署
一、docker环境搭建 1、移除以前docker相关包 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine2、配置yam源 sudo yum install -y yum-utilssudo yum-config-manager --ad…...
Docker安装Redis
一、拉取镜像 命令::docker pull <镜像名称>:<版本号> docker pull redis 二:Docker挂载配置文件 挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容…...
在shell中执行一条可执行程序(./a.out) 系统执行的过程
目录 系统调度过程 用户空间角度: 内核角度 1、调用fork创建一个新进程 2、使用_fo_fork创建新进程 3、父进程调用wake_up_new_task尝试唤醒新进程 4、CPU选择一个合适的进程来运行; 5、运行新进程 6、实现负载均衡 系统调度过程 分析在命令行…...
【ArcGIS Pro二次开发】(10):属性表字段(field)的修改
在ArcGIS Pro中,经常会遇到用字段计算器对要素的属性表进行计算。下面以一个例子演示如何在ArcGIS Pro SDK二次开发中实现。 一、要实现的功能 如上图所示的要素图层,要实现如下功能: 当字段【市级行政区】的值为【泉州市】时,将…...
数据结构与算法—散列表
目录 散列表 散列函数 散列冲突解决 1、开放寻址法 1.1 线性探测 1.2 二次探测 1.3 双重散列 2、链表法 使用场景 单词查找 散列表与链表的结合使用LRU 散列表总结 散列表实例 散列表 Word 单词拼写功能,如何实现的?散列表(Has…...
计算机网络笔记、面试八股(一)—— TCP/IP网络模型
本章目录1. TCP/IP网络模型1.1 应用层1.1.1 应用层作用1.1.2 应用层有哪些常用协议1.2 运输层1.2.1 TCP与UDP的区别1.2.2 分块传输1.2.3 端口1.3 网络层1.3.1 IP报文1.3.2 IP地址1.3.3 网络号和主机号的获得1.3.4 子网掩码的获得1.3.5 路由1.3.6 IP地址与MAC地址的区别1.3.7 AR…...
Servlet笔记(18):国际化
三个概念 国际化: 意义着一个网站提供不同版本的翻译成访问者的语言或国籍的内容。本地化: 意味着向网站添加资源,以使其适应特定的地理或文化区域。区域设置: 针对某个国家的某个地区的设置。 Servlet可以根据请求者的区域设置…...
kibana搭建(windowslinux)
1.说明 搭建kibana方便查询es库,本文分别对windows和linux版本进行安装,因为es集群版本是7.4.1,所以配套的kibana也是选择相同版本 2.下载 https://artifacts.elastic.co/downloads/kibana/kibana-7.4.1-windows-x86_64.zip https://artifact…...
(pytorch进阶之路)Informer
论文:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting (AAAI’21 Best Paper) 看了一下以前的论文学习学习,我也是重应用吧,所以代码部分会比较多,理论部分就一笔带过吧 论文作者也很良心的…...
关键词聚类和凸现分析-实战1——亚急性甲状腺炎的
审稿人问题第8页第26行-请指出#是什么意思,并解释为什么亚急性甲状腺炎在这里被列为#8。我认为在搜索亚急性甲状腺炎相关文章时,关键词共现分析应该提供关键词共现的数据。这些结果的实际用途是什么?亚急性甲状腺炎是一种较为罕见但重要的甲状腺疾病&am…...
二叉树——二叉搜索树中的众数
二叉搜索树中的众数 链接 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定…...
mysql 大型网站开发/成品影视app开发
通常,说到Hook键盘鼠标,总需要一大堆代码,涉及各种不明白的API.而在DSAPI中,可以说已经把勾子简化到不能再简化的地步.甚至不需要任何示例代码即会使用.那么如何实现呢? Private WithEvents HK As New DSAPI.键盘鼠标钩子注意上面带了WithEvent. 写完上面那句后,即可选择该HK,…...
平面设计零基础难学吗/网站内部链接优化方法
很久之前就对jQuery animate的实现非常感兴趣,不过前段时间很忙,直到前几天端午假期才有时间去研究。 jQuery.animate的每种动画过渡效果都是通过easing函数实现的。jQuery1.4.2中就预置了两个这样的函数: easing: {linear: function( p, n, …...
网站制作方案书/在线网站分析工具
开始正式上课,感觉还行,这是老师的第一天课的作业, 100!, 花了我整整一上午, 贴上来做个记念,觉得代码很写得还行,代码很简单, 采用是迭代, 时间效用应该还不错, 比网上的一些递归的好. 以下是原代码: using System; namespace ConsoleApplication5{ class Class1 { /* 此问…...
网站制作产品优化/搜索引擎优化的基本内容
Vue.js入门知识day2添加新品牌删除品牌(根据id删除数据)方法一:方法二根据条件筛选品牌方法一方法二Vue全局过滤器过滤器的定义语法过滤器调用时候的格式定义一个 Vue全局的过滤器:所谓的全局过滤器,就是所有的vm实例都…...
做网站被骗没有居住证能不能告他/小网站怎么搜关键词
ThinkPHP 5.0 MongoDb驱动 首先安装官方的mongodb扩展: http://pecl.php.net/package/mongodb 找到对应的php版本的扩展 然后,配置应用的数据库配置文件database.php的type参数为: type > \think\mongo\Connection, 即可正常使用M…...
松江做网站/帆软社区app
A: 今天同学遇到了一个FCKeditor如何删除文件中图片的问题,我也是第一次遇到,为了解决这个问题从网上搜到了一点资料。与大家共享一下。最近在做项目时做了这样一个功能,已减少垃圾图片!用正则表达式得到图片的路径与名称。 PageV…...