目錄
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 個關鍵實體:
- publication entities: 定義消息生成對象及相關屬性
- subscription entities:定義消息消費對象及相關屬性
- 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 應用奠定基礎。