使用FastDDS编译IDL文件

发布于:2024-04-17 ⋅ 阅读:(19) ⋅ 点赞:(0)

1.安装FastDDS环境

Ubuntu22.04

1.1安装依赖的软件

sudo apt-get update
//基础工具安装
sudo apt install cmake g++ python3-pip wget git
//Asio 是一个用于网络和低级 I/O 编程的跨平台C++库,它提供了一致的 异步模型。 TinyXML2是一个简单,小巧,高效的C++XML解析器。 
sudo apt install libasio-dev libtinyxml2-dev
//OpenSSL 是用于 TLS 和 SSL 协议的强大工具包,也是一个通用加密库。
sudo apt install libssl-dev
//Libp11 为 OpenSSL 提供 PKCS#11 支持。这是一个可选的依赖项, 仅当 eprosima 快速 DDS 与安全性和 PKCS#11 URI 一起使用时,才需要这样做。
sudo apt install libp11-dev libengine-pkcs11-openssl
//SoftHSM是HSM(硬件安全模块)的软件实现。 如果激活了eProsima快速DDS测试并安装了libp11 在系统上,还需要 SoftHSM 来运行 PKCS#11 功能的测试。
sudo apt install softhsm2
//softhsm2 软件包会创建一个名为 softhsm 的新组。其次要授予对 HSM 模块的访问权限,用户必须属于此组。
sudo usermod -a -G softhsm <user>

下载对应的gtest库

//GTest 是一个用于C++的单元测试库。 默认情况下,eProsima Fast DDS不编译测试。 在调用 colcon 或 CMake 时,可以使用合适的 CMake 配置选项激活它们。
git clone https://github.com/google/googletest src/googletest-distribution

编译gtest

mkdir src/googletest-distribution/build
cd src/googletest-distribution/build
cmake ..
sudo cmake --build . --target install

1.2安装foonathan_memory_vendor

mkdir ~/Fast-DDS
cd ~/Fast-DDS
git clone https://github.com/eProsima/foonathan_memory_vendor.git
mkdir foonathan_memory_vendor/build
cd foonathan_memory_vendor/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_SHARED_LIBS=ON
cmake --build . --target install

1.3安装fast-cdr

cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-CDR.git
mkdir Fast-CDR/build
cd Fast-CDR/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/
cmake --build . --target install

1.4安装fast-dds

cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-DDS.git
mkdir Fast-DDS/build
cd Fast-DDS/build
cmake ..  -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install
cmake --build . --target install

修改库加载路径

export LD_LIBRARY_PATH=/usr/local/lib/

即可执行对应的测试程序

fast-discovery-server --help

1.5安装fastdds-gen

fastdds-gen主要是一个用来自动生成代码的工具。他是一个java工具,可以将对应的idl文件生成对应的C++文件。免去我们自己手写对接fastdds的代码(虽然肯定后续要手写)。

下载代码

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

首先安装对应的jdk

sudo apt install openjdk-11-jdk

编译

./gradlew assemble

编译完成之后,会在目录下面的script目录下生成对应的脚本。

2.编译idl文件

2.1编写idl文件

首先需要编写对应的idl文件,这个文件定义了要传输的数据。(我采用的是国汽智联自研的DDS2X转换工具把DDS通信矩阵自动转换为idl文件,如果有需要可以私聊我)

struct HelloSecurity
{
    string securityData;
};

2.2生成C++代码

调用fastdds-gen工具生成对应的C++ 文件

~/Fast-DDS-Gen/scripts/fastddsgen -example CMake test.idl
export PATH=~/Fast-DDS-Gen/scripts:$PATH

其中testPubSubMain是整个程序的main函数。用来启动其他的pub和sub的。

而对应的publisher和subscriber都依赖PubSubTypes文件。