文章目录
-
- [1. 概述](#1. 概述)
-
- [什么是 eProsima Fast DDS?](#什么是 eProsima Fast DDS?)
- [什么是 Fast DDS Spy?](#什么是 Fast DDS Spy?)
- [什么是 Shapes Demo?](#什么是 Shapes Demo?)
- [2. 相关资源](#2. 相关资源)
- [3. 安装前置依赖](#3. 安装前置依赖)
-
- [3.1 系统要求](#3.1 系统要求)
- [3.2 安装 Chocolatey(如未安装)](#3.2 安装 Chocolatey(如未安装))
- [3.3 安装 Visual Studio 2022](#3.3 安装 Visual Studio 2022)
- [4. 使用 vcpkg 编译 Fast DDS](#4. 使用 vcpkg 编译 Fast DDS)
-
- [4.1 克隆 vcpkg](#4.1 克隆 vcpkg)
- [4.2 安装 Fast DDS 及其依赖](#4.2 安装 Fast DDS 及其依赖)
- [4.3 关键路径](#4.3 关键路径)
- [5. 编译 Fast DDS Spy](#5. 编译 Fast DDS Spy)
-
- [5.1 克隆依赖项目](#5.1 克隆依赖项目)
- [5.2 编译顺序(按依赖关系)](#5.2 编译顺序(按依赖关系))
-
- [步骤 1: 编译 cmake_utils 和 cpp_utils](#步骤 1: 编译 cmake_utils 和 cpp_utils)
- [步骤 2: 编译 DDS-Pipe](#步骤 2: 编译 DDS-Pipe)
- [步骤 3: 编译 Fast-DDS-Spy](#步骤 3: 编译 Fast-DDS-Spy)
- [5.3 Fast DDS Spy 的使用](#5.3 Fast DDS Spy 的使用)
-
- [YAML 配置示例(FASTDDSSPY_CONFIGURATION.yaml):](#YAML 配置示例(FASTDDSSPY_CONFIGURATION.yaml):)
- [6. 编译 Shapes Demo](#6. 编译 Shapes Demo)
-
- [6.1 克隆 Shapes Demo](#6.1 克隆 Shapes Demo)
- [6.2 安装 Qt6](#6.2 安装 Qt6)
-
- [方法 A: 从源码编译 Qt6 qtbase](#方法 A: 从源码编译 Qt6 qtbase)
- [方法 B: 使用 Qt Online Installer(图形界面)](#方法 B: 使用 Qt Online Installer(图形界面))
- [6.3 编译 Shapes Demo](#6.3 编译 Shapes Demo)
- [6.4 运行 Shapes Demo](#6.4 运行 Shapes Demo)
- [7. 创建独立运行目录](#7. 创建独立运行目录)
-
- [7.1 DLL 依赖清单](#7.1 DLL 依赖清单)
-
- [Shapes Demo 的依赖 DLL](#Shapes Demo 的依赖 DLL)
- [Fast DDS Spy 的额外依赖 DLL](#Fast DDS Spy 的额外依赖 DLL)
- [7.2 为什么需要这些 DLL?](#7.2 为什么需要这些 DLL?)
- [7.3 一键收集脚本](#7.3 一键收集脚本)
- [8. 使用指南](#8. 使用指南)
-
- [8.1 运行 Fast DDS Spy](#8.1 运行 Fast DDS Spy)
- [8.2 运行 Shapes Demo](#8.2 运行 Shapes Demo)
- [8.3 验证安装](#8.3 验证安装)
- [9. 常见问题](#9. 常见问题)
-
- [Q1: 运行时报 "no Qt platform plugin" 错误](#Q1: 运行时报 "no Qt platform plugin" 错误)
- [Q2: 运行时提示缺少 MSVCP140.dll 或 VCRUNTIME140.dll](#Q2: 运行时提示缺少 MSVCP140.dll 或 VCRUNTIME140.dll)
- [Q3: GitHub clone 失败](#Q3: GitHub clone 失败)
- [Q4: vcpkg 下载依赖失败](#Q4: vcpkg 下载依赖失败)
- [Q5: 编译 Qt6 时报错](#Q5: 编译 Qt6 时报错)
- Q6: "fastddsspy.exe 无法启动,因为计算机中丢失 api-ms-win-crt-*.dll"
- [附录: 本机构建目录结构](#附录: 本机构建目录结构)
1. 概述
什么是 eProsima Fast DDS?
Fast DDS(原名 Fast RTPS)是 eProsima 开发的一个高性能 DDS(Data Distribution Service,数据分发服务)实现。DDS 是 OMG(Object Management Group)制定的分布式实时中间件标准,广泛应用于机器人、自动驾驶、工业物联网、航空航天等领域。
- RTPS 协议: 基于 Real-Time Publish-Subscribe (RTPS) 协议,提供高效的数据分发
- 语言支持: C++ API
- 应用场景: ROS 2 的默认中间件、自动驾驶、仿真系统、工业控制
什么是 Fast DDS Spy?
Fast DDS Spy 是一个 DDS 网络监控工具,可以:
- 发现 DDS 网络中的 DomainParticipants 和 Topics
- 实时监控 Topic 数据
- 支持 YAML 配置 文件
- 提供 CLI 交互模式
什么是 Shapes Demo?
Shapes Demo 是 eProsima Fast DDS 的官方演示程序,通过可视化的彩色几何图形(圆形、正方形、三角形)展示 DDS 的发布/订阅通信机制。
2. 相关资源
| 项目 | 官网 | GitHub 仓库 |
|---|---|---|
| Fast DDS | eprosima.com | github.com/eProsima/Fast-DDS |
| Fast DDS Spy | fast-dds-spy.readthedocs.io | github.com/eProsima/Fast-DDS-Spy |
| DDS Pipe | dds-pipe.readthedocs.io | github.com/eProsima/DDS-Pipe |
| Shapes Demo | --- | github.com/eProsima/ShapesDemo |
| Fast DDS Python | --- | github.com/eProsima/Fast-DDS-python |
3. 安装前置依赖
3.1 系统要求
- Windows 10/11 x64
- Visual Studio 2022(Professional / Community)
- CMake ≥ 3.20
- Ninja(可选,用于加速编译)
- Git
- Chocolatey(可选,用于安装依赖)
3.2 安装 Chocolatey(如未安装)
以管理员身份运行 PowerShell:
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
3.3 安装 Visual Studio 2022
确保安装时勾选 "使用 C++ 的桌面开发" 工作负载,包含 MSVC v143 构建工具和 Windows 10/11 SDK。
设置 VS2022 环境变量的批处理脚本(本教程的工作目录假设为 C:\Users\dicing\Desktop\test\fastdds):
@echo off
:: vs2022_env.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64
set PATH=C:\path\to\cmake\bin;C:\path\to\ninja;%%PATH%%
cd /d C:\path\to\workdir
%%*
4. 使用 vcpkg 编译 Fast DDS
4.1 克隆 vcpkg
cd C:\fastdds
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
4.2 安装 Fast DDS 及其依赖
由于国内 GitHub 访问不稳定,建议使用镜像或设置代理:
# 设置代理(可选)
= "http://your-proxy:port"
= "http://your-proxy:port"
# 安装 Fast DDS(这会自动安装 fastcdr, foonathan_memory, tinyxml2, openssl 等依赖)
cd C:\fastdds\vcpkg
.\vcpkg install fastdds:x64-windows
# 安装 fasrtcdr(如未自动安装)
.\vcpkg install fastcdr:x64-windows
注意: vcpkg 会自动处理所有依赖。如果网络不好,可以多次重试 --recurse。
编译完成后,头文件在 cpkg\installed\x64-windows\include,库和 DLL 在 cpkg\installed\x64-windows\bin。
4.3 关键路径
| 项目 | 路径 |
|---|---|
| vcpkg 安装目录 | cpkg\installed\x64-windows |
| Fast DDS 头文件 | cpkg\installed\x64-windows\include |
| DLL 目录 | cpkg\installed\x64-windows\bin |
| CMake config | cpkg\installed\x64-windows\share\fastdds\fastdds-config.cmake |
5. 编译 Fast DDS Spy
5.1 克隆依赖项目
由于国内网络问题,如果 GitHub clone 失败,可以多次重试:
set CFLAGS=
set CXXFLAGS=
cd C:\fastdds
:: 克隆 dev-utils(包含 cmake_utils 和 cpp_utils)
git clone --depth 1 https://github.com/eProsima/dev-utils.git
:: 克隆 DDS-Pipe(ddspipe 相关库)
git clone --depth 1 https://github.com/eProsima/DDS-Pipe.git -b 1.x
:: 克隆 Fast-DDS-Spy
git clone --depth 1 https://github.com/eProsima/Fast-DDS-Spy.git -b 1.x
5.2 编译顺序(按依赖关系)
Fast DDS Spy 的依赖链为:
cmake_utils → cpp_utils → ddspipe_core / ddspipe_participants / ddspipe_yaml → fastddsspy_participants / fastddsspy_yaml → fastddsspy
步骤 1: 编译 cmake_utils 和 cpp_utils
:: 设置 VS2022 环境
call "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64
:: 设置路径
set PATH=C:\path\to\cmake\bin;C:\path\to\ninja;%PATH%
set CMAKE_PREFIX_PATH=C:\fastdds\vcpkg\installed\x64-windows
:: 编译 dev-utils
cmake -G Ninja -S dev-utils -B build\dev-utils ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=install ^
-DCMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%
cmake --build build\dev-utils --parallel
cmake --install build\dev-utils
步骤 2: 编译 DDS-Pipe
cmake -G Ninja -S DDS-Pipe -B build\ddspipe ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=install ^
-DCMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%
cmake --build build\ddspipe --parallel
cmake --install build\ddspipe
步骤 3: 编译 Fast-DDS-Spy
cmake -G Ninja -S Fast-DDS-Spy -B build\fastddsspy ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=install ^
-DCMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%
cmake --build build\fastddsspy --parallel
cmake --install build\fastddsspy
编译完成后, astddsspy.exe 位于 install\bin\ 目录下。
5.3 Fast DDS Spy 的使用
# 查看帮助
fastddsspy.exe --help
# 查看版本
fastddsspy.exe --version
# 监控域 0(默认)
fastddsspy.exe
# 监控指定域
fastddsspy.exe --domain 1
# 使用配置文件
fastddsspy.exe -c my_config.yaml
YAML 配置示例(FASTDDSSPY_CONFIGURATION.yaml):
yaml
spy:
domain: 0
discovery-time: 5
output-file: spy_output.txt
6. 编译 Shapes Demo
6.1 克隆 Shapes Demo
cd C:\fastdds
git clone https://github.com/eProsima/ShapesDemo.git
6.2 安装 Qt6
Shapes Demo 需要 Qt 6.8.3 (Core、Gui、Widgets 模块)。推荐从 清华镜像 下载源码编译:
方法 A: 从源码编译 Qt6 qtbase
由于 Qt 官方不再提供 Windows 预编译包的直接下载,需要从源码编译:
:: 下载 Qt 6.8.3 源码(清华镜像,速度快)
curl -L -o qtbase-6.8.3.zip ^
https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/6.8/6.8.3/submodules/qtbase-everywhere-src-6.8.3.zip
:: 解压
tar -xf qtbase-6.8.3.zip -C qt6
编译 Qt6(最小化配置,仅 Core/Gui/Widgets,耗时约 7 分钟):
cmake -G Ninja -S qt6\qtbase-everywhere-src-6.8.3 -B qt6\build ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=install ^
-DFEATURE_dbus=OFF ^
-DFEATURE_sql=OFF ^
-DFEATURE_testlib=OFF ^
-DFEATURE_concurrent=OFF ^
-DBUILD_SHARED_LIBS=ON
cmake --build qt6\build --parallel
cmake --install qt6\build --prefix install
方法 B: 使用 Qt Online Installer(图形界面)
从 download.qt.io 下载安装器,选择 Qt 6.8.3 → MSVC 2022 64-bit 组件安装。
6.3 编译 Shapes Demo
set CMAKE_PREFIX_PATH=C:\fastdds\install;C:\fastdds\vcpkg\installed\x64-windows
cmake -G Ninja -S ShapesDemo -B build\shapes_demo ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%
cmake --build build\shapes_demo --parallel
6.4 运行 Shapes Demo
编译完成后,ShapesDemo.exe 位于 uild\shapes_demo\ 目录。
要运行 Shapes Demo,需要确保 DLL 依赖在同一目录(详见下一节)。
7. 创建独立运行目录
为了使程序脱离开发环境独立运行,需要将所有依赖的 DLL 收集到同一目录。
7.1 DLL 依赖清单
Shapes Demo 的依赖 DLL
| DLL | 来源路径 |
|---|---|
| astdds-3.6.dll | cpkg\installed\x64-windows\bin |
| astcdr-2.3.dll | cpkg\installed\x64-windows\bin |
| oonathan_memory-0.7.4.dll | cpkg\installed\x64-windows\bin |
| inyxml2.dll | cpkg\installed\x64-windows\bin |
| libssl-3-x64.dll | cpkg\installed\x64-windows\bin |
| libcrypto-3-x64.dll | cpkg\installed\x64-windows\bin |
| Qt6Core.dll | install\bin |
| Qt6Gui.dll | install\bin |
| Qt6Widgets.dll | install\bin |
| Qt6Network.dll | install\bin |
| Qt6OpenGL.dll | install\bin |
| Qt6Xml.dll | install\bin |
| platforms/qwindows.dll | qt6\build\plugins\platforms |
| styles/qmodernwindowsstyle.dll | qt6\build\plugins\styles |
| imageformats/qjpeg.dll | qt6\build\plugins\imageformats |
| (其他系统 DLL 如 MSVCP140.dll、VCRUNTIME140.dll 需安装 VC++ Redistributable) |
Fast DDS Spy 的额外依赖 DLL
除上述 Fast DDS 相关的 DLL 外,还需要:
| DLL | 来源路径 |
|---|---|
| cpp_utils-1.5.dll | install\bin |
| ddspipe_core-1.5.dll | install\bin |
| ddspipe_participants-1.5.dll | install\bin |
| ddspipe_yaml-1.5.dll | install\bin |
| astddsspy_participants-1.5.dll | install\bin |
| astddsspy_yaml-1.5.dll | install\bin |
| yaml-cpp.dll | install\bin |
| Qt6PrintSupport.dll | install\bin |
7.2 为什么需要这些 DLL?
Fast DDS 和 Fast DDS Spy 是动态链接的程序,运行时需要加载所有依赖的 DLL。运行目录结构如下:
ShapesDemo/
├── ShapesDemo.exe
├── fastdds-3.6.dll
├── fastcdr-2.3.dll
├── foonathan_memory-0.7.4.dll
├── tinyxml2.dll
├── libssl-3-x64.dll
├── libcrypto-3-x64.dll
├── Qt6Core.dll
├── Qt6Gui.dll
├── Qt6Widgets.dll
├── Qt6OpenGL.dll
├── Qt6Xml.dll
├── platforms/
│ └── qwindows.dll
├── styles/
│ └── qmodernwindowsstyle.dll
└── imageformats/
├── qjpeg.dll
├── qgif.dll
└── qico.dll
⚠️ 注意: Qt 的 platform 插件必须放在 platforms/ 子目录中,否则程序会报 "no Qt platform plugin" 错误。
7.3 一键收集脚本
= "C:\fastdds\dist\ShapesDemo"
= "C:\fastdds\vcpkg\installed\x64-windows\bin"
= "C:\fastdds\install\bin"
= "C:\fastdds\qt6\build\plugins"
# 创建目录结构
New-Item -ItemType Directory -Force -Path , "\platforms", "\styles", "\imageformats"
# 复制 exe 和 DLL
Copy-Item "build\shapes_demo\ShapesDemo.exe"
Copy-Item "\fastdds-3.6.dll", "\fastcdr-2.3.dll", "\foonathan_memory-0.7.4.dll"
Copy-Item "\tinyxml2.dll", "\libssl-3-x64.dll", "\libcrypto-3-x64.dll"
Copy-Item "\Qt6*.dll"
Copy-Item "\platforms\qwindows.dll" "\platforms\"
Copy-Item "\styles\qmodernwindowsstyle.dll" "\styles\"
Copy-Item "\imageformats\*.dll" "\imageformats\"
8. 使用指南
8.1 运行 Fast DDS Spy
Fast DDS Spy 是一个命令行工具,用于监控 DDS 网络流量:
# 基本用法 - 启动交互式 CLI 监控域 0
fastddsspy.exe
# 监控指定域
fastddsspy.exe --domain 1
# 使用自定义配置
fastddsspy.exe -c my_config.yaml
# 设置日志级别
fastddsspy.exe --log-verbosity info
在交互式 CLI 中,可以实时查看:
- 发现的 DomainParticipants
- 发布/订阅的 Topics
- Topic 数据内容
8.2 运行 Shapes Demo
Shapes Demo 是一个图形化演示程序:
ShapesDemo.exe
启动后你会看到主窗口,可以:
-
发布形状(Publisher):
- 点击 Publish 按钮
- 选择形状类型(Circle / Square / Triangle)
- 选择颜色
- 设置大小和移动方向
- 点击 OK 开始发布
-
订阅形状(Subscriber):
- 点击 Subscribe 按钮
- 选择要订阅的形状/颜色
- 点击 OK 开始接收
-
演示效果:
- 多个 Shapes Demo 实例可以在同一网络/域中通信
- 发布者发送的彩色形状会显示在订阅者的画布上
- 支持过滤(Content Filter),只订阅特定颜色或形状
8.3 验证安装
用 Fast DDS Spy 监控 Shapes Demo:
- 启动 Shapes Demo
- 启动 Fast DDS Spy:
ash fastddsspy.exe --domain 0 - Spy 会自动发现 Shapes Demo 创建的 Participant 和 Topics
- 在 Shapes Demo 中发布一个形状
- Spy 会显示 Topic 数据和通信内容
9. 常见问题
Q1: 运行时报 "no Qt platform plugin" 错误
原因 : Qt 找不到平台插件 qwindows.dll。
解决: 确保运行目录下有 platforms\qwindows.dll 子目录和文件。
Q2: 运行时提示缺少 MSVCP140.dll 或 VCRUNTIME140.dll
原因 : 缺少 Visual C++ Redistributable。
解决 : 安装 VC++ Redistributable。
Q3: GitHub clone 失败
原因 : 国内网络访问 GitHub 不稳定。
解决:
- 多次重试 clone
- 使用代理(git config --global http.proxy)
- 使用 Gitee 镜像
Q4: vcpkg 下载依赖失败
解决 :
powershell .\vcpkg install fastdds:x64-windows --recurse
Q5: 编译 Qt6 时报错
原因 : Qt6 需要完整的 MSVC 环境。
解决: 确保在 VS2022 的 x64 命令提示符中运行 cmake。
Q6: "fastddsspy.exe 无法启动,因为计算机中丢失 api-ms-win-crt-*.dll"
原因 : 系统缺少 Universal C Runtime。
解决: 安装 Windows Update KB2999226 或安装 VC++ Redistributable。
附录: 本机构建目录结构
C:\fastdds\
├── vcpkg\ # vcpkg 包管理器
│ └── installed\x64-windows\ # Fast DDS 和依赖安装目录
│ ├── bin\ # DLL 文件
│ ├── include\ # 头文件
│ ├── lib\ # LIB 导入库
│ └── share\ # CMake config 文件
├── dev-utils\ # cmake_utils, cpp_utils 源码
├── DDS-Pipe\ # ddspipe 源码
├── Fast-DDS-Spy\ # Fast DDS Spy 源码
├── ShapesDemo\ # Shapes Demo 源码
├── qt6\ # Qt6 源码和构建目录
│ ├── qtbase-everywhere-src-6.8.3\ # Qt6 源码
│ ├── build\ # Qt6 构建输出
│ └── plugins\ # Qt6 插件
├── build\ # 所有项目的构建输出
│ ├── dev-utils\
│ ├── ddspipe\
│ ├── fastddsspy\
│ └── shapes_demo\
├── install\ # 统一安装前缀
│ ├── bin\ # 所有 exe 和 DLL
│ ├── include\ # 头文件
│ └── lib\ # 库文件
├── dist\ # 独立运行目录
│ ├── ShapesDemo\ # Shapes Demo 独立运行包
│ └── fastddsspy\ # Fast DDS Spy 独立运行包
└── downloads\ # 下载的源码包