Fast-DDS源码学习
文章平均质量分 82
Fast-DDS是自动驾驶和机器领域应用最为广泛的通信中间件之一,本专栏通过对其系统讲解分析,可以让大家在业务场景合理运用,包含:
1. Fast-DDS官网教程讲解
2. Fast-DDS源码讲解
3. 基于官方的Fast-DDS自己进行业务适配改造
余额抵扣
助学金抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Ray.so
自驾系统软件开发,业余爱好SLAM、CV、AR、VR、机器人。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【FastDDS】快速使用简述 ( 01-DDS、RTPS定义)
DDS(数据分发服务)是一种以数据为中心的发布-订阅通信协议,包含发布者、订阅者、主题和域四大核心元素,通过QoS策略保证通信质量。RTPS(实时发布-订阅)是支持DDS的底层协议,基于UDP/IP等传输方式,通过RTPS参与者及其端点(写入器和读取器)实现数据交换。Fast DDS作为实现,支持多种配置变更默认通信流程,同时保持核心的发布-订阅机制不变。两者共同构建了高效的分布式通信中间件。原创 2025-09-05 13:00:37 · 492 阅读 · 0 评论 -
【FastDDS】快速使用简述 ( 02-快速使用案例)
本文介绍了使用Fast DDS实现简单的发布-订阅应用的步骤。主要内容包括:通过IDL定义HelloWorld数据类型结构;使用Fast DDS-Gen工具生成C++支持代码;编写发布者程序创建DDS实体并循环发送消息。示例展示了Fast DDS应用的基本开发流程,包括域参与者、发布者、主题和数据写入器等核心概念的实现。文中提供了完整的C++代码片段,涵盖初始化、消息发布和匹配监听等功能。该实现可作为Fast DDS开发的基础模板,帮助开发者快速构建分布式数据分发系统。原创 2025-09-05 13:15:56 · 700 阅读 · 0 评论 -
【FastDDS】概述 Library Overview
Fast DDS是一种高性能的DDS规范实现,为分布式应用提供以数据为中心的通信中间件。其分层架构包含应用层、DDS层、RTPS层和传输层,支持多种协议如UDP、TCP和共享内存。关键实体包括域参与者、发布者/订阅者、数据写入器/读取器等,均可通过QoS机制配置。Fast DDS采用多线程并发模型,内置多种发现协议,并支持安全认证、数据分区等扩展功能。该框架既符合DDS标准,又能通过RTPS协议实现跨平台互操作,适用于构建复杂的分布式实时系统。原创 2025-09-05 12:52:14 · 436 阅读 · 0 评论 -
【FastDDS】Layer DDS (overview)
eProsima Fast DDS提供符合DDS 1.4规范的DCPS PIM API,包含五大核心模块:核心模块(定义抽象类与QoS策略)、域模块(DomainParticipant作为服务入口)、发布者模块(Publisher/DataWriter相关类)、订阅者模块(Subscriber/DataReader相关类)以及主题模块(处理数据类型与主题定义)。每个模块细分为多个功能组件,支持从中间件交互、数据发布订阅到内容过滤的完整通信流程。Fast DDS-Gen工具还支持数据类型源码生成,实现高效的数原创 2025-09-03 14:40:03 · 443 阅读 · 0 评论 -
【FastDDS】Layer DDS之Core (overview)
本文档详细介绍了DDS通信系统的核心模块,包含三个主要组件:实体(Entity)、策略(Policy)和状态(Status)。实体是具有状态且可配置的通信对象,包含多种类型和通用特征(如标识符、QoS策略、监听器等)。策略部分详述了标准QoS策略(如截止期限、持久性等)以及eProsima和XTypes扩展策略。状态部分定义了各类通信状态(如数据可用、活跃度变更等)。最后还介绍了条件与等待集机制,包括守卫条件、状态条件和读取条件。这些组件共同构成了DDS通信的基础架构。原创 2025-09-03 15:20:51 · 342 阅读 · 0 评论 -
【FastDDS】Layer DDS之Core (详解)
FastDDS Layer DDS : Core 部分详解原创 2025-09-03 20:04:57 · 511 阅读 · 0 评论 -
【FastDDS】Layer DDS之Domain (01-overview)
Fast DDS的域(Domain)模块提供了分布式应用的逻辑隔离机制,通过域ID标识不同通信平面。域参与者(DomainParticipant)是加入域的核心对象,包含服务质量配置(QoS)和监听器功能。域参与者工厂(DomainParticipantFactory)支持通过XML配置文件和默认配置创建域参与者。分区(Partitions)在域内实现更细粒度的隔离,支持通配符匹配。该模块通过虚拟网络概念使多个应用共享物理网络而不互相干扰,同时提供灵活的配置方式和资源管理机制,确保分布式通信的稳定性和效率。原创 2025-09-03 21:49:55 · 179 阅读 · 0 评论 -
【FastDDS】Layer DDS之Domain ( 02-DomainParticipant )
Fast DDS的域参与者(DomainParticipant)是应用程序接入特定域的入口点,负责管理该域内的所有实体。它提供创建发布者、订阅者和主题的工厂功能,并通过DomainParticipantQos控制其行为。DomainParticipantQos包含多种服务质量策略,如用户数据、资源限制、传输配置等,部分策略可在运行时修改。系统提供默认QoS配置,可通过工厂模式进行动态调整。使用时需注意:某些QoS策略在创建后不可修改,统计支持可能影响实际使用的QoS值,修改原创 2025-09-03 21:55:11 · 387 阅读 · 0 评论 -
【FastDDS】Layer DDS之Domain ( 03-DomainParticipantListener)
Fast DDS 的 DomainParticipantListener 是用于监听域参与者状态变化的抽象类,继承自多个监听器接口,可响应各类实体事件。它提供以下核心功能:1) 处理域参与者发现、移除和QoS变更;2) 数据读写器发现事件;3) 安全认证事件(需启用安全功能)。示例代码展示了如何实现自定义监听器,包括带忽略标志的重载版本,其中可根据条件决定是否忽略新发现的实体。所有回调函数均有默认空实现,用户只需重写所需功能。事件会优先由最具体的实体监听器处理,DomainParticipantListen原创 2025-09-03 22:00:01 · 119 阅读 · 0 评论 -
【FastDDS】Layer DDS之Domain ( 04-DomainParticipantFactory)
本文介绍了Fast DDS中的DomainParticipantFactory核心功能。DomainParticipantFactory是单例对象,负责创建和销毁DomainParticipant,其行为可通过DomainParticipantFactoryQos进行配置,其中关键参数autoenable_created_entities决定DomainParticipant是否自动启用。文章还演示了如何通过XML配置文件创建DomainParticipant,支持自动或手动加载配置文件,简化QoS设置过程原创 2025-09-03 22:02:59 · 89 阅读 · 0 评论 -
【FastDDS】Layer DDS之Domain ( 05-Creating a DomainParticipant)
本文详细介绍了Fast DDS中域参与者(DomainParticipant)的三种创建方式及其删除操作。基础创建方式通过create_participant()实现,需指定域ID和QoS参数;基于配置文件的创建使用create_participant_with_profile(),需预先加载XML配置文件;默认配置文件创建则通过create_participant_with_default_profile()自动应用环境配置。文中特别强调DomainId应小于200以避免端口分配问题,并提供了完整的示例代原创 2025-09-03 22:05:35 · 129 阅读 · 0 评论 -
【FastDDS】Layer DDS之Domain ( 06-Partitions )
DDS(数据分发服务)中的分区(Partition)机制提供了在域(Domain)和主题(Topic)之外的逻辑通信隔离,具有动态修改、低开销和多分区归属特性。发布者和订阅者需共享至少一个共同分区才能通信,支持通配符匹配实现灵活分组。分区与端点绑定而非数据绑定,历史数据可能随分区变更而改变接收者。通过C++代码或XML配置可便捷管理分区,适用于需要精细化控制通信范围的分布式系统。原创 2025-09-03 20:14:01 · 650 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (01-overview)
摘要: Fast DDS的发布者(Publisher)是DDS架构中负责数据发布的核心组件,由域参与者创建并管理多个数据写入器(DataWriter)。其行为通过PublisherQos策略控制,包含可变与不可变策略(如分区策略可动态修改,而表示策略不可变)。默认QoS可通过域参与者配置,并支持通过PublisherListener实现事件回调(如QoS不匹配、数据发布状态等)。开发者可通过继承监听器类重写回调函数,实现对发布状态的自定义监控。原创 2025-09-04 08:23:30 · 701 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (02-Publisher详解)
Fast DDS中的发布者(Publisher)是DDS架构中的核心组件,负责管理数据写入器(DataWriter)并协调数据发布。本文详细解析了发布者的功能特性、QoS配置机制及操作方法。发布者通过PublisherQos为其管理的多个独立数据写入器提供统一配置标准,包含Presentation、Partition等策略。文章介绍了如何创建发布者、设置QoS参数,以及通过DomainParticipant管理默认QoS值,包括修改、重置等操作。特别强调了PUBLISHER_QOS_DEFAULT在不同上下原创 2025-09-04 08:43:43 · 189 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (03-PublisherListener)
本文总结了Fast DDS中的PublisherListener功能。PublisherListener是抽象类,用于定义发布者状态变化时的回调,默认空实现,需用户特化实现。它继承自DataWriterListener,能响应数据写入器事件,但仅当数据写入器无监听器或其StatusMask禁用回调时才会触发。PublisherListener本身未新增回调函数,具体回调列表和实现示例可参考DataWriterListener文档。原创 2025-09-04 08:45:38 · 200 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (04-Creating a Publisher)
Fast DDS发布者管理摘要 Fast DDS中发布者(Publisher)的创建与删除操作如下: 发布者创建: 通过DomainParticipant的create_publisher()创建 参数包括PublisherQos(必选)和Listener/StatusMask(可选) 也可使用create_publisher_with_profile()基于XML配置创建 发布者删除: 通过DomainParticipant的delete_publisher()删除 必须先删除发布者包含的所有DataWr原创 2025-09-04 08:47:27 · 253 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (05-DataWriter)
Fast DDS中的DataWriter概述 DataWriter是Fast DDS中负责数据发布的核心组件,主要特点包括: 基本概念:DataWriter依附于Publisher,绑定到特定Topic,通过write()函数发布数据变化 QoS控制:提供22种QoS策略,包括持久性、可靠性、历史记录等,其中部分策略创建后不可修改 默认QoS:可通过Publisher设置默认DataWriterQos,但不会影响已创建的DataWriter实例 特殊值:DATAWRITER_QOS_DEFAULT表示使用当原创 2025-09-04 08:49:53 · 695 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (06-DataWriterListener)
Fast DDS中的DataWriterListener是一个抽象类,用于定义DataWriter状态变化时的回调函数,包含匹配状态变化(on_publication_matched)、QoS不兼容(on_offered_incompatible_qos)、活跃度丢失(on_liveliness_lost)等核心回调。其中on_unacknowledged_sample_removed用于处理样本未被确认即移除的情况,其判断标准取决于可靠性QoS策略。用户可通过继承该类并重写特定回调函数来实现自定义处理逻辑原创 2025-09-04 08:52:54 · 294 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (07-Creating a DataWrite)
本文总结了Fast DDS中DataWriter的创建与删除方法。创建DataWriter通过Publisher的create_datawriter()实现,需绑定Topic并配置QoS策略,支持默认QoS、自定义QoS或基于XML配置文件创建。可选参数包括监听器和StatusMask。自定义PayloadPool可优化数据传输管理。删除DataWriter使用Publisher的delete_datawriter()方法。文中提供了各场景的代码示例和注意事项,强调错误检查的必要性。原创 2025-09-04 08:54:46 · 315 阅读 · 0 评论 -
【FastDDS】Layer DDS之Publisher (08-Publishing data)
Fast DDS数据发布核心要点总结 Fast DDS的数据发布机制主要通过DataWriter的write()方法实现。关键点包括: 基础发布:通过write()发送数据,支持自动推导实例句柄或手动指定 阻塞控制:可靠模式下write()可能阻塞,受max_blocking_time限制 性能优化:提供loan_sample()实现零拷贝发布大数据 预过滤:通过IContentFilter接口实现发布端数据过滤 内存管理:需注意创建/删除数据实例及归还借出样本原创 2025-09-04 09:03:17 · 777 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 01-overview )
Fast DDS订阅者机制概述:订阅者(Subscriber)通过创建数据读取器(DataReader)接收匹配主题(Topic)的数据更新。核心组件包括订阅者QoS配置、监听器设置、数据读取器创建与管理。数据访问支持多种方式:回调处理、等待线程、非阻塞调用等。关键数据结构SampleInfo包含样本状态、视图状态等14种元数据信息。系统提供完整的生命周期管理,包括基于配置文件的创建和删除操作,以及数据样本的借用/返回机制,实现高效的数据分发与处理。原创 2025-09-04 09:15:44 · 467 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 02-Subscriber详解 )
Fast DDS中的订阅者(Subscriber)是管理多个数据读取器(DataReader)的容器,通过SubscriberQoS配置组行为。订阅者QoS包含Presentation、Partition等策略,可使用set_qos()修改。系统启动时使用默认构造的SubscriberQoS,可通过DomainParticipant修改默认值而不影响现有订阅者。原创 2025-09-04 09:19:40 · 410 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 03-SubscriberListener详解 )
摘要:Fast DDS中的SubscriberListener是一个抽象类,用于定义订阅者状态变化时的回调函数。它继承自DataReaderListener,其回调仅在关联的DataReader无监听器或被禁用时触发。新增的on_data_on_readers()回调在订阅者的任一DataReader有新数据时被调用,但不对多次变化进行排队。用户可通过继承该类并重写所需回调函数来实现自定义处理逻辑,示例展示了如何实现on_data_on_readers()回调来响应新数据通知。原创 2025-09-04 09:21:33 · 238 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 04-Creating a Subscriber)
本文总结了Fast DDS中订阅者(Subscriber)的创建与删除方法: 订阅者创建:通过DomainParticipant的create_subscriber()函数实现,需指定QoS参数,可选监听器和状态掩码。创建失败返回空指针。 配置文件创建:使用create_subscriber_with_profile()通过XML配置文件创建订阅者,需先加载配置文件。 订阅者删除:通过delete_subscriber()删除,前提是删除所有关联的DataReader实体,否则会报错。原创 2025-09-04 09:23:49 · 305 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 05-DataReader)
本文详细介绍了Fast DDS中的DataReader组件,包括其基本概念、QoS配置及默认设置。DataReader是订阅者的关键组件,用于接收特定主题的数据。其行为由DataReaderQos控制,包含18个可配置策略。文章还阐述了默认QoS的设置方法及特殊值DATAREADER_QOS_DEFAULT在不同场景下的含义差异,提供了代码示例展示如何创建和修改DataReader的QoS配置。原创 2025-09-04 09:26:09 · 248 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 06-DataReaderListener)
Fast DDS中的DataReaderListener是一个抽象类,用于处理DataReader状态变化事件。它定义了8个核心回调函数,包括数据可用通知、订阅匹配状态变化、QoS不兼容等事件响应机制。用户通过继承该类并重写所需回调函数来实现自定义处理逻辑。事件触发遵循"最特定实体优先"原则,从DataReader逐级向上传递。这种机制提供了灵活的事件处理方式,开发者只需实现与业务相关的回调,无需处理全部事件。典型应用场景包括实时数据接收、发布者状态监控和QoS策略管理等。原创 2025-09-04 09:29:18 · 307 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 07-Creating a DataReader)
Fast DDS中数据读取器(DataReader)的创建与删除方法总结。创建时需通过订阅者实例的create_datareader()函数,指定主题和QoS策略,可选择添加监听器或使用配置文件;删除时需先删除其创建的实体再调用delete_datareader()。提供了三种创建方式:基本QoS配置、基于XML配置文件和自定义PayloadPool,每种方式都需检查返回值有效性。删除操作要求确保所有关联实体已先被删除。原创 2025-09-04 09:34:19 · 866 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 08-SampleInfo)
Fast DDS中的SampleInfo结构体提供了数据样本的元信息,包含样本状态、视图状态和实例状态等关键成员,用于跟踪数据读取情况、实例生命周期变化。它还包含时间戳、实例句柄、发布者标识等信息,帮助应用程序了解数据来源和上下文。通过检查SampleInfo中的valid_data字段,可以区分有效数据样本与状态通知。这些元数据对于实现可靠的数据处理、实例管理和请求-响应交互模式至关重要。原创 2025-09-05 10:13:38 · 249 阅读 · 0 评论 -
【FastDDS】Layer DDS之Subscriber ( 09-Accessing received data)
Fast DDS提供了多种接收数据访问方式:通过读取(read)或提取(take)操作获取数据,其中提取会移除数据而读取保留数据。应用程序可通过序列高效借用接收队列内存,但需及时归还。数据处理时需检查SampleInfo的有效性,可通过监听器回调或等待集机制异步获取数据。等待集允许线程专门等待新数据到达,通过条件触发和超时控制实现可靠的数据接收处理。原创 2025-09-05 00:19:59 · 797 阅读 · 0 评论 -
【FastDDS】Layer DDS 之 Topic
FastDDS源码学习系列:DDS层 Topic 详解。原创 2025-09-02 20:10:45 · 1143 阅读 · 0 评论 -
【FastDDS】Layer RTPS (详解)
Fast DDS的RTPS层实现与配置 Fast DDS的RTPS层提供了对通信协议的底层控制,与DDS层元素一一对应但功能更精细。原创 2025-09-05 10:14:07 · 628 阅读 · 0 评论 -
【FastDDS】Discovery ( 01-overview )
Fast DDS 提供了多种发现机制用于自动匹配数据写入器和读取器,包括简单发现(默认兼容RTPS标准)、静态发现(可跳过SEDP阶段)、集中式的发现服务器架构以及手动RTPS发现。发现过程分为参与者发现(PDP)和端点发现(EDP)两个阶段,PDP通过多播/单播公告确认参与者存在,EDP则匹配主题和数据类型相同的端点。系统支持配置发现协议、租约期限等通用参数,以及各机制特有设置如静态EDP XML配置、服务器定位器等。此外还支持通过监听器实现发现回调功能。原创 2025-09-05 15:08:05 · 594 阅读 · 0 评论 -
【FastDDS】Discovery ( 02-General Discovery Settings )
本文介绍了RTPS协议中的通用发现设置,包括四种核心配置:发现协议选项(如SIMPLE、SERVER等)、参与者过滤标志、租约期限(控制参与者活跃状态时长)和公告周期(PDP公告发送频率)。这些设置通过WireProtocolConfigQos类的builtin成员定义,支持C++和XML两种配置方式。文章详细说明了各参数的用途、取值选项及推荐配置,如建议公告周期应短于租约期限以保证活跃度检测,同时避免过多元流量。这些设置共同构成了DDS系统中发现机制的基础配置。原创 2025-09-05 15:10:54 · 354 阅读 · 0 评论 -
【FastDDS】Discovery ( 03-SIMPLE Discovery Settings)
摘要: eProsima Fast DDS通过简单发现协议(SPDP和SEDP)实现DDS实体间的端到端发现。SPDP用于域参与者间的相互发现,SEDP用于端点(数据写入器/读取器)的发现。关键配置包括: 初始公告:通过多轮广播(默认5次,间隔100ms)提高发现成功率; 简单EDP属性:控制端点发现行为(如仅发布或订阅); 初始对等方:指定目标参与者的IP/端口列表,支持单播和多播(默认端口7400+域ID计算)。配置示例展示了C++和XML实现方式,适用于无多播支持的场景。原创 2025-09-05 15:13:03 · 563 阅读 · 0 评论 -
【FastDDS】Discovery ( 04-STATIC Discovery Settings)
Fast DDS 静态发现机制概述 Fast DDS 提供静态发现功能,可在已知网络拓扑时替代动态发现协议,完全消除 EDP 阶段的元流量。关键特性包括: 配置方式:通过 XML 文件或代码显式配置所有参与实体(数据写入器/读取器) 核心设置: 禁用 SEDP 并启用 STATIC EDP 必须完整定义远程实体信息(主题、数据类型、QoS 等) 支持多文件配置和有效性检查 优势: 节省网络带宽 避免动态发现开销 适用于固定拓扑场景 限制: 仅能与配置中明确定义的对等方通信 需要严格匹配远程实体配置 配置文件原创 2025-09-05 15:15:45 · 321 阅读 · 0 评论 -
【FastDDS】Discovery ( 05-Discovery Server Settings)
服务器发现机制概述 本文介绍了基于客户端-服务器模式的DDS发现机制,其中元流量由服务器管理,而非简单发现模式中的广播方式。原创 2025-09-05 15:19:58 · 678 阅读 · 0 评论 -
【FastDDS】Discovery ( 06-DomainParticipantListener Discovery Callbacks )
本文介绍了Fast DDS中DomainParticipantListener的发现回调实现。原创 2025-09-05 15:22:46 · 93 阅读 · 0 评论 -
【FastDDS】Layer Transport ( 01-overview )
Fast DDS传输层概述:该传输层提供DDS实体间的通信服务,支持多种传输协议,包括默认的UDPv4和共享内存(SHM)传输。原创 2025-09-05 18:17:51 · 318 阅读 · 0 评论 -
【FastDDS】Layer Transport ( 02-Transport API )
摘要: Fast DDS传输层API提供了灵活的通信机制实现框架。核心包括TransportDescriptorInterface(传输描述符)用于配置传输,TransportInterface(传输实例)负责实际消息分发。Locator(定位器)唯一标识通信通道,支持IPv4/IPv6地址映射。特别提供了IPLocator辅助类简化IP定位器配置,支持DNS解析和端口管理。此外,API支持通过ChainingTransport实现传输链式调用,允许在消息收发前后进行预处理。该设计使开发者能灵活配置网络参数原创 2025-09-05 18:25:19 · 322 阅读 · 0 评论 -
Fast-DDS Spy 工具
包括DDS配置和规格配置 , 概述如下dds:domain: 0allowlist:blocklist:topics:qos:specs:qos:logging:filter:error: ""publish:domain: 0。原创 2025-05-27 18:16:02 · 677 阅读 · 0 评论
分享