通信中间件 Fast DDS(一) :编译、安装和测试

目录

1.简介      

2.Windows编译、安装和测试

2.1.编译环境准备

2.2.编译安装

2.2.1.安装FastCDR

2.2.2.安装Foonathan Memory

2.2.3.安装FastDDS

2.3.验证安装

3.Linux编译、安装和测试

3.1.编译环境准备

3.2.编译安装

3.2.1.安装FastCDR

3.2.2.安装Foonathan Memory

3.2.3.安装FastDDS

3.3.验证安装

4.常见问题


1.简介      

        DDS 是 OMG 组织发布的一种中间件协议和 API 标准,它将系统的组件集成在一起,提供业务和任务关键型物联网 (IoT) 应用程序所需的低延迟数据连接、极高的可靠性和可扩展架构。

        DDS(Data Distribution Service,数据分发服务) 是一种以数据为中心的通信协议,用于分布式软件应用程序通信。

        它描述了支持 数据提供者(Data Providers)数据消费者(Data Consumers) 之间通信的通信应用程序编程接口 (API) 和通信语义。

        要学习 DDS 就不能忽略它的模型:DCPS(以数据为中心的发布订阅模型)。

        DCPS 有 3 个关键实体:

  1. publication entities: 定义消息生成对象及相关属性
  2. subscription entities:定义消息消费对象及相关属性
  3. configuration entities:定义传输相关的属性如 Topic 类型,通信的 QoS(服务质量)。

        QoS 是一个非常重要的概念,DDS 使用 QoS 来定义 DDS 实体的行为特征。 QoS 由单独的 QoS 策略(源自 QoSPolicy 的类型的对象)组成。

        FastDDS(原名 Fast RTPS)是 eProsima 公司开发的开源 DDS(Data Distribution Service)实现,基于 RTPS 协议,适用于实时通信场景。

2.Windows编译、安装和测试

2.1.编译环境准备

  • 安装 Visual Studio 2019/2022(需勾选 “Desktop development with C++” 组件)。
  • 安装 CMake(3.16+,添加到系统 PATH)。

CMake基础:安装与配置_windows cmake-CSDN博客

  • 安装 Git(添加到系统 PATH)。
  • 依赖库(如 OpenSSL、asio)可通过 vcpkg 安装:

vcpkg: 一款免费开源的C++包管理器-CSDN博客

# 安装vcpkg
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat# 安装依赖
.\vcpkg\vcpkg install openssl asio tinyxml2 --triplet x64-windows

由于我的电脑通过cmd命令命令行目录是C:\Users\Administrator,所以vcpkg是安装在C:\Users\Administrator这里:

下载vcpkg源码:

安装 openssl asio tinyxml2:

2.2.编译安装

2.2.1.安装FastCDR

FastDDS 依赖 FastCDR(序列化库),需要获取源码,在cmd命令行直接操作:

# 克隆FastCDR(必须先编译)
git clone https://github.com/eProsima/Fast-CDR.git
cd Fast-CDR
mkdir build && cd buildcmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=C:\fastdds_install
cmake --build . --config Release --target install

安装完成后,在C:\fastdds_install目录有FastCDR的头文件,库文件等信息:

2.2.2.安装Foonathan Memory

FastDDS 依赖 Foonathan Memory(内存管理库),需要获取源码,在cmd命令行直接操作:

# 克隆FastCDR(必须先编译)
git clone https://github.com/eProsima/foonathan_memory_vendor.git
cd foonathan_memory_vendor
mkdir build && cd buildcmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=C:\fastdds_install
cmake --build . --config Release --target install

在执行cmake --build . --config Release --target install的时候报错:

于是在网上各种搜索问题原因,始终没有找到解决的办法,于是我到Foonathan Memory的网站去看了一下:

https://github.com/foonathan/memory

找到资料原来Foonathan Memory可以通过vcpkg安装,由于之前安装vcpkg,于是直接进入vcpkg目录,执行下面命令就行:

./vcpkg integrate install
./vcpkg install foonathan-memory

