优雅的玩转Fast-DDS

优雅的玩转Fast-DDS

安装依赖

sudo apt install cmake g++ python3-pip wget git

pip3 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 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

<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 \
    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

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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Fast-DDS是一个高性能的、基于数据发布-订阅模型的通信协议。它提供了丰富的QoS(服务质量)策略以及灵活的路由机制,以满足不同场景下的通信需求。 其中,QoS策略是指在数据传输的过程中,可以通过一定的配置方式来控制数据传输的质量、可靠性、延时等因素。Fast-DDS中提供了多种QoS策略,包括消息传输的可靠性、数据的存储方式、订阅者优先级等。 在Fast-DDS中,消息传输的可靠性可以通过以下几种QoS策略来控制: 1. RELIABILITY,即可靠性:用于控制消息的可靠性,包括发布者和订阅者之间的ack确认机制,以及网络连接中的重传机制。 2. DURABILITY,即持久性:用于控制消息的持久化方式,包括将消息写入本地磁盘或将消息存储在内存中。 3. HISTORY,即历史消息:用于控制订阅者在订阅之前是否可以获取历史消息,以及历史消息保存的方式(内存中、磁盘中、或通过文件传输)。 除了上述QoS策略,Fast-DDS还提供了很多其他的QoS选项,如数据传输的优先级、最大传输延迟、数据分发的方式等等,以满足不同的通信场景需求。 总体而言,Fast-DDS的QoS策略提供了丰富的选项和灵活的配置方式,能够帮助开发人员实现高性能、可靠的数据传输。 ### 回答2: Fast-DDS是一种高性能的DDS实现,可以用于构建实时和分布式系统。Fast-DDS支持多种QoS策略,这些策略允许用户在系统性能和资源利用率之间做出权衡。以下是Fast-DDS的QoS策略的几个关键点: 1. 可靠性:Fast-DDS支持可靠和非可靠的通信,通过配置可靠性参数,可以控制数据重传和丢失时间等方面的行为。 2. 带宽控制:Fast-DDS支持带宽限制,通过配置带宽参数,可以限制系统的带宽使用,从而避免因过度使用带宽导致的卡顿和延迟。 3. 时间同步:Fast-DDS支持时间同步,通过配置时间同步参数,可以在系统中确立一个统一的时间基准,从而避免因时间差异而导致的不一致性。 4. 优先级:Fast-DDS支持消息优先级,通过配置优先级参数,可以确保重要消息的优先传输,从而提高系统的响应能力。 5. QoS Inheritance: Fast-DDS支持QoS继承,它允许用户在不同级别的实体之间继承QoS属性。例如,可将主题级别的QoS继承到订阅者级别,从而确保所有订阅者都使用同一的QoS策略。 综上所述,Fast-DDS的QoS策略提供了一些非常有用的功能,可以帮助用户在不同的反应性和资源利用率需求之间做出权衡,从而优化系统的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏马潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值