通信中间件 Fast DDS(二) :详细介绍

目录

1.引言

2.DDS的基本原理

3.FastDDS 的核心特性

4.FastDDS 的核心架构

5.典型应用场景

6.FastDDS 的安装与快速上手

7.学习资源与社区


1.引言

        FastDDS(原称 Fast RTPS)是由西班牙公司 eProsima 开发的一款开源、高性能、实时性强的数据分发服务(Data Distribution Service, DDS)实现,完全遵循对象管理组织(OMG)制定的 DDS 标准(OMG DDS v1.4、v2.0 及 DDS Security 规范)。eProsima Fast DDS库提供应用程序编程接口(API)和通信协议,采用以数据为中心的发布-订阅(DCPS)模型,旨在在实时系统之间建立高效且可靠的信息分发机制。它专为需要低延迟、高吞吐量、高可靠性的分布式实时系统设计,广泛应用于机器人、自动驾驶、工业物联网(IIoT)、航空航天等领域。

        FastDDS 作为 DDS 标准的主流开源实现之一,其核心定位是:

  • 高性能优先:针对实时场景优化,延迟可低至微秒级,吞吐量支持 GB/s 级数据传输。
  • 开源与合规:基于 Apache License 2.0 协议开源(商业使用无限制),完全兼容 OMG DDS 及 DDS Security 规范。
  • 跨平台与灵活:支持 Linux、Windows、macOS、RTOS(如 VxWorks)等系统,兼容 x86、ARM、RISC-V 等架构。

2.DDS的基本原理

        DDS采用的通信模型是一种多对多的单向数据交换,在该模型中,生成数据的应用程序会将数据发布到属于消费数据的应用程序的订阅者的本地缓存中。信息流由负责数据交换的实体之间制定的服务质量(QoS)策略进行调控。

        作为一种以数据为中心的模型,DDS 建立在“全局数据空间”这一概念之上,所有相关应用都可访问该空间。想要提供信息的应用会声明其成为发布者的意图,而想要访问数据空间部分内容的应用则会声明其成为订阅者的意图。每当发布者向该空间发布新数据时,中间件就会将这些信息传播给所有相关的订阅者。

        通信发生在不同域之间,即连接所有能够相互通信的分布式应用程序的孤立抽象层面。只有属于同一域的实体才能进行交互,而订阅数据的实体与发布数据的实体之间的匹配由主题介导。主题是明确的标识符,它将在域中唯一的名称与数据类型以及一组附加的特定于数据的服务质量(QoS)相关联。

        DDS实体被建模为类或类型化接口。后者意味着更高效的资源处理,因为在执行前了解数据类型可以提前分配内存,而不是动态分配。

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

3.FastDDS 的核心特性

1.极致的实时性与可靠性

  • 低延迟设计:通过共享内存(Shared Memory)、UDPv4/v6 等轻量级传输协议,减少数据拷贝次数(如零拷贝优化),端到端延迟可低至 10-100 微秒(取决于传输方式)。
  • 灵活的 QoS 策略:支持 20+ 种服务质量(Quality of Service)策略,按需平衡 “实时性” 与 “可靠性”,例如:
    • 可靠性策略:可选择 “可靠传输”(确保数据不丢失)或 “尽力而为传输”(追求低延迟,允许少量丢包)。
    • ** Deadline/ Latency Budget**:保障数据在指定时间内到达(如自动驾驶的控制信号需在 50ms 内传输)。
    • 历史数据缓存:新加入的节点可自动获取历史数据(如机器人重启后恢复之前的传感器状态)。
  • 高吞吐量:支持批量数据传输(Batching)、流量控制(Flow Control),单节点吞吐量可达 10+ GB/s(共享内存场景)。

2.灵活性与扩展性

  • 多传输协议支持
    • 单机低延迟:共享内存(Shared Memory)(适合同一设备内的进程间通信)。
    • 跨设备 / 跨网络:UDPv4/v6(实时性优先)、TCPv4/v6(可靠性优先,适合复杂网络)。
    • 广域网络:支持 VPN、5G 等网络环境,可通过 “发现服务” 自动适配网络拓扑。
  • 动态拓扑适应:支持节点的 “动态加入 / 退出”,无需重启系统即可扩展节点数量(如机器人集群新增传感器节点)。
  • 丰富的数据类型支持:基于 IDL(Interface Definition Language) 定义数据结构,支持基本类型(int、float 等)、复杂结构体、枚举、数组等,自动生成跨语言(C++、Python、Java)的序列化 / 反序列化代码。

