最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

优雅的玩转Fast

IT圈 admin 4浏览 0评论

优雅的玩转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

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论