Fast DDS入门四、Fast DDS-Gen使用介绍

这篇具有很好参考价值的文章主要介绍了Fast DDS入门四、Fast DDS-Gen使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Fast DDS-Gen介绍

Fast DDS-Gen是一个Java应用程序,它使用IDL(接口定义语言)文件中定义的数据类型生成Fast DDS源代码。生成的源代码可以用于任何Fast DDS应用程序中,以定义主题的数据类型,并且将用于发布或订阅。Fast DDS通过两个类定义Topic中交换的数据类型:TypeSupport和TopicDataType。TopicDataType描述发布和订阅之间交换的数据类型,即与Topic对应的数据;而TypeSupport是封装TopicDataType的一个实例,提供注册该类型以及发布和订阅交互所需的功能。

要声明结构化数据,必须使用IDL格式。IDL是一种规范语言,由OMG(对象管理组)制定,它以独立于语言的方式描述接口,允许不同开发语言的软件组件之间进行通信。Fast DDS Gen工具读取IDL文件并解析OMG IDL规范的子集,以生成数据序列化的源代码。此子集包括通过IDL定义数据类型中包含的数据类型描述。

Fast DDS Gen生成的源代码使用Fast CDR,这是一个C++11库,提供数据序列化和编码机制。因此,如RTPS标准中所述,当发送数据时,使用相应的公共数据表示(CDR)对数据进行序列化和编码。CDR传输语法是代理间传输的低级表示,从IDL数据类型映射到字节流。

Fast DDS Gen的主要功能是在不了解序列化或反序列化机制的情况下促进DDS应用程序的实现。使用Fast DDS Gen,还可以与使用Fast DDS库的发布者和订阅者一起生成DDS应用程序的源代码。

有关安装Fast DDS Gen,请参阅《Fast DDS入门二、Fast DDS在Windows平台的编译安装》或《Fast DDS入门三、Fast DDS在Linux平台的编译安装》。

2、Fast DDS-Gen用法

本节介绍Fast DDS Gen工具的用法,并简要介绍生成的文件。

首先,安装Fast DDS-Gen必须完成Fast DDS Gen Linux安装或Fast DDS Gen Windows安装中概述的步骤。根据以上安装,脚本文件夹中提供了运行Java Fast DDS Gen应用程序的Linux和Windows可执行文件。如果将脚本文件夹路径添加到path环境变量,则可以运行以下命令执行Fast DDS Gen:

  • Linux:

  • $ fastrtpsgen

  • Windows:

> fastrtpsgen.bat

注意:如果尚未修改PATH,可以在<fastrtpsgen_directory>/scripts目录中找到这些脚本。

应用程序的预期参数列表为:

fastrtpsgen [<options>] <IDL file> [<IDL file> ...]

选项包括:

选项

描述

-help

查看帮助

-version

参看Fast DDS-Gen版本

-d <directory>

设置生成文件的导出目录

-I <directory>

将目录添加到预处理包含的路径。

-t <directory>

设置临时目录

-example <platform>

生成示例和解决方案,以编译特定平台的生成源代码。help命令显示支持的平台。

-replace

生成的源代码文件并替换已存在的文件。

-ppDisable

禁用预处理器

-ppPath

设定预处理路径

-typeobject

为提供的IDL生成TypeObject文件,并修改MyType构造函数以将TypeObject表示注册到工厂中。

3、Fast DDS-Gen生成发布-订阅示例

Fast DDS Gen可用于从IDL文件构建功能齐全的发布/订阅应用程序。生成的应用程序允许创建任意数量的发布者和订阅者,它们都属于同一域,并使用同一主题进行通信。

(1)使用数据类型创建IDL文件

要构建最小的应用程序,必须通过IDL文件定义Topic。在本例中,IDL定义的Topic数据类型只是一个字符串消息。在文本编辑器中,创建具有以下内容的HelloWorld.idl文件,并将其保存在FastDDSGenHelloWorld目录中。

// HelloWorld.idl

struct HelloWorld

{

string message;

};文章来源地址https://www.toymoban.com/news/detail-614762.html

然后,将此文件转换为Fast DDS能够理解的内容。

(2)生成Fast DDS源代码

应用程序文件是使用以下命令生成的。-example选项创建一个示例应用程序,以及构建该应用程序所需的CMake文件。在工作区目录(FastDDSGenHelloWorld目录)中,根据所遵循的安装和操作系统执行以下命令之一。

  • On Linux:

  1. For an installation frombinaries or a colcon installation:

  • <path-to-Fast-DDS-workspace>/src/fastddsgen/scripts/fastddsgen -example CMake HelloWorld.idl

  1. For a stand-alone installation,run:

  • <path-to-Fast-DDS-Gen>/scripts/fastddsgen -example CMake HelloWorld.idl

  • On Windows:

  1. For a colcon installation:

  • <path-to-Fast-DDS-workspace>/src/fastddsgen/scripts/fastddsgen.bat -example CMake HelloWorld.idl

  1. For a stand-alone installation,run:

  • <path-to-Fast-DDS-Gen>/scripts/fastddsgen.bat -example CMake HelloWorld.idl

  1. For an installation frombinaries, run:

