Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

1 Fast DDS动态库的编译安装

本节提供了在Windows环境中从源代码安装Fast DDS的说明。将安装以下软件包:

foonathan_memory_uvendor,一个STL兼容的C++内存分配器库。

fastcdr,一个根据标准CDR序列化机制进行序列化的C++库。

fastrtps,eProsimaFast DDS库的核心库。

首先,需要满足下面详述的环境要求和依赖性。之后,用户可以选择是否遵循colcon或CMake安装说明,本文介绍采用CMake在Windows平台编译安装FastDDS的方法。

1.1环境要求

在Windows环境中从源安装FastDDS需要在系统中安装以下工具:

Visual Studio

Chocolatey

CMake、pip3、wget和git

Gtest[可选]

1.1.1 Visual Studio

Visual Studio需要在系统中具有C++编译器。为此,请确保在Visual Studio安装过程中检查“使用C++进行桌面开发”选项。

如果已安装Visual Studio,但未安装Visual C++可再发行软件包,请打开Visual Studio并转到“工具”->“获取工具和功能”,然后在“工作负载”选项卡中启用C++桌面开发。最后,单击右下角的“修改”。

1.1.2 Chocolatey

Chocolatey是一个Windows软件包管理器。需要安装eProsima Fast DDS的一些依赖项。直接从网站下载并安装。

https://chocolatey.org/

1.1.3 CMake、pip3、wget和git

这些软件包提供了从命令行安装Fast DDS及其依赖项所需的工具。按照各自网站中的详细说明下载并安装CMake、pip3、wget和git。安装后,从“编辑系统环境变量”控制面板将可执行文件的路径添加到path。

它们的下载地址:

CMake, pip3, wget, git

1.1.4 GTest

GTest是C++的单元测试库。默认情况下,Fast DDS不编译测试。调用CMake时,可以使用适当的CMake配置选项激活它们。有关详细信息,请参阅CMake选项部分。这里也将Gtest存储库添加到工作区目录中。

git clone https://github.com/google/googletest src/googletest-distribution

1.2 Fast DDS动态库相关依赖

Fast RTPS在Windows环境中从源安装时具有以下依赖关系:

Asio和TinyXML2库

OpenSSL

1.2.1 Asio和TinyXML2库

Asio是一个用于网络和低级I/O编程的跨平台C++库,它提供了一致的异步模型。TinyXML2是一个简单、小巧、高效的C++XML解析器。可以直接从以下链接下载:

Asio

TinyXML2

下载这些包后,使用PowerShell打开管理shell并执行以下命令:

choco install -y -s asio tinyxml2

其中是这些包已下载到的文件夹。

1.2.2 OpenSSL

OpenSSL是一个用于TLS和SSL协议的强大工具包,也是一个通用密码库。通过此链接下载并安装最新的WindowsOpenSSL版本。安装后,添加指向安装根目录的环境变量OPENSSL_ROOT_DIR。

例如:

OPENSSL_ROOT_DIR=C:\Program Files\OpenSSL-Win64

1.3 Cmake方式编译安装FastDDS动态库

本节介绍如何在本地或全局使用CMake编译eProsima Fast DDS。

(1)打开命令提示符,创建一个FastDDS目录,在其中下载和构建Fast DDS及其依赖项:

mkdir %USERPROFILE%\Fast DDS

注意:%USERPROFILE%是指你要自定义创建的FastDDS根目录,所有文件及文件夹都在该目录下,便于管理。

(2)克隆以下依赖项并使用CMake编译它们。

Fast DDS依赖于Foonathanmemory。为了简化依赖性管理,eProsima提供了一个Foonathan memory vendor,如果在系统中找不到库,可以下载并构建特定版本的Foonathan memory。以下为CMake编译安装过程:

cd %USERPROFILE%\Fast-DDS

git clone https://github.com/eProsima/foonathan_memory_vendor.git

cd foonathan_memory_vendor

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=%USERPROFILE%/Fast-DDS/install ..

cmake --build . --target install

Fast CDR是Fast DDS以来的序列化库,以下为CMake编译安装过程:

cd %USERPROFILE%\Fast-DDS

git clone https://github.com/eProsima/Fast-CDR.git

cd Fast-CDR

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=%USERPROFILE%/Fast-DDS/install ..

cmake --build . --target install

