通信中間件 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
英文地址,請注明出處:http://en.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…