文章目录
- 1. 概述
- 核心功能
- 与其他工具的关系
- 2. 相关资源
- 3. Fast DDS Monitor 是什么?
- 架构原理
- 4. 环境准备
- 4.1 系统要求
- 4.2 VS2022 环境脚本
- 5. 编译 Fast DDS(基础依赖)
- 5.1 安装 vcpkg 和 Fast DDS
- 关键路径
- 6. 编译 Qt6 全模块
- 6.1 下载源码(清华镜像)
- 6.2 编译顺序
- 第 1 步:编译 qtbase
- 第 2 步:编译 qtshadertools
- 第 3 步:编译 qtdeclarative(含 Qml/Quick/QuickControls2)
- 第 4 步:编译 qtcharts(必须在 qtdeclarative 之后!)
- 7. 编译 Fast DDS Statistics Backend
- 7.1 克隆源码
- 7.2 编译安装
- 8. 编译 Fast DDS Monitor
- 8.1 获取源码
- 8.2 编译
- 8.3 运行
- 9. 常见问题与修复
- Q1: 程序崩溃,退出码 -1
- Q2: 编译错误 "module Clipboard is not installed"
- Q3: 编译错误 "module QtCharts is not installed"
- Q4: "Cannot open: file:///resources/images/..." 错误
- Q5: GitHub 克隆超时
- 10. 创建独立运行包
- 10.1 最终目录结构
- 11. 使用指南
- 11.1 启动与连接
- 11.2 界面布局
- 11.3 DDS 实体发现
- 11.4 统计图表
- 附录:编译耗时参考
1. 概述
Fast DDS Monitor是 eProsima 为 Fast DDS 开发的图形化监控工具,基于Qt6 Quick (QML)框架构建。
它可以实时发现、监控和分析 DDS 网络中的所有实体(DomainParticipants、Topics、Writers、Readers 等),
并以图表形式展示通信统计数据。
核心功能
- 网络发现— 自动发现同一域中的 DomainParticipants、Topics、Endpoints
- 实时统计— 以折线图、柱状图展示延迟、吞吐量、数据样本数等统计指标
- 层次结构视图— 按物理架构(Host -> Process)和逻辑架构(Domain -> Topic)组织显示
- 告警系统— 可配置阈值告警,监控数据异常
- 数据导出— 支持 CSV 格式导出统计数据
- 图形化界面— 基于 Qt Quick 的现代化 UI,多标签页管理
与其他工具的关系
| 工具 | 类型 | 用途 |
|---|---|---|
| Fast DDS Spy | CLI 工具 | 命令行监控 DDS 网络流量 |
| Fast DDS Monitor | GUI 工具 | 图形化 DDS 网络监控与分析 |
| Shapes Demo | GUI 演示 | 展示 DDS 发布/订阅通信机制 |
附编译好的Fast DDS Monitor和Fast DDS Spy工具下载地址:https://download.csdn.net/download/qq8864/92923224,通过工具方便理解DDS原理。
2. 相关资源
| 项目 | 仓库地址 | 版本 |
|---|---|---|
| Fast DDS Monitor | https://github.com/eProsima/Fast-DDS-Monitor | v4.1.0 |
| Fast DDS Statistics Backend | https://github.com/eProsima/Fast-DDS-statistics-backend | v2.5.0 |
| Fast DDS | https://github.com/eProsima/Fast-DDS | v3.6.1 |
| Qt | https://www.qt.io/ | 6.8.3 |
3. Fast DDS Monitor 是什么?
架构原理
Fast DDS Monitor 基于Fast DDS Statistics Backend库,该库封装了 Fast DDS 的统计模块数据收集 API。
Monitor 通过 Backend 库订阅 DDS 统计 Topic,获取各实体的通信指标。
技术栈:
- C++ 核心逻辑 — Fast DDS, Statistics Backend, Qt6 C++ API
- QML 前端 — Qt Quick, Qt Quick Controls 2, Qt Charts
- 通信协议 — RTPS (Real-Time Publish-Subscribe) 协议
4. 环境准备
4.1 系统要求
- Windows 10/11 x64
- Visual Studio 2022 含 C++ 桌面开发工作负载
- Git
- 足够磁盘空间(约 10-15 GB)
4.2 VS2022 环境脚本
创建 vs2022_env.bat:
@echo off 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:\fastdds %%*5. 编译 Fast DDS(基础依赖)
5.1 安装 vcpkg 和 Fast DDS
cd C:\fastdds git clone https://github.com/Microsoft/vcpkg.git cd vcpkg .\bootstrap-vcpkg.bat .\vcpkg install fastdds:x64-windows这会自动安装:
- fastcdr(序列化库)
- foonathan_memory(内存管理)
- tinyxml2(XML 解析)
- OpenSSL(加密支持)
关键路径
| 组件 | 路径 |
|---|---|
| Fast DDS 头文件 | vcpkg\installed\x64-windows\include |
| Fast DDS DLL | vcpkg\installed\x64-windows\bin |
| CMake 配置 | vcpkg\installed\x64-windows\share\fastdds |
6. 编译 Qt6 全模块
Fast DDS Monitor 需要以下 Qt6 模块:
- Qt6 Core, Gui, Widgets -> 来自 qtbase
- Qt6 Qml, Quick, QuickControls2 -> 来自 qtdeclarative
- Qt6 Charts -> 来自 qtcharts
- Qt6 ShaderTools -> 来自 qtshadertools(Qt Quick 编译必需)
6.1 下载源码(清华镜像)
cd C:\fastdds\downloads # qtbase (Core/Gui/Widgets) 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 # qtdeclarative (Qml/Quick) - 约 80MB curl -L -o qtdeclarative-6.8.3.zip https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/6.8/6.8.3/submodules/qtdeclarative-everywhere-src-6.8.3.zip # qtshadertools curl -L -o qtshadertools-6.8.3.zip https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/6.8/6.8.3/submodules/qtshadertools-everywhere-src-6.8.3.zip # qtcharts curl -L -o qtcharts-6.8.3.zip https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/6.8/6.8.3/submodules/qtcharts-everywhere-src-6.8.3.zip6.2 编译顺序
第 1 步:编译 qtbase
cd C:\fastdds tar -xf downloads\qtbase-6.8.3.zip -C qt6 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 :: ~7 分钟 cmake --install qt6\build --prefix install第 2 步:编译 qtshadertools
tar -xf downloads\qtshadertools-6.8.3.zip -C qt6 cmake -G Ninja -S qt6\qtshadertools-everywhere-src-6.8.3 -B qt6\build_qtshadertools ^ -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=install -DCMAKE_INSTALL_PREFIX=install cmake --build qt6\build_qtshadertools --parallel :: ~1 分钟 cmake --install qt6\build_qtshadertools --prefix install第 3 步:编译 qtdeclarative(含 Qml/Quick/QuickControls2)
tar -xf downloads\qtdeclarative-6.8.3.zip -C qt6 cmake -G Ninja -S qt6\qtdeclarative-everywhere-src-6.8.3 -B qt6\build_qtdeclarative ^ -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=install -DCMAKE_INSTALL_PREFIX=install cmake --build qt6\build_qtdeclarative --parallel :: ~8 分钟 cmake --install qt6\build_qtdeclarative --prefix install第 4 步:编译 qtcharts(必须在 qtdeclarative 之后!)
重要:qtcharts 必须在 qtdeclarative 之后编译,才能正确生成 Qt6ChartsQml QML 模块。
tar -xf downloads\qtcharts-6.8.3.zip -C qt6 cmake -G Ninja -S qt6\qtcharts-everywhere-src-6.8.3 -B qt6\build_qtcharts ^ -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=install -DCMAKE_INSTALL_PREFIX=install cmake --build qt6\build_qtcharts --parallel :: ~1.5 分钟 cmake --install qt6\build_qtcharts --prefix install7. 编译 Fast DDS Statistics Backend
Statistics Backend 是 Monitor 的底层依赖库,封装了 Fast DDS 统计数据的收集逻辑。
7.1 克隆源码
powershell cd C:\fastdds git clone --depth 1 -b v2.5.0 https://github.com/eProsima/Fast-DDS-statistics-backend.git
7.2 编译安装
set CMAKE_PREFIX_PATH=C:\fastdds\install;C:\fastdds\vcpkg\installed\x64-windows cmake -G Ninja -S Fast-DDS-statistics-backend -B build\statistics_backend ^ -DCMAKE_BUILD_TYPE=Release ^ -DCMAKE_PREFIX_PATH=%%CMAKE_PREFIX_PATH%% ^ -DCMAKE_INSTALL_PREFIX=install cmake --build build\statistics_backend --parallel :: ~30 秒 cmake --install build\statistics_backend --prefix install8. 编译 Fast DDS Monitor
8.1 获取源码
cd C:\fastdds git clone --depth 1 -b v4.1.0 https://github.com/eProsima/Fast-DDS-Monitor.git8.2 编译
set CMAKE_PREFIX_PATH=C:\fastdds\install;C:\fastdds\vcpkg\installed\x64-windows cmake -G Ninja -S Fast-DDS-Monitor -B build\fastdds_monitor ^ -DCMAKE_BUILD_TYPE=Release ^ -DCMAKE_PREFIX_PATH=%%CMAKE_PREFIX_PATH%% cmake --build build\fastdds_monitor --parallel :: ~30 秒 cmake --install build\fastdds_monitor --prefix install8.3 运行
cd C:\fastdds\install\bin fastdds_monitor.exe首次启动时会出现主窗口,点击Start按钮进入监控界面。
9. 常见问题与修复
Q1: 程序崩溃,退出码 -1
原因:VC++ 运行时 DLL 或 Fast DDS DLL 不在运行目录或 PATH 中。
解决:从 vcpkg\installed\x64-windows\bin 复制以下 DLL 到运行目录:
- fastdds-3.6.dll, fastcdr-2.3.dll, foonathan_memory-0.7.4.dll
- tinyxml2.dll, libssl-3-x64.dll, libcrypto-3-x64.dll
- 或者安装 Visual C++ Redistributable
Q2: 编译错误 “module Clipboard is not installed”
原因:该 Monitor 使用 qmlRegisterType 注册 C++ 类型到 QML,但在某些 Qt6 版本中 QML 引擎无法解析。
解决方案(源码级):
- 修改 qml/TabLayout.qml,移除 import Clipboard 1.0,将 ClipboardHandler 替换为 Item
- 修改 src/Engine.cpp,添加 include,通过 setContextProperty 注入
- 修改 src/main.cpp,注释掉 qmlRegisterType 调用
// Engine.cpp 中修改#include<fastdds_monitor/io/ClipboardHandler.h>// 在 enable() 方法中添加:rootContext()->setContextProperty("clipboardHandler",newClipboardHandler(this));Q3: 编译错误 “module QtCharts is not installed”
原因:QtCharts 在编译时没有生成 QML 模块(Qt6ChartsQml.dll)。
解决:确保 qtcharts 在 qtdeclarative 之后编译,或者在安装了 QML 后重新编译。
cmake --build qt6\build_qtcharts --parallel cmake --install qt6\build_qtcharts --prefix installQ4: “Cannot open: file:///resources/images/…” 错误
原因:使用文件系统加载 QML 时,qrc:/resources/… 路径无法解析。
解决:使用 QRC 编译方式(默认方式),或复制 resources/ 目录到 QML 文件所在目录。
Q5: GitHub 克隆超时
解决:
- 使用镜像:https://gitclone.com/github.com/eProsima/…
- 使用代理:git config --global http.proxy http://proxy:port
- 多次重试
10. 创建独立运行包
10.1 最终目录结构
FastDDSMonitor/ ├── run.bat # 一键启动 ├── fastdds_monitor.exe # 主程序 ├── Qt6Core.dll # Qt6 运行库 ├── Qt6Gui.dll ├── Qt6Qml.dll ├── Qt6Quick.dll ├── Qt6Charts.dll ├── fastdds-3.6.dll # Fast DDS 运行库 ├── fastdds_statistics_backend-2.5.dll ├── fastcdr-2.3.dll ├── foonathan_memory-0.7.4.dll ├── tinyxml2.dll ├── libssl-3-x64.dll ├── libcrypto-3-x64.dll ├── msvcp140.dll # VC++ 运行库 ├── vcruntime140.dll ├── plugins/ # Qt 插件 │ ├── platforms/qwindows.dll │ ├── styles/qmodernwindowsstyle.dll │ ├── imageformats/qjpeg.dll │ └── ... └── qml/ # QML 模块 ├── QtQuick/ ├── QtCharts/ ├── QtQml/ └── ...11. 使用指南
11.1 启动与连接
- 启动 Monitor - 双击 run.bat 或直接运行 fastdds_monitor.exe
- 初始界面 - 显示 Main Start View,包含产品信息和 Start 按钮
- 开始监控 - 点击 Start 按钮,弹出监控配置对话框
- 选择域 - 默认监听 Domain ID 0,可根据需要修改
11.2 界面布局
+--------------------------------------------------------+ | Menu Bar (文件/视图/工具/帮助) | +------+-------------------------------------------------+ | | Tab Bar: DDS | 统计 | 告警 | 日志 | | Icon |-------------------------------------------------| | Bar | 主内容区域(根据 Tab 切换不同视图) | | | - DDS 视图: 树状结构展示 Participants/Topics | | | - 统计视图: 实时折线图/柱状图 | | | - 告警视图: 告警列表和配置 | | | - 日志视图: 日志输出 | +------+-------------------------------------------------+ | Status Bar (连接状态/统计概览) | +--------------------------------------------------------+11.3 DDS 实体发现
Monitor 会自动发现网络中的 DDS 实体,按两种视图组织:
物理视图 (Physical View):
- Host(主机名)-> User(用户)-> Process(进程 PID)-> Participant -> Writer/Reader
逻辑视图 (Logical View):
- Domain(域 ID)-> Topic(主题名)-> Writer/Reader
11.4 统计图表
支持以下统计指标的实时图表展示:
- Latency: 端到端延迟
- Throughput: 吞吐量 (bytes/s)
- Packet Loss: 丢包率
- Sample Count: 数据样本数
- Data Size: 数据大小
- Reliability: 可靠性统计
附录:编译耗时参考
| 组件 | 耗时 |
|---|---|
| Qt6 qtbase (Core/Gui/Widgets) | ~7 分钟 |
| Qt6 qtshadertools | ~1 分钟 |
| Qt6 qtdeclarative (Qml/Quick) | ~8 分钟 |
| Qt6 qtcharts | ~1.5 分钟 |
| Fast DDS Statistics Backend | ~30 秒 |
| Fast DDS Monitor | ~30 秒 |
| 总计 | ~18 分钟 |
以上耗时基于 12 核 CPU + NVMe SSD 测试,使用 Ninja 并行编译。