优雅的玩转Fast
优雅的玩转Fast-DDS
安装依赖
sudo apt install cmake g++ python3-pip wget gitpip3 install -U colcon-common-extensions vcstool
Fast DDS for Linux
最新版本的 eProsima Fast DDS for Linux 可在 eProsima 网站的下载 (eprosima.com)网页,下载eProsima_Fast-DDS-v2.10.0-Linux.tgz
在系统中安装 eProsima 快速 DDS 及其所有依赖项,请执行 具有管理权限的脚本:install.sh
cd <extraction_directory>
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 <extraction_directory>
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
配置 CMake 项目
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 ORCMAKE_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
<path/to/Fast DDS-Gen>/scripts/fastddsgen HelloWorld.idl
这必须生成以下文件:
- HelloWorld.cxx:HelloWorld 类型定义。
-
HelloWorld.h:HelloWorld.cxx 的头文件。
-
HelloWorldPubSubTypes.cxx:HelloWorld 类型的序列化和反序列化代码。
-
HelloWorldPubSubTypes.h:HelloWorldPubSubTypes.cxx的头文件。
CMakeLists.txt
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 \++/DDSHelloWorld/src/HelloWorldPublisher.cppwget -O HelloWorldSubscriber.cpp \++/DDSHelloWorld/src/HelloWorldSubscriber.cpp
CMakeLists.txt
在之前创建的 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 <extraction_directory>
sudo ./uninstall.sh
优雅的玩转Fast
优雅的玩转Fast-DDS
安装依赖
sudo apt install cmake g++ python3-pip wget gitpip3 install -U colcon-common-extensions vcstool
Fast DDS for Linux
最新版本的 eProsima Fast DDS for Linux 可在 eProsima 网站的下载 (eprosima.com)网页,下载eProsima_Fast-DDS-v2.10.0-Linux.tgz
在系统中安装 eProsima 快速 DDS 及其所有依赖项,请执行 具有管理权限的脚本:install.sh
cd <extraction_directory>
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 <extraction_directory>
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
配置 CMake 项目
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 ORCMAKE_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
<path/to/Fast DDS-Gen>/scripts/fastddsgen HelloWorld.idl
这必须生成以下文件:
- HelloWorld.cxx:HelloWorld 类型定义。
-
HelloWorld.h:HelloWorld.cxx 的头文件。
-
HelloWorldPubSubTypes.cxx:HelloWorld 类型的序列化和反序列化代码。
-
HelloWorldPubSubTypes.h:HelloWorldPubSubTypes.cxx的头文件。
CMakeLists.txt
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 \++/DDSHelloWorld/src/HelloWorldPublisher.cppwget -O HelloWorldSubscriber.cpp \++/DDSHelloWorld/src/HelloWorldSubscriber.cpp
CMakeLists.txt
在之前创建的 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 <extraction_directory>
sudo ./uninstall.sh