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文件。