sudo apt install cmake g++ python3-pip wget git
pip3 install -U colcon-common-extensions vcstool
最新版本的 eProsima Fast DDS for Linux 可在 eProsima 网站的下载 (eprosima.com)网页,下载eProsima_Fast-DDS-v2.10.0-Linux.tgz
在系统中安装 eProsima 快速 DDS 及其所有依赖项,请执行 具有管理权限的脚本:install.sh
cd
sudo ./install.sh
该文件夹包含以下包:src
foonathan_memory_vendor
,一个与 STL 兼容的C++内存分配器库。fastcdr
,一个根据 CDR 标准(OMG CDR 第 10.2.1.2 节)进行数据序列化的C++库。fastrtps
,_易普罗西玛快速DDS_库的核心库。fastddsgen
,一个使用 IDL 文件中定义的数据类型生成源代码的 Java 应用程序。如果不需要这些组件中的任何一个,可以简单地重命名或将其从目录中删除。src
使用 eProsima Fast DDS 运行应用程序实例时,必须将其与库链接,其中 已安装软件包,.有两种可能性:/usr/local/lib/
通过在用于运行_eProsima快速DDS_实例的控制台中键入内容在本地准备环境 命令:
export LD_LIBRARY_PATH=/usr/local/lib/
通过执行以下命令将其永久添加到 中:PATH
echo ‘export LD_LIBRARY_PATH=/usr/local/lib/’ >> ~/.bashrc
cd
colcon build
DDS 是一个以数据为中心的通信中间件,用于实现 DCPS 模型。 该模型基于发布者(数据生成元素)的开发;和一个订户,一个 数据消耗元素。 这些实体通过主题进行通信,主题是绑定两个 DDS 实体的元素。 发布者在主题下生成信息,订阅者订阅同一主题以接收信息。
应用程序工作区在项目结束时将具有以下结构。 文件,并且是发布服务器应用程序和 分别是订户应用程序。build/DDSHelloWorldPublisher``build/DDSHelloWorldSubscriber
.
└── workspace_DDSHelloWorld
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── DDSHelloWorldPublisher
│ ├── DDSHelloWorldSubscriber
│ └── Makefile
├── CMakeLists.txt
└── src
├── HelloWorld.cxx
├── HelloWorld.h
├── HelloWorld.idl
├── HelloWorldPublisher.cpp
├── HelloWorldPubSubTypes.cxx
├── HelloWorldPubSubTypes.h
└── HelloWorldSubscriber.cpp
mkdir workspace_DDSHelloWorld && cd workspace_DDSHelloWorld
mkdir src build
cd workspace_DDSHelloWorld
touch CMakeLists.txt
vi CMakeLists.txt
添加以下内容
cmake_minimum_required(VERSION 3.12.4)
if(NOT CMAKE_VERSION VERSION_LESS 3.0)
cmake_policy(SET CMP0048 NEW)
endif()
project(DDSHelloWorld)
# Find requirements
if(NOT fastcdr_FOUND)
find_package(fastcdr REQUIRED)
endif()
if(NOT fastrtps_FOUND)
find_package(fastrtps REQUIRED)
endif()
# Set C++11
include(CheckCXXCompilerFlag)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG OR
CMAKE_CXX_COMPILER_ID MATCHES "Clang")
check_cxx_compiler_flag(-std=c++11 SUPPORTS_CXX11)
if(SUPPORTS_CXX11)
add_compile_options(-std=c++11)
else()
message(FATAL_ERROR "Compiler doesn't support C++11")
endif()
endif()
在工作区目录中,执行以下命令:
cd src && touch HelloWorld.idl
这会在 src 目录中创建 HelloWorld.idl 文件。 在文本编辑器中打开该文件,然后复制并粘贴以下代码片段。
struct HelloWorld
{
unsigned long index;
string message;
};
通过这样做,我们定义了数据类型,它有两个元素: 类型的_索引_和类型的_消息_ . 剩下的就是生成在 C++11 中实现此数据类型的源代码。 为此,请从目录中运行以下命令HelloWorld``uint32_t``std::string``src
/scripts/fastddsgen HelloWorld.idl
这必须生成以下文件:
HelloWorld.h:HelloWorld.cxx 的头文件。
HelloWorldPubSubTypes.cxx:HelloWorld 类型的序列化和反序列化代码。
HelloWorldPubSubTypes.h:HelloWorldPubSubTypes.cxx的头文件。
CMakeLists.txt文件下添加入
message(STATUS "Configuring HelloWorld publisher/subscriber example...")
file(GLOB DDS_HELLOWORLD_SOURCES_CXX "src/*.cxx")
从工作区中的 src 目录中,运行以下命令下载 HelloWorldPublisher.cpp 和HelloWorldSubscriber.cpp文件。
wget -O HelloWorldPublisher.cpp \
https://raw.githubusercontent.com/eProsima/Fast-RTPS-docs/master/code/Examples/C++/DDSHelloWorld/src/HelloWorldPublisher.cpp
wget -O HelloWorldSubscriber.cpp \
https://raw.githubusercontent.com/eProsima/Fast-RTPS-docs/master/code/Examples/C++/DDSHelloWorld/src/HelloWorldSubscriber.cpp
在之前创建的 CMakeList.txt 文件的末尾包含以下代码段
add_executable(DDSHelloWorldPublisher src/HelloWorldPublisher.cpp ${DDS_HELLOWORLD_SOURCES_CXX})
target_link_libraries(DDSHelloWorldPublisher fastrtps fastcdr)
add_executable(DDSHelloWorldSubscriber src/HelloWorldSubscriber.cpp ${DDS_HELLOWORLD_SOURCES_CXX})
target_link_libraries(DDSHelloWorldSubscriber fastrtps fastcdr)
cd build
cmake ..
cmake --build .
./DDSHelloWorldPublisher
./DDSHelloWorldSubscriber
要卸载所有已安装的组件,请执行 uninstall.sh 脚本(具有管理权限):
cd
sudo ./uninstall.sh