安装完之后,FastDDS的所以依赖就安装完毕,在vcpkg的安装目录下可以看到所有的依赖项:

2.2.3.安装FastDDS

跟安装FastCDR的步骤差不多,不过需要各种依赖库的路径,如下:

git clone https://github.com/eProsima/Fast-DDS.git
cd Fast-DDS
mkdir build && cd buildcmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=C:\fastdds -Dfastcdr_ROOT=C:\fastdds_install   -DAsio_ROOT=C:\Users\Administrator\vcpkg\packages\asio_x64-windows\include  -DTinyXML2_ROOT=C:\Users\Administrator\vcpkg\packages\tinyxml2_x64-windows  -Dfoonathan_memory_ROOT=C:\Users\Administrator\vcpkg\packages\foonathan-memory_x64-windows  -DOpenSSL_ROOT=C:\Users\Administrator\vcpkg\packages\openssl_x64-windowscmake --build . --config Release --target install

编译安装后,在C:\fastdds目录下有FastDDS的头文件,库文件等信息:

2.3.验证安装

编译完成后,可通过运行 FastDDS 的示例程序验证:

编译:

mkdir build && cd buildcmake .. -Dfastcdr_ROOT=C:\fastdds_install  -Dfastdds_ROOT=C:\fastdds   -DTinyXML2_ROOT=C:\Users\Administrator\vcpkg\packages\tinyxml2_x64-windows  -Dfoonathan_memory_ROOT=C:\Users\Administrator\vcpkg\packages\foonathan-memory_x64-windows  -DOpenSSL_ROOT=C:\Users\Administrator\vcpkg\packages\openssl_x64-windowscmake --build . --config Release

完成后在Relese目录下有测试程序hello_world.exe, 把hello_world.exe的一些依赖dll拷贝到这个目录下:

在命令行运行hello_world.exe,显示如下:

分别启动两个终端,运行:

# 启动发布者(终端1)
.\Hello_World.exe  publisher# 启动订阅者(终端2)
.\Hello_World.exe  subscriber

最终运行的效果(1对1):

1对多,一个发布者,多个订阅者:

若订阅者能收到发布者的消息,说明编译和安装成功。

3.Linux编译、安装和测试

3.1.编译环境准备

以麒麟系统为例讲解,FastDDS 依赖多个工具和库,需先安装编译环境和依赖项。

# 更新系统包
sudo apt update && sudo apt upgrade -y# 安装基础编译工具
sudo apt install -y build-essential cmake git pkg-config# 安装依赖库
sudo apt install -y libssl-dev libasio-dev libtinyxml2-dev
sudo apt install -y openjdk-11-jdk  # 用于代码生成工具(可选,部分功能需要)

3.2.编译安装

3.2.1.安装FastCDR

git clone https://github.com/eProsima/Fast-CDR.git
cd Fast-CDRmkdir build && cd build# CMake配置(默认安装到/usr/local)
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release# 编译(-j后接CPU核心数,加速编译)
make -j$(nproc)# 安装(需要管理员权限)
sudo make install
cd ../..  # 返回工作目录

3.2.2.安装Foonathan Memory

git clone https://github.com/eProsima/foonathan_memory_vendor.git
cd foonathan_memory_vendormkdir build && cd build# CMake配置(默认安装到/usr/local)
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release# 编译(-j后接CPU核心数,加速编译)
make -j$(nproc)# 安装(需要管理员权限)
sudo make install
cd ../..  # 返回工作目录

3.2.3.安装FastDDS

git clone https://github.com/eProsima/Fast-DDS.git
cd Fast-DDSmkdir build && cd build# CMake配置(默认安装到/usr/local)
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release# 编译(-j后接CPU核心数,加速编译)
make -j$(nproc)# 安装(需要管理员权限)
sudo make install
cd ../..  # 返回工作目录

编译到最后的时候,出错了:

从报错的提示说是无法找到make_strand,第一直觉应该是asio的库版本低了,FastDDS要求的asio版本是:

