一个基于 ROS 2 的系统状态监控示例项目。
该项目通过自定义消息发布主机的系统状态信息,包括:
- 主机名
- CPU 使用率
- 内存使用率
- 内存总量
- 可用内存
- 网络发送量
- 网络接收量
随后使用一个基于 Qt 的 C++ 图形界面节点订阅这些消息,并实时显示系统状态。
- 使用 ROS 2 topic 通信
- 使用 自定义消息类型
- 使用 Python 节点采集系统状态
- 使用 C++ + Qt 实现可视化显示
- 适合练习:
- ROS 2 自定义
msg - ROS 2 Python 发布者节点
- ROS 2 C++ 订阅者节点
- Qt 与 ROS 2 的简单结合
- ROS 2 自定义
ros2-system-status-pubsub-display/
├── README.md
└── src/
├── status_interfaces/
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── msg/
│ └── SystemStatus.msg
├── status_publisher/
│ ├── package.xml
│ ├── setup.py
│ └── status_publisher/
│ ├── __init__.py
│ └── sys_status_pub.py
└── status_display/
├── CMakeLists.txt
├── package.xml
├── LICENSE
└── src/
├── hello_qt.cpp
└── sys_status_display.cpp
status_interfaces/msg/SystemStatus.msg
builtin_interfaces/Time stamp
string host_name
float32 cpu_percent
float32 memory_percent
float32 memory_total
float32 memory_available
float64 net_sent
float64 net_recv字段说明:
stamp:消息时间戳host_name:主机名称cpu_percent:CPU 使用率memory_percent:内存使用率memory_total:总内存,单位 MBmemory_available:可用内存,单位 MBnet_sent:累计发送流量,单位 MBnet_recv:累计接收流量,单位 MB
项目运行流程如下:
系统状态采集(Python)
↓
封装为 SystemStatus 消息
↓
发布到话题 /sys_status
↓
C++ 订阅者接收消息
↓
Qt 界面实时显示数据
建议准备以下环境:
- ROS 2
- colcon
- Python 3
- Qt5 Widgets
- Python 库
psutil
sudo apt update
sudo apt install qtbase5-devpip install psutil在 ROS 2 工作空间根目录下执行:
colcon build --packages-select status_interfaces status_publisher status_display编译完成后:
source install/setup.bash建议开两个终端。
source install/setup.bash
ros2 run status_publisher sys_status_pub该节点会周期性采集系统状态,并发布到:
/sys_status
source install/setup.bash
ros2 run status_display sys_status_display运行后会弹出 Qt 窗口,实时显示收到的系统状态数据。
仓库里还包含一个简单的 Qt 测试程序:
source install/setup.bash
ros2 run status_display hello_qt这个程序可以用来确认 Qt 环境是否配置正常。
你也可以直接查看话题内容:
source install/setup.bash
ros2 topic echo /sys_status这样可以先确认发布节点是否正常工作,再检查显示节点。
该包使用 Python 编写,主要逻辑包括:
- 使用
psutil获取 CPU、内存、网络信息 - 使用
platform.node()获取主机名 - 构造
SystemStatus消息 - 通过 ROS 2 topic 周期性发布
该包使用 C++ 编写,主要逻辑包括:
- 创建 ROS 2 订阅者
- 订阅
/sys_status - 将收到的消息拼接成文本
- 通过 Qt
QLabel显示在窗口中
这个项目已经完成了基础的发布-订阅-显示流程,后续还可以继续扩展:
- 把
QLabel改成更完整的 GUI 布局 - 增加 CPU / 内存曲线图
- 增加磁盘使用率监控
- 增加刷新频率配置参数
- 支持多主机状态监控
- 使用
rqt或QTableWidget做更规范的界面展示
Apache-2.0