Fast DDS Fast DDS主要包括以下内容DDS API、Fast DDS-Gen、RTPS Wire Protocol

本文详细介绍了FastDDS在ROS2中的应用,以及其作为DDS中间件的核心特点,包括多对多单向数据交换模型和类接口设计。FastDDS-Gen作为代码生成工具,用于将IDL文件转换为源代码。作者在实践中遇到生成代码与官方示例不一致的问题,通过尝试不同的命令和工具版本解决了问题。尽管FastDDS提供了丰富的示例和文档,但在实际操作中仍有挑战,建议开发者根据官方示例进行学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

架构
参考:https://blog.csdn.net/xllhd100s/article/details/113472321

Fast DDS主要包括以下内容:

目前ROS2将Fast DDS作为默认的DDS中间件实现。

DDS API

DDS采用的通信模型是一种多对多单向数据交换,其中产生数据的应用程序将数据发布到属于使用数据的应用程序的订阅者的本地缓存。

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

Fast DDS-Gen

依赖接口意味着需要一个生成工具,将类型描述转换为适当的实现,以填补接口和中间件之间的空白。这个任务由生成工具Fast DDS-Gen完成,这是一个Java应用程序,它使用接口定义语言(IDL)文件中定义的数据类型生成源代码。

RTPS Wire Protocol

Fast DDS在标准网络上交换消息所使用的协议是实时发布-订阅协议(RTPS),这是由OMG联盟定义和维护的用于DDS的互操作性有线协议。该协议通过TCP/UDP/IP等传输协议提供发布者-订阅者通信,并保证不同DDS实现之间的兼容性。

两层API:提供上层DDS和下层RTPS

在这里插入图片描述

操作

Fast DDS对开发者非常友好,不仅有框架文档、API文档,还自带了丰富的示例代码,不止HelloWorld那么简单,基本上所有主要的功能点都能在示例代码中找到,可以说很容易上手。

但是,我还是决定从零跑个HelloWorld看看,事实上,真的也碰到了一些问题,所以呀,绝知此事还是要躬行的。

官方的示例中已经用HelloWorld.idl生成了代码,而当我用Fast DDS-Gen,相同的idl,却生成了不一样的代码,而我并不知道官方代码是用了哪个版本的工具生成的,或者用的命令是不是不一样,这是我遇到的第一个问题。

一开始,当我使用如下命令:

fastddsgen HelloWorld.idl

只生成了四个文件,比官方少了好几个:

     ├── HelloWorld.cxx --> 实际存储数据的结构
     ├── HelloWorld.h
     ├── HelloWorldPubSubTypes.cxx --> 继承自eprosima::fastrtps::TopicDataType
     └── HelloWorldPubSubTypes.h
    

后来发现,可以通过“-example”选择生成某一个平台下的示例代码:

     fastddsgen -example CMake HelloWorld.idl
    

这样就生成了更多的代码文件:

     ├── CMakeLists.txt
     ├── HelloWorld.cxx
     ├── HelloWorld.h
     ├── HelloWorldPublisher.cxx --> 发布者的实现
     ├── HelloWorldPublisher.h
     ├── HelloWorldPubSubMain.cxx --> 主程序
     ├── HelloWorldPubSubTypes.cxx
     ├── HelloWorldPubSubTypes.h
     ├── HelloWorldSubscriber.cxx --> 订阅者的实现
     └── HelloWorldSubscriber.h
    

但这仍然和官方示例看起来不大一样,事实上,发布者和订阅者的实现真的就不一样!而且,即使改了CMakeLists,编译能过,运行时还是会crash,查了问题发现,用老一点版本的工具生成的就和官方示例差不多了,猜测官方示例并不是用最新工具生成的,所以我觉得保险的做法是只生成前面四个文件,可以参考官方示例实现发布者和订阅者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值