而我的麒麟系统是1.12.2,所以报错了。因此必须升级asio库,于是直接从地址:

https://think-async.com/Asio/Download.html

下载了最新版本,直接安装:

./configure 
make -j8  
make -j8 install

asio库相对来说更简单,由于这个库其实并不需要编译,是一个header-only的库,所以根据命令进行安装就可以了。

然后再用同样的方法安装FastDDS即可。安装完在/usr/local目录下有FastDDS的相关信息:

3.3.验证安装

编译完成后,可通过运行 FastDDS 的示例程序验证。

先编译测试程序:

# 进入示例目录(以HelloWorld为例)
cd ~/Fast-DDS/examples/cpp/dds/HelloWorldExample/build# 编译示例(若未自动编译)
cmake .. && make -j$(nproc)

分别启两个终端运行测试程序:

# 启动发布者(终端1)
./Hello_World  publisher# 启动订阅者(终端2)
./Hello_World  subscriber

若订阅者能收到发布者的消息,说明编译和安装成功。

4.常见问题

1.依赖缺失:CMake 报错 “Could NOT find XXX” 时,检查对应依赖是否安装,或通过-DCMAKE_PREFIX_PATH指定依赖路径。

2.版本不兼容:确保 FastDDS 与 FastCDR 版本匹配(参考官方版本矩阵)。

3.权限问题:安装时若提示 “Permission denied”,添加sudo或修改安装路径(如-DCMAKE_INSTALL_PREFIX=$HOME/fastdds)。

通过以上步骤,可在 Linux、Windows 或 macOS 系统上完成 FastDDS 的编译与安装,为后续开发 DDS 应用奠定基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92628.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NI USRP X410 无线电上的雷达目标仿真

此示例展示如何在 NI™ USRP™ 无线电的 FPGA 上部署雷达目标仿真算法。 介绍 在本例中,您将从 Simulink 模型入手,该模型可模拟最多四个雷达目标响应。您将按照分步指南,在 Simulink 中从该模型生成比特流,并使用生成的 MATLAB 主…

PyTorch 深度学习实战教程-番外篇04:卷积层详解与实战指南

标签:# 深度学习 #人工智能 #神经网络 #PyTorch #卷积神经网络 相关文章: 《Pytorch深度学习框架实战教程01》 《Pytorch深度学习框架实战教程02:开发环境部署》 《Pytorch深度学习框架实战教程03:Tensor 的创建、属性、操作与…

LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)

LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C_困难)题目描述:输入输出样例:题解:解题思路:思路一(贪心算法):代码实现代码实现(思路一(贪…

配置timer控制 IO的输出(STC8)

使用STC8的Timer控制IO输出 STC8系列单片机具有多个定时器,可以用于精确控制IO口的输出状态。以下是使用Timer0和Timer1控制IO输出的方法。 初始化Timer0 配置Timer0为16位自动重装模式,用于周期性控制IO输出: /************************ 定时…

【Python练习】086. 编写一个函数,实现简单的DHCP服务器功能

086. 编写一个函数,实现简单的DHCP服务器功能 086. 编写一个函数,实现简单的DHCP服务器功能 安装依赖库 示例代码 代码说明 示例输出 注意事项 扩展功能 DHCP服务器功能实现方法 依赖库安装 基本功能实现 功能说明 运行方法 注意事项 扩展功能 086. 编写一个函数,实现简单的…

生产环境Tomcat运行一段时间后,如何测试其性能是否满足后续使用

要测试生产环境中已运行一段时间的Tomcat性能是否满足后续使用需求,需从基础监控、负载压力测试、配置合理性校验、稳定性验证等多维度入手,结合工具和实际业务场景定位瓶颈,确保其能应对未来可能的流量增长。以下是具体方法和步骤&#xff1…

Qt中的设计模式:经典的MVC,MVP和MVVM

Qt中的设计模式:经典的MVC,MVP和MVVM 前言 ​ 笔者这里最近正在研究经典的三大 Model/View 框架,不得不说,我先前的确写过Qt在这里的体现,但是,笔者认为之前的文章中,我只是机械的memcpy的Qt的…

Windows浮动ip怎么配置

Windows浮动IP怎么配置,达到IP漂移的效果,方法肯定是有的,这里我推荐一款好用的高可用Vip漂移软件PanguVip,我们先看下最终达到的效果图,如下所示PanguVip软件免费下载百度网盘为您提供文件的网络备份、同步和分享服务…

[langchain] Sync streaming vs Async Streaming

我不太清楚langchain中的sync stream 和 async steam有什么关系和区别sync stream from langchain.chat_models import init_chat_model from langchain_deepseek.chat_models import ChatDeepSeek import dotenv dotenv.load_dotenv()messages [ ("system", &quo…

nginx下lua的实现机制、Lua错误处理、面向对象

nginx下lua的实现机制 nginxlua概述 nginx:功能由模块提供。 http模块、events模块,mail模块。 处理http请求的时候,可以利用模块做一些功能:eg:登录校验,js合并,数据库访问,鉴权。 …

Axure基于中继器实现的组件库(导航菜单、动态表格)

摘要 本文将为您详细介绍基于 Axure 的中继器组件库中的 9 个独特组件,这些组件不仅能够极大地提升您的原型设计效率,还能为您的项目增添令人惊叹的交互效果和视觉呈现。 引言 在当今快速发展的数字产品设计领域,原型设计工具的革新不断推动着…

Kafka 生产者与消费者分区策略全解析:从原理到实践

一、生产者分区策略1.1 分区好处(1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。&#xff0…

高频面试点:深入理解 TCP 三次握手与四次挥手

在网络通信的世界里,TCP(Transmission Control Protocol,传输控制协议)是确保数据可靠传输的基石。其中,三次握手建立连接、四次挥手断开连接的过程,更是 Java 秋招面试中的高频考点。今天,我们就深入剖析这两个关键过程,结合原理、代码示例与面试真题,帮你吃透知识点…

k8s-nfs实现创建sc的两种方式

法一:基于 官方 NFS CSI 插件 法二:基于 nfs-subdir-external-provisioner 法一 官方 NFS CSI 插件 大致步骤# 安装 NFS sudo apt update sudo apt install -y nfs-kernel-server # 创建共享目录 sudo mkdir -p /data/nfs sudo chmod 777 /data/nfs # 配…

n8n 入门指南:更适合跨境出海搞钱的AI智能体

如果你最近刷到 AI 圈的分享应该会发现——n8n 又火起来了。其实 n8n 早在 2020 年左右就被程序员玩过一波,当时很多人拿它做网站自动发邮件、消息转发之类的“流程自动化”。但那时候 AI 还没这么卷,大家也没觉得多有用。n8n为什么最近又翻红&#xff1…

【数据分享】各省农业土地流转率(2010-2023)

数据介绍土地流转是推动农业规模化、现代化发展的关键机制。为助力相关研究,现分享一份覆盖全国30个省级行政区、时间跨度为2010-2023年的农业土地流转率面板数据集。本数据直接提取自权威统计年报,具有较高的参考价值。一、数据概览覆盖范围&#xff1a…

音视频时间戳获取与同步原理详解

引言:为什么音视频同步如此重要? 在音视频技术领域,"同步"是决定用户体验的核心要素。想象一下观看电影时画面与声音错位0.5秒的场景:角色说话时嘴唇动作与声音不匹配,爆炸场景的视觉冲击先于音效到达——这…

Day38--动态规划--322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结

Day38–动态规划–322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结 今天的是几道经典的“完全背包”题目。前两道题目,要区分求的是“价值”,还…

应用层Http协议(1)

应用层Http协议(1) 在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传…

elementui input无法输入问题

背景。开发小程序。自定义表单在pc段设置好input输入框属性后。 在小程序端无法输入原因:长度受限制,导致input组件的maxlength属性认为长度是0导致无法输入任何值。看解释是应为遇到空字符串等情况会设置为0解决。因为未找到设置maxlength为0处&#xf…