fastddsgen.bat -example CMake HelloWorld.idl

在项目生成结束后,应用程序工作区将具有以下结构:

.

└── workspace_DDSHelloWorld

├── build

│ ├── CMakeCache.txt

│ ├── CMakeFiles

│ ├── cmake_install.cmake

│ ├── HelloWorld

│ ├── libHelloWorld_lib.a

│ └── Makefile

├── CMakeLists.txt

├── HelloWorld.cxx

├── HelloWorld.h

├── HelloWorld.idl

├── HelloWorldPublisher.cxx

├── HelloWorldPublisher.h

├── HelloWorldPubSubMain.cxx

├── HelloWorldPubSubTypes.cxx

├── HelloWorldPubSubTypes.h

├── HelloWorldSubscriber.cxx

└── HelloWorldSubscriber.h

(3)构建Fast DDS应用程序

然后,从FastDDSGenHelloWorld目录编译执行以下命令的生成代码。

  • On Linux:

cd build

cmake ..

make

  • On Windows:

cd build

cmake -G "Visual Studio 15 2017 Win64" ..

cmake --build .

注意:CMake命令行直接生成FastDDS可执行应用程序会报错,因为需要先配置好应用程序的相关依赖,因此启动CMake-GUI界面程序,配置依赖完成后,再命令行生成二进制程序,或者通过vs开发工具生成都可以。以下是CMake界面的配置参考:

Fast DDS入门四、Fast DDS-Gen使用介绍,Fast DDS入门,网络协议,Powered by 金山文档

(4)运行Fast DDS-Gen生成的实力程序

  • On Linux:

./HelloWorld publisher

./HelloWorld subscriber

  • On Windows:

HelloWorld.exe publisher

HelloWorld.exe subscriber

每次在发布服务器上按下<Enter>时,都会生成一个新的数据报,由当前在线的订阅服务器通过网络和接收器接收。如果有一个以上的订户可用,则可以看到消息在所有侦听节点上被同等地接收。

注意:

网络通信中,为防止防火墙过滤处理,可能需要在防火墙中设置一个特殊规则,以便FastDDS在Windows上正常工作。

4、通过IDL定义数据类型(常用数据类型)

(1)基本数据类型

下表显示了Fast DDS Gen支持的基本IDL类型以及它们如何映射到C++11。

IDL类型

C++11类型

char

char

octet

uint8_t

short

int16_t

unsigned short

uint16_t

long

int32_t

unsigned long

uint32_t

long long

int64_t

unsigned long long

uint64_t

float

float

double

double

long double

long double

boolean

bool

string

std::string

(2)数组

Fast DDS Gen支持一维和多维阵列。数组始终映射到std::array容器。下表显示了支持的数组类型及其映射。

IDL

C++11

char a[5]

std::array<char,5> a

octet a[5]

std::array<uint8_t,5> a

short a[5]

std::array<int16_t,5> a

unsigned short a[5]

std::array<uint16_t,5> a

long a[5]

std::array<int32_t,5> a

unsigned long a[5]

std::array<uint32_t,5> a

long long a[5]

std::array<int64_t,5> a

unsigned long long a[5]

std::array<uint64_t,5> a

float a[5]

std::array<float,5> a

double a[5]

std::array<double,5> a

(3)序列

Fast DDS Gen支持映射到std::vector容器的序列。下表表示如何处理IDL和C++11之间的映射。

IDL

C++11

sequence<char>

std::vector<char>

sequence<octet>

std::vector<uint8_t>

sequence<short>

std::vector<int16_t>

sequence<unsigned short>

std::vector<uint16_t>

sequence<long>

std::vector<int32_t>

sequence<unsigned long>

std::vector<uint32_t>

sequence<long long>

std::vector<int64_t>

sequence<unsigned long long>

std::vector<uint64_t>

sequence<float>

std::vector<float>

sequence<double>

std::vector<double>

(4)maps

Fast DDS Gen支持与std::map容器等效的map。类型之间的等价性的处理方式与序列相同。

IDL

C++11

map<char, unsigned long long>

std::map<char, uint64_T>

(5)结构体

可以使用一组具有多种类型的成员定义IDL结构。它将被转换为C++类,其中通过IDL定义的结构的成员映射到该类的私有数据成员。此外,还创建了set()和get()成员函数来访问这些私有数据成员。

以下IDL结构体:

struct Structure

{

octet octet_value;

long long_value;

string string_value;

};

将转换为:

class Structure

