FastDDS(8)Discovery自动发现

24 篇文章 ¥179.90 ¥299.90
本文深入探讨了Fast DDS的发现机制,包括参与者发现PDP和端点发现EDP阶段,以及简单的发现协议。介绍了常规发现设置如忽略参与者标志、租约持续时间和公告周期,并详细阐述了静态和发现服务器设置。静态发现允许预先知道所有DataWriter和DataReader,而发现服务器则采用集中式架构管理元流量。此外,还讨论了微调发现服务器握手和在运行时修改远程服务器列表的可能性。

        Fast DDS作为一种数据分发服务(DDS)实现,提供了发现机制,允许跨域参与者自动查找和匹配DataWriter和DataReader,以便他们可以开始共享数据。对于所有机制,此发现分两个阶段执行。

发现阶段

  1. Participant Discovery Phase参与者发现阶段(PDP):在此阶段,域参与者确认彼此的存在。为此,每个DomainParticipant都会定期发送通知消息,其中指定了DomainParticipate侦听传入元和用户数据流量的单播地址(IP和端口)。当两个给定的DomainParticipant存在于同一DDS域中时,它们将匹配。默认情况下,使用已知的多播地址和端口(使用DomainId计算)发送通知消息。此外,还可以指定使用单播发送通知的地址列表(请参阅初始对等体中的)。此外,还可以配置此类通知的周期性(请参阅发现配置)。
  2. Endpoint Discovery Phase端点发现阶段(EDP):在此阶段,DataWriter和DataReader相互确认。为此,DomainParticipants使用PDP期间建立的通信信道,彼此共享有关其DataWriter和DataReader的信息。除其他外,此信息还包含主题和数据类型(请参阅主题)。要使两个端点匹配,其主题和数据类型必须一致。一旦DataWriter和DataReader匹配,它们就可以发送/接收用户数据流量了。

        可以使用

08-19
FastDDS(原名Fast RTPS)是一个高性能的中间件,用于实现基于DDS(Data Distribution Service)标准的实时通信系统。它广泛应用于机器人、自动驾驶、工业自动化等领域,支持跨平台、分布式和实时通信需求。 ### 功能 FastDDS 提供了完整的 DDS 实现,包括发布-订阅通信模型、服务质量策略(QoS)、数据分发服务、发现机制(如 Simple Discovery 和 Static Discovery)、支持多种传输协议(如 UDP、TCP、SHM)等。通过这些功能,开发者可以构建高度可靠、低延迟的通信系统。 FastDDS 支持多种通信拓扑结构,包括点对点、广播、多播等,适用于不同复杂度的系统架构。此外,它还提供了安全通信支持(DDS-Security),可实现数据加密、身份验证和访问控制等功能[^1]。 ### 使用教程 FastDDS 提供了详细的 API 文档和框架文档,便于开发者快速上手。其官方仓库中包含了丰富的示例代码,涵盖了从基础的 HelloWorld 到复杂的数据分发、QoS 配置、多线程通信等内容。开发者可以通过这些示例理解如何构建发布者、订阅者、主题以及如何配置传输协议和 QoS 策略。 安装方面,FastDDS 支持多种平台(如 Linux、Windows、macOS),可以通过源码编译或使用包管理工具(如 vcpkg、Conan、ROS 2 的依赖管理)进行安装。对于 CMake 项目,只需引入 FastDDS 的库文件和头文件即可开始开发。 ### 特性 FastDDS 的主要特性包括: - **高性能**:通过共享内存(SHM)和零拷贝机制优化数据传输效率。 - **跨平台**:支持主流操作系统,并提供 C++ 和 Python 的 API。 - **可扩展性强**:支持动态发现机制,便于构建可扩展的分布式系统。 - **安全性**:集成 DDS-Security 标准,支持身份认证、访问控制和数据加密。 - **兼容性好**:符合 DDS 标准,能够与其他 DDS 实现(如 RTI Connext、OpenDDS)互操作。 ### 最新动态 FastDDS 持续更新迭代,最新版本中引入了多项改进,包括对 ROS 2 的更好支持、增强的安全功能、改进的发现机制(如 Discovery Server)、更高效的内存管理机制等。此外,FastDDS 团队正在推动其在自动驾驶和机器人领域的应用,进一步优化实时性和可靠性。 FastDDS Router 是其生态中的重要组件,它允许连接两个物理或虚拟隔离的 DDS 网络,实现跨网络通信。通过 DDS Router,可以在不同的 LAN 环境下实现透明的数据交换,使得每个网络中的实体可以发布和订阅本地和远程的主题[^3]。 ```cpp // 示例代码:FastDDS 简单发布者 #include <fastdds/dds/domain/DomainParticipantFactory.hpp> #include <fastdds/dds/topic/Topic.hpp> #include <fastdds/dds/publisher/Publisher.hpp> #include <fastdds/dds/publisher/DataWriter.hpp> #include <fastdds/dds/publisher/DataWriterListener.hpp> using namespace eprosima::fastdds::dds; class MyDataWriterListener : public DataWriterListener { public: void on_publication_matched(DataWriter*, const PublicationMatchedStatus& info) override { if (info.current_count_change == 1) { std::cout << "Matched a subscriber" << std::endl; } else if (info.current_count_change == -1) { std::cout << "Unmatched a subscriber" << std::endl; } } }; int main() { DomainParticipant* participant = DomainParticipantFactory::get_instance()->create_participant(0, ParticipantQos()); Topic* topic = participant->create_topic("MyTopic", "MyType", TopicQos()); Publisher* publisher = participant->create_publisher(PublisherQos()); DataWriter* writer = publisher->create_datawriter(topic, DataWriterQos(), new MyDataWriterListener()); // 写入数据 writer->write(data); // 清理资源 participant->delete_contained_entities(); DomainParticipantFactory::get_instance()->delete_participant(participant); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pony12

助力1000篇OpenDDS文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值