(3)安装所有依赖项后,安装eProsima Fast DDS:

cd %USERPROFILE%\Fast-DDS

git clone https://github.com/eProsima/Fast-DDS.git

cd Fast-DDS

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=%USERPROFILE%/Fast-DDS/install ..

cmake --build . --target install

注意:CMAKE_INSTALL_PREFIX为编译后,默认要安装的路径。

Foonathan memory和Fast-CDR直接采用上述命令行就可以编译安装成功。命令行下编译,最好选择好是执行Debug编译还是Release编译,以便所有互相依赖的动态库能够保持一致,不会发生调用冲突。不太了解CMake的,需要先学习一下CMake。

Fast DDS,以上命令行不能成功编译Fast DDS,因为需要配置其依赖的很多库路径(上述已经下载的库等)。因此需要启动CMake-GUI界面程序,图形界面配置这些依赖库路径。CMake-GUI界面程序启动后选择好Fast-DDS源码目录和Build目录后,先Configure,后Generate。Configure过程中,会弹出缺少相关依赖库提示,人工选择前面已经下载安装的依赖库路径,Configure成功后,就可以Generate生成完整的Fast RTPS的vs解决方案(sln文件)。最后,打开sln解决方案,在vs编译界面下,选择Build项目生成将编译生成所有项目,编译生成动态库、应用程序成功后,选择Install项目生成将安装FastDDS头文件、lib、dll、exe到默认安装的路径下,这些文件就可以给其他工程导入使用FastDDS进行开发了。

Fast DDS的CMake-GUI配置如下所示:

Fast DDS的CMake选项很多,一般选择默认选择进行编译,就够用了。如果定制化编译生成,读者可以有选择的配置,以下是详细介绍。

(4)Fast DDS的CMake选项

Fast DDS提供了许多CMake选项,用于更改Fast DDS的行为和配置。这些选项允许用户通过在CMake执行时将这些选项定义为ON/OFF来启用/禁用某些FastDDS设置。这里介绍一些主要的配置选项:

EPROSIMA_INSTALLER选项:

为Fast DDS创建Windows二进制installer安装程序,默认为OFF。具体来说,它将添加到要安装的组件(CPACK_components_ALL)对应的库到Microsoft VisualC++编译器(MSVC)。设置EPROSIMA_INSTALLER设置为ON对其他选项有以下影响:

EPROSIMA_BUILD is set to ON.

BUILD_DOCUMENTATION is set to ON.

INSTALL_EXAMPLES is set to ON.

EPROSIMA_BUILD选项:

激活内部Fast DDS构建。如果EPROSIMA_INSTALLER为ON,则EPROSIMA_BUILD也被设置为on。将EPROSIMA_BUILD设置为ON对其他选项的影响:

INTERNAL_DEBUG is set to ON.

COMPILE_EXAMPLES is set to ON if EPROSIMA_INSTALLER is OFF.

THIRDPARTY_fastcdr is set to ON if it wasnot set to FORCE.

THIRDPARTY_Asio is set to ON if it wasnot set to FORCE.

THIRDPARTY_TinyXML2 is set to ON if it wasnot set to FORCE.

THIRDPARTY_android-ifaddrs is set to ON if it wasnot set to FORCE.

EPROSIMA_BUILD_TESTS is set to ON if EPROSIMA_INSTALLER is OFF.

BUILD_SHARED_LIBS选项:

将内部库构建为共享库,即导致CMake函数add_library()来创建共享库。除非库被显式添加为静态库。

SECURITY选择:

激活Fast DDS安全模块。安全模块比较复杂,默认设置为OFF。

NO_TLS选项:

禁用传输层安全性(TLS)支持。可参阅TLSover TCP有关Fast DDS TLS配置的更多信息。

SHM_TRANSPORT_DEFAULT选项:

将共享内存传输(SHM)添加到默认传输。

FASTDDS_STATISTICS选项:

启用快速DDS统计模块,该模块目前还不成熟。

COMPILE_EXAMPLES选项:

构建Fast DDS示例。这些示例可以在Fast DDS GitHub存储库找到。

INSTALL_EXAMPLES选项:

安装Fast DDS示例,即将FastDDS示例添加到要安装的组件(CPACK_components_ALL)。

STRICT_REALTIME选项:

启用严格的实时行为。