3.安全性

FastDDS 完全支持 OMG DDS Security 规范,通过插件化方式提供端到端安全能力:

  • 身份认证(Authentication):基于 PKI(公钥基础设施)验证节点身份,防止非法节点接入。
  • 数据加密(Encryption):使用 AES-256 等算法加密传输数据,防止窃听。
  • 访问控制(Access Control):通过细粒度权限管理(如 “仅允许传感器节点向控制节点发送数据”),防止未授权操作。

4.开源生态与工具链

  • 配套工具
    • FastDDS Monitor:可视化监控工具,实时查看节点状态、数据传输延迟、吞吐量等指标。
    • FastDDS Gen:IDL 编译器,自动生成数据类型的序列化代码和 DDS 接口代码。
    • FastDDS Discovery Server:集中式 / 分布式发现服务,解决大规模集群(1000+ 节点)的节点发现效率问题。
  • 生态集成
    • 是 ROS 2(机器人操作系统 2) 的默认 DDS 实现之一(另一个是 Cyclone DDS),完美支持 ROS 2 的节点通信。
    • 支持与 Unity、Unreal Engine 等引擎集成,用于虚拟现实(VR)、仿真系统的实时数据传输。

4.FastDDS 的核心架构

FastDDS 遵循 DDS 标准的 “发布 - 订阅(Publish-Subscribe)” 模型,核心组件可分为 5 层,自上而下分别是:

架构层级核心组件功能描述
数据应用层User Application用户业务逻辑(如机器人的传感器数据采集、自动驾驶的控制算法)。
DDS 实体层DomainParticipant、Topic 等DDS 标准定义的核心实体,负责数据的发布 / 订阅管理。
数据序列化层Serializer基于 IDL 定义,将数据结构序列化为二进制流(或反序列化),支持跨平台兼容。
传输层Transport(UDP/TCP/ 共享内存)负责数据的物理传输,按需选择传输协议。
发现与配置层Discovery、QoS Manager管理节点发现(如 “发布者如何找到订阅者”)和 QoS 策略的生效。

其中,DDS 实体层是理解 FastDDS 工作流程的关键,核心实体包括:

  • DomainParticipant(域参与者):节点的 “入口”,每个节点需创建一个 DomainParticipant 并加入指定 “域(Domain)”,只有同域的节点才能通信(实现逻辑隔离)。
  • Topic(主题):数据的 “标签”,发布者和订阅者需通过相同的 Topic 匹配(如 “/robot/sensor/lidar” 表示激光雷达数据)。
  • Publisher(发布者):数据的发送端,关联一个或多个 DataWriter。
  • Subscriber(订阅者):数据的接收端,关联一个或多个 DataReader。
  • DataWriter(数据写入器):将用户数据写入 DDS 系统,由 Publisher 管理。
  • DataReader(数据读取器):从 DDS 系统读取数据,由 Subscriber 管理。

5.典型应用场景

FastDDS 的特性使其在实时、高可靠、分布式场景中具备不可替代的优势,典型应用包括:

1.机器人领域

  • 场景:机器人集群协作(如工业机械臂、服务机器人)、传感器数据融合(激光雷达、摄像头、IMU 数据实时共享)。
  • 价值:通过共享内存实现单机内传感器 - 控制器低延迟通信(微秒级),通过 UDP 实现多机器人跨设备协作(毫秒级延迟)。

2.自动驾驶

  • 场景:车载系统内的 “感知 - 决策 - 控制” 数据传输(如摄像头感知数据、毫米波雷达数据向决策模块发送)、车路协同(V2X)中的实时信号交互。
  • 价值:满足自动驾驶对 “低延迟(<100ms)” 和 “高可靠性(数据零丢失)” 的严苛要求,支持 DDS Security 防止数据被篡改。

3.工业物联网(IIoT)

  • 场景:工业设备实时监控(如数控机床状态、生产线传感器数据)、边缘计算节点与云端的数据同步。
  • 价值:支持海量节点(1000+)的动态接入,通过 TCP 适应工业现场复杂网络(如多路由器、高丢包环境)。