{

public:

Structure();

~Structure();

Structure(constStructure&x);

Structure(Structure&&x);

Structure& operator=(constStructure&x);

Structure& operator=(Structure &&x);

void octet_value(uint8_t_octet_value);

uint8_t octet_value() const;

uint8_t& octet_value();

void long_value(int64_t_long_value);

int64_t long_value() const;

int64_t& long_value();

void string_value(conststd::string

&_string_value);

void string_value(std::string &&_string_value);

conststd::string&string_value()const;

std::string&string_value();

private:

uint8_tm_octet_value;

int64_tm_long_value;

std::stringm_string_value;

};

到了这里,关于Fast DDS入门四、Fast DDS-Gen使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过IoT-Fast使用IEC 104电力规约协议快速实现采集、上云、组态场景搭建

    本文分享一篇通过IoT-Fast软件完成IEC 104规约设备的数据采集案例。文章主要共分为五个部分: 前期准备 IEC 104规约设备网络通信部署,获取采集点位。 IoT-Fast -采集控制系统 对底层设备进行数据读取、写入的配置界面,还可以进行数据处理。 IoT-Fast -云平台 将采集控制系统收

    2024年01月18日
    浏览(63)
  • SECS/GEN HSMS半导体通信协议解析

    目录 一、协议族总体结构 二、HSMS消息格式(网口连接) 1、超时时间设置 2、在线,离线,连接,未连接 3、Message Header结构 三、SECS-II报文格式 相关手册及通信助手资源获取地址:SECS手册及模拟器 提取码:ahnj 下面是一些SECS/Gen的重要知识归纳(建议查询资料学习SECS后收藏

    2024年02月06日
    浏览(48)
  • SOA协议DDS和Some/IP对比

    SOME/IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中。 SOME/IP的全称为:Scalable service-Oriented MiddlewarE over IP,是一种面向服务的传输协议。 严格地说,SOME/IP不是一款特定的产品,而是一种技术标准。 其最早由宝马在2012-2013年开发,并在2014年集成进AUTOSAR 4.2.1中。 当前,全球最大的商

    2024年02月06日
    浏览(40)
  • 【软件定义汽车】SOA协议DDS和Some/IP对比

    SOME/IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中。 SOME/IP 和 DDS是在不同的应用场景和不同的需求下诞生的技术,所以它们之间注定有很大的区别。 SOME/IP的全称为:Scalable service-Oriented MiddlewarE over IP,是一种面向服务的传输协议。 严格地说,SOME/IP不是一款特定的产品,而是一种

    2024年02月07日
    浏览(40)
  • FAST协议解析3 FIX Fast Tutorial翻译 HelloWorld示例

    Fields in FAST do not have a fixed size and do not use a field separator. Instead, there is a notion of a stop bit (the high order bit on each byte of the message acts as a stop bit) signaling the end of the field. All of the above concepts used together allow the sender to compress a message (sometimes as much as 90%) and the receiver to restore the origina

    2024年02月03日
    浏览(42)
  • 常见的无线网络协议介绍 全面认识无线网络协议的作用

    虽然大家对于网络方面已经很熟悉了,但是大家对于无线网络协议又了解多少,知道无线网络协议都有哪些,他们的各自的作用是什么吗?本文小编就带着我们进行了解网络协议的特性,希望对大家在网络知识方面有所帮助。 802.11b协议 说明:802.11b协议是由IEEE(电气电子工

    2024年02月05日
    浏览(44)
  • 网络协议栈介绍

    一、协议栈简介 网络协议栈是一个网络通信系统的核心组成部分,它由多个网络协议层组成,每一层负责不同的功能。常见的网络协议栈包括TCP/IP协议栈、OSI模型等。 TCP/IP协议栈是当前互联网上最常用的协议栈。它由四层组成,从低至高分别是物理层、数据链路层、网络层

    2024年02月03日
    浏览(22)
  • 【网络】传输层协议介绍

      TCP (Transmission Control Protocol )传输控制协议: 面向连接网络协议 ,是指通信双方之间在进行通信之前要先建立连接。比如打电话,双方通话前需要先建立连接。   TCP是面向连接的、可靠的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传输,每一

    2024年02月06日
    浏览(40)
  • 双卡双待手机DDS切换功能介绍

    双卡双待手机有DSDS(Dual Sim Dual Standby)和DSDA(Dual SIM dual active)方案,早期产品使用DSDA 方案比较多,随着多模、多频段、CA、MIMO等技术出现,硬件射频复杂度大大增加,再加上双卡双通的实际使用场景并不多,DSDS就成为了目前市场的主流方案。 DSDS只有一张卡能够占有P

    2024年02月09日
    浏览(46)
  • 使用mid360从0开始搭建实物机器人入门级导航系统,基于Fast_Lio,Move_Base

    本文原本只是自己在拿到mid360后,开始进行开发过程的一些问题和学习的记录。毕竟实物和仿真还是有很多不同,且由于碰到的问题也比较多,READEME也越来越详细,所以就干脆整合起来,做成了一篇使用mid360的搭建入门的导航系统全流程分享。里面用到的都是主流的开源的框

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包