SQLITE3_SUPPORT选项:

构建SQLITE3插件,该插件启用TRANSIENT_DURABILITY_QOS和DurabilityQosPolicyKind的PERSISENT_DURABILITY_QOS选项,因此能够提供持久性服务。

THIRDPARTY_fastcdr选项:

如果在系统的其他地方未找到Fast CDR,ON将激活该内部库的使用。FORCE激活内部Fast CDR第三方库的使用而不管它是否可以在系统中的其他地方找到。OFF禁用内部Fast CDR第三方库的使用。如果未设置为FORCE,则如果EPROSIMA_BUILD为ON,则设置为ON。

THIRDPARTY_Asio选项:

如果在系统的其他地方未找到Asio,ON将激活该内部库的使用。FORCE激活内部Asio第三方库的使用而不管它是否可以在系统中的其他地方找到。OFF禁用内部Asio第三方库的使用。如果未设置为FORCE,则如果EPROSIMA_BUILD为ON,则设置为ON。

THIRDPARTY_TinyXML2选项:

如果在系统的其他地方未找到TinyXML2,ON将激活该内部库的使用。FORCE激活内部TinyXML2第三方库的使用而不管它是否可以在系统中的其他地方找到。OFF禁用内部TinyXML2第三方库的使用。如果未设置为FORCE,则如果EPROSIMA_BUILD为ON,则设置为ON。

THIRDPARTY选项:

除非另有规定,否则就是设置所有第三方的子模块THIRPARTY_fastcdr、THIRPARTEY_Asio,

THIRPARTY_TinyXML2和THIRPARty_android-ifaddrs。

LOG_CONSUMER_DEFAULT选项:

选择日志记录模块的默认日志使用者。AUTO的行为与STDOUT相同。

LOG_NO_INFO选项:

停用信息日志级别。

FASTDDS_ENFORCE_LOG_INFO选项:

即使在非调试配置上也启用信息日志级别。此选项仅在LOG_NO_INFO设置为OFF时生效,这可能会对性能造成重大影响。

GTEST_INDIVIDUAL选项:

激活GoogleTest测试的单独构建,因为FastDDS测试是使用GoogleTest框架实现的。但是,如果EPROSIMA_BUILD设置为ON,则编译测试。因此,如果GTEST_INDIVIDUAL为OFF,而EPROSIMA-BUILD为ON,测试将作为单个主要测试进行处理。

FASTRTPS_API_TESTS选项:

支持使用Fast DDS RTPS层API构建用于验证RTPS通信的黑盒测试。

PERFORMANCE_TESTS选项:

激活性能测试的构建,视频测试除外,视频测试需要将performance_tests和video_tests设置为ON。

2 Fast DDS-Gen编译安装

eProsimaFast 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传输语法是代理间传输的低级表示,从OMGIDL数据类型映射到字节流。

Fast DDS Gen的主要功能是在不了解串行化或反序列化机制的情况下促进DDS应用程序的实现。使用Fast DDS Gen,还可以与使用Fast DDS库的发布者和订阅者一起生成DDS应用程序的C++源代码(请参阅构建发布/订阅应用程序)。Fast DDS Gen还可以为数据类型生成Python绑定,以便在基于Python的Fast DDS应用程序中使用它们(请参见构建Python辅助库)。

2.1环境要求

为了编译Fast DDS Gen,需要在系统中安装以下软件包:

Java JDK

Gradle

JDK是一个使用Java语言构建应用程序和组件的开发环境。按照Oracle网站中给出的步骤下载并安装它。

Gradle是一个开源的自动化构建工具,首选下载并安装Gradle的最新的稳定版本。

Java JDK和Gradle可去对应官方网站下载。

2.2编译安装Fast DDS-Gen

满足上述要求后,按照以下步骤安装Fast DDS Gen:

cd ~

git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git

cd Fast-DDS-Gen

gradle assemble

编译成功后Fast DDS Gen文件夹包含以下软件包:

share/fastddsgen,生成的Java应用程序所在的位置。

scripts,包含一些用户友好的脚本。注意:要使这些脚本可以从任何目录访问,请将脚本文件夹路径添加到path环境变量。

CSDN下载:免费下载Fast DDS编译后的动态库

github下载:git clone https://github.com/FantasticSaltedFish/Fast-DDS.git

Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

查看原文