FastDDS使用、原理和避坑

FastDDS使用、原理和避坑

背景:

因ROS2引入了DDS,使其实时性能够更高并且可以通信模块解耦,本文以ROS2引入的FASTDDS为蓝本,讲述如何使用,以及原理和避坑

1、DDS

dds协议是以数据为中心的订阅-发布者模式的分布式节点的

dds 的模型.分为两层:

DCPS: 数据为中心的发布订阅层 Data-Centric Publish-Subscribe

数据分布的基础架构提供:

发布-订阅者模式 建立全局数据,将P/S 的数据类型经过中间件处理数据

DCPS 分为PIM (Platform Independent Model)和 PSM (Platform Special Model)的模型

DCPS资源可用都可以转化为 qos

可以使用三种进程间通信机制 TCP UDP SHM

DLRL:本地重构层 Data Local Reconstruction Layer

通过简化编程,服务整合到应用层,用户能够访问修改的数据,达到本地语言无缝连接的目的

具体实现是通过建立对DCPS的索引表

一般不使用,作为可选项

2、DCPS 模型

主要包含四部分

domain 域代表通信范围,只有同一个领域的发布者和订阅者才能交互

publisher

topic

subscriber

3、FastDDS

3.1 IDL

以一个helloworld 为例,编写一个idl

struct HelloWorld

{

unsigned long index;

string message;

};

使用fastddsgen 生成c 文件

指令为

fastddsgen -example CMake hello.idl

生成四个文件

HelloWorld.h

HelloWorld.cxx

HelloWorldPubSubTypes.h

HelloWorldPubSubTypes.cxx

IDL 和MSG 的区别:

原始文件:

msg 更加简洁,定义类型名称

idl 复杂一点 需要module和struct

编译生成的有点区别:

都是用name作为h 文件的名称,

msg使用的是struct 定义数据类型

idl 使用的是namespace+class ,将变量定义为m 和私有,生成set 和get 函数

4、避坑

多机通信问题:

解决办法:

domain:不同的域处理不同的消息,bug只有200个可以使用

initialPeersList 来设置本机模式

参考:

https://www.omg.org/spec/DDS-DLRL/1.4/PDF

https://fast-dds.docs.eprosima.com/en/latest/fastdds/getting_started/definitions.html

https://fast-dds.docs.eprosima.com/en/latest/

https://blog.csdn.net/JL_Gao/article/details/84029530

相关推荐

如何一键转发朋友圈
365网站平台网址

如何一键转发朋友圈

📅 07-04 👀 996
别让世界杯变成世界“悲”:运动性猝死,你该知道这些 (转载)
小米蓝牙耳机听歌能听多久(小米蓝牙耳机能用几个小时)
Linux 卸载软件
365bet电子游戏

Linux 卸载软件

📅 08-16 👀 7867
贾爽:常用的三种直播唱歌喊麦声卡调试方法入门指南,你是否需要?
“鬼鸟”叫,有人就会去世,这是真的吗?为何噪鹃鸟叫不是好事?
三角粽的包法
365bet电子游戏

三角粽的包法

📅 07-17 👀 1225
腾讯企业邮箱怎么续费?腾讯企业邮箱怎么优惠续费?
世界七大自然界奇观排行榜
365网站平台网址

世界七大自然界奇观排行榜

📅 07-07 👀 7409