4.航空航天与国防

  • 场景:无人机集群通信、卫星与地面站的实时数据传输、航空器内的分布式控制系统。
  • 价值:符合航空级可靠性标准,支持高抗干扰传输和端到端加密,保障数据安全。

6.FastDDS 的安装与快速上手

通信中间件 Fast DDS(一) :编译、安装和测试_fast dds 安装-CSDN博客

7.学习资源与社区

  • 官方文档:FastDDS 官方手册(最权威的入门与进阶资料)。
  • GitHub 仓库:eProsima/Fast-DDS(源码、Issue 讨论、贡献指南)。
  • 社区论坛:eProsima Community(提问与技术交流)。
  • ROS 2 集成文档:ROS 2 与 DDS 配置(针对机器人开发者)。

综上,FastDDS 凭借其高性能、开源免费、丰富的生态,已成为实时分布式系统(尤其是机器人、自动驾驶)的首选中间件之一。无论是个人开发者还是企业级项目,都可基于 FastDDS 快速构建可靠的实时数据传输方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94963.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【69页PPT】智慧方案智慧校园解决方案(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91776074 资料解读&#xff1a;【69页PPT】智慧方案智慧校园解决方案 详细资料请看本解读文章的最后内容 智慧校园的概念与背景 智慧校园是…

FPGA的工作原理

FPGA&#xff08;现场可编程门阵列&#xff09;的核心工作原理是通过可配置的硬件架构&#xff0c;让用户在芯片出厂后自主定义电路逻辑&#xff0c;实现从“通用硬件”到“专用硬件”的灵活转换&#xff0c;本质是用可编程资源搭建出符合特定需求的数字电路。一、核心架构&…

构建生产级RAG系统:从数据处理到智能体的全流程实践

构建生产级RAG系统&#xff1a;从数据处理到智能体的全流程实践 检索增强生成&#xff08;RAG&#xff09;技术已成为打造高级知识问答系统的核心&#xff0c;但从原型到稳定高效的生产级系统&#xff0c;需突破数据处理、检索优化、智能决策等多重挑战。本文以某型号工业设备…

Java-代理

在 Java 开发中&#xff0c;代理模式是一种非常重要的设计模式&#xff0c;它通过引入代理对象来控制对目标对象的访问&#xff0c;从而实现额外功能的增强。一、代理模式的基本概念代理模式的核心思想是&#xff1a;通过一个代理对象来间接访问目标对象&#xff0c;在不修改目…

【基础知识】互斥锁、读写锁、自旋锁的区别

从定义、工作原理、适用场景和性能开销四个维度来剖析这三种锁的区别 核心结论 这三种锁的核心区别在于它们应对“锁已被占用”情况时的行为策略不同,而这直接决定了它们的性能和适用场景。 锁类型 核心策略 适用场景 互斥锁 (Mutex) 等不到,就睡 通用的独占访问,临界区执行…

智慧清洁革新者:有鹿机器人自述

晨曦微露&#xff0c;当城市还未完全苏醒&#xff0c;我已悄然完成数万平方米的清洁工作。作为有鹿智能巡扫机器人&#xff0c;我很荣幸能与您分享如何以科技之力重塑清洁行业的标准与体验。卓越技术&#xff1a;重新定义清洁新标准我搭载的聪明大脑是基于Master2000通用具身智…

python学习打卡day48

知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机制&#xff0c;基本一致 im…

记一次雪花算法 ID 精度丢失的Bug:前端接收到的 Long 被“四舍五入”了?

后端生成的 ID&#xff1a;1961005746230337538 前端收到的 ID&#xff1a;1961005746230337500 —— 少了 38&#xff1f;&#xff01;这不是 Bug&#xff0c;是 JavaScript 的“安全整数”陷阱&#xff01;本文记录一次真实项目中因 雪花算法 ID 精度丢失 导致的线上问题&…

零知开源——基于STM32F407VET6和ADXL345三轴加速度计的精准运动姿态检测系统

✔零知IDE 是一个真正属于国人自己的开源软件平台&#xff0c;在开发效率上超越了Arduino平台并且更加容易上手&#xff0c;大大降低了开发难度。零知开源在软件方面提供了完整的学习教程和丰富示例代码&#xff0c;让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品&am…

Android14 init.qcom.usb.rc详解

本文以高通平台为例&#xff0c;介绍其USB子系统启动以及USB各种配置动态切换的逻辑&#xff0c;它是以configfs架构实现动态配置USB。 相关文档 1. USB子系统的启动 1.1 on boot阶段 1.1.1 重启恢复用户选择的USB配置 当设备重启时恢复用户选择的USB配置&#xff0c;避免每…

Docker的常用命令及简单使用

1、docker的常用命令 1.1、帮助命令 docker version # 显示docker的版本信息 docker info # 显示docker的系统信息&#xff0c;包括镜像和容器的数量 docker 指令 --help # 查看某个指令的帮助命令可以通过docker --help查看docker常用命…

HGDB全文检索/中文分词的使用

文章目录文档用途详细信息文档用途 本文用于HGDB全文检索/中文分词的介绍&#xff0c;其介绍内容在附件&#xff0c;使用案例见正文 详细信息 一、创建扩展 highgo# create extension zhparser;CREATE EXTENSION highgo# \dFp List of text search parsers Schema…

baijian xiaomaodawang

我将为你创建一个基于Go 1.20.8和Gin框架的博客系统项目。以下是完整的实现方案&#xff1a; 项目创建流程 打开Goland&#xff0c;创建新项目选择Go项目&#xff0c;设置GOROOT为Go 1.20.8项目名称&#xff1a;blog-system启用Go Modules 项目结构 blog-system/ ├── cmd/ │…

Node.js的特性

Node.js的特性 Node.js具有几个显著特性&#xff1a; 事件驱动&#xff1a;Node.js采用事件驱动机制来处理请求和响应&#xff0c;这种机制可以帮助开发者处理大量并发请求&#xff0c;提高系统的性能和可靠性。 非阻塞I/O&#xff1a;Node.js使用异步I/O原语来实现非阻塞I/O操…

交叉编译linux-arm32位程序

目标平台rv1126 芯片 arm32位架构 在ubuntu22.04上交叉编译&#xff1a; 编译器下载地址&#xff1a; Linaro Releases 或者&#xff1a; wget http://releases.linaro.org/components/toolchain/binaries/6.4-2017.11/arm-linux-gnueabihf/gcc-linaro-6.4.1-2017.11-x86_6…

S 3.1深度学习--卷积神经网络

卷积层 图像原理 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09; 图像在计算机中是一堆按顺序排列的数字&#xff0c;数值为 0 到 255。0 表示最暗&#xff0c;255 表示最亮。 图像识别 上图是只有黑白颜色的灰度图&#xff0c;而更普遍的图片表达…

【7】SQL 语句基础应用

SQL 语句基础应用where (筛选)where 子句可使用到运算符查询表中所有的数据查询表中的数据&#xff0c;必须满足 11&#xff08;相当于恒成立&#xff09;查询表中的 分数(score) 大于 80 分的学生查询表中 名称(name) 是 赵六 的数据查询表中 名称(name) 不等于 哈哈 的数据.查…

android 嵌套webview 全屏展示 页面延伸到状态栏且不被底部导航栏遮挡

我的项目是使用webview嵌套了一个uniapp打包出的h5 本来展示很正常&#xff0c;某天突然发现uniapp的底部导航被手机底部的导航栏挡住了&#xff0c;离奇&#xff0c;某天突然出现的 有些手机会设置展示底部导航按钮&#xff0c;有些手机会关闭底部导航 以下代码对这两种情况通…

【大前端】React Native 调用 Android、iOS 原生能力封装

&#x1f4d6; React Native 调用 Android、iOS 原生能力封装 1. 原理 React Native 的 核心思想&#xff1a;JS 层&#xff08;React 代码&#xff09;不能直接调用 Android/iOS 的 API。RN 提供了 Native Module 机制&#xff1a; Android&#xff1a;Java/Kotlin → 继承 Re…

HOOK安卓木马重大升级,勒索功能扩展至107项

勒索覆盖屏成新特征网络安全研究人员发现名为HOOK的安卓银行木马新变种&#xff0c;该恶意软件新增勒索软件式覆盖屏功能用于显示勒索信息。Zimperium zLabs研究员Vishnu Pratapagiri表示&#xff1a;"最新变种的显著特征是能够部署全屏勒索覆盖界面&#xff0c;旨在胁迫受…