文章目录
-
- [1. 概述](#1. 概述)
- [2. 相关资源](#2. 相关资源)
- [3. Fast DDS Monitor 是什么?](#3. Fast DDS Monitor 是什么?)
- [4. 环境准备](#4. 环境准备)
-
- [4.1 系统要求](#4.1 系统要求)
- [4.2 VS2022 环境脚本](#4.2 VS2022 环境脚本)
- [5. 编译 Fast DDS(基础依赖)](#5. 编译 Fast DDS(基础依赖))
-
- [5.1 安装 vcpkg 和 Fast DDS](#5.1 安装 vcpkg 和 Fast DDS)
- 关键路径
- [6. 编译 Qt6 全模块](#6. 编译 Qt6 全模块)
-
- [6.1 下载源码(清华镜像)](#6.1 下载源码(清华镜像))
- [6.2 编译顺序](#6.2 编译顺序)
-
- [第 1 步:编译 qtbase](#第 1 步:编译 qtbase)
- [第 2 步:编译 qtshadertools](#第 2 步:编译 qtshadertools)
- [第 3 步:编译 qtdeclarative(含 Qml/Quick/QuickControls2)](#第 3 步:编译 qtdeclarative(含 Qml/Quick/QuickControls2))
- [第 4 步:编译 qtcharts(必须在 qtdeclarative 之后!)](#第 4 步:编译 qtcharts(必须在 qtdeclarative 之后!))
- [7. 编译 Fast DDS Statistics Backend](#7. 编译 Fast DDS Statistics Backend)
-
- [7.1 克隆源码](#7.1 克隆源码)
- [7.2 编译安装](#7.2 编译安装)
- [8. 编译 Fast DDS Monitor](#8. 编译 Fast DDS Monitor)
-
- [8.1 获取源码](#8.1 获取源码)
- [8.2 编译](#8.2 编译)
- [8.3 运行](#8.3 运行)
- [9. 常见问题与修复](#9. 常见问题与修复)
-
- [Q1: 程序崩溃,退出码 -1](#Q1: 程序崩溃,退出码 -1)
- [Q2: 编译错误 "module Clipboard is not installed"](#Q2: 编译错误 "module Clipboard is not installed")
- [Q3: 编译错误 "module QtCharts is not installed"](#Q3: 编译错误 "module QtCharts is not installed")
- [Q4: "Cannot open: file:///resources/images/..." 错误](#Q4: "Cannot open: file:///resources/images/..." 错误)
- [Q5: GitHub 克隆超时](#Q5: GitHub 克隆超时)
- [10. 创建独立运行包](#10. 创建独立运行包)
-
- [10.1 最终目录结构](#10.1 最终目录结构)
- [11. 使用指南](#11. 使用指南)
-
- [11.1 启动与连接](#11.1 启动与连接)
- [11.2 界面布局](#11.2 界面布局)
- [11.3 DDS 实体发现](#11.3 DDS 实体发现)
- [11.4 统计图表](#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.zip
6.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 install
7. 编译 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 install
8. 编译 Fast DDS Monitor
8.1 获取源码
cd C:\fastdds
git clone --depth 1 -b v4.1.0 https://github.com/eProsima/Fast-DDS-Monitor.git
8.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 install
8.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 调用
cpp
// Engine.cpp 中修改
#include <fastdds_monitor/io/ClipboardHandler.h>
// 在 enable() 方法中添加:
rootContext()->setContextProperty("clipboardHandler", new ClipboardHandler(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 install
Q4: "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 并行编译。