Skip to content

Commit 2c62ef5

Browse files
author
liuyangyang
committed
加入Demo版本的可视化软件
1 parent 61a4ac6 commit 2c62ef5

28 files changed

Lines changed: 4483 additions & 11 deletions

@TODO.md

Lines changed: 385 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,385 @@
1+
# SimpleSensorSync Python可视化工具开发计划
2+
3+
## 项目概述
4+
基于现有SimpleSensorSync C++代码库,开发Python包装层和PyQt可视化界面,专注于触发信号解析和实时监控,提供简洁高效的多传感器同步管理工具。
5+
6+
## 现有代码库分析总结
7+
8+
### C++核心架构组件
9+
- **TriggerManager**: 单例模式管理8个设备触发状态(IMU_1/2, CAM_1-4, LASER, GPS)
10+
- **Messenger**: ZeroMQ发布/订阅通信,端口4565,支持结构体和字符串消息
11+
- **Synchronizer**: 主协调器,支持串口/网络链接配置
12+
- **TopicMonitor**: 实时监控ZeroMQ话题频率和活跃状态
13+
- **传感器抽象**: 支持IMU、相机、激光雷达、GPS数据结构
14+
15+
### 现有Python基础代码 (python/)
16+
- **项目结构**: 已配置uv环境 + pyproject.toml
17+
- **基础模块**: infinite_sense_core/ 包含8个核心Python文件
18+
- `infinit_sense.py`: Synchronizer Python实现
19+
- `message.py`: Messenger ZeroMQ包装
20+
- `usb.py`: 串口通信模块
21+
- `net.py`: 网络通信模块
22+
- `ptp.py`: PTP时间同步
23+
- `data.py`: 数据结构定义
24+
- `times.py`: 时间处理工具
25+
- `app.py`: 应用层封装
26+
- **依赖配置**: pyserial>=3.5, pyzmq>=27.0.1
27+
- **示例代码**: main.py 包含基础使用示例
28+
29+
### 开发环境配置
30+
```bash
31+
# 进入项目Python目录
32+
cd python/
33+
34+
# 激活uv虚拟环境
35+
source .venv/bin/activate
36+
37+
# uv环境已配置,包含必要依赖
38+
```
39+
40+
### 已有功能特性
41+
- ✅ 8位触发状态位掩码管理
42+
- ✅ 微秒级时间戳精度
43+
- ✅ ZeroMQ实时通信机制
44+
- ✅ 多平台架构检测(ARM/x86)
45+
- ✅ ROS1/ROS2条件编译支持
46+
- ✅ 串口/网络双模式同步板连接
47+
- ✅ 实时话题监控和频率统计
48+
- ✅ Python基础框架已搭建
49+
- ✅ uv包管理环境配置完成
50+
51+
---
52+
53+
## 阶段一:Python核心增强和GUI框架 🐍
54+
55+
### [ ] 1.1 现有Python代码增强
56+
- [ ] **基于现有infinite_sense_core模块优化**
57+
- [ ] 分析和完善 `infinit_sense.py` Synchronizer实现
58+
- [ ] 优化 `message.py` ZeroMQ消息处理性能
59+
- [ ] 增强 `data.py` 数据结构和触发状态解析
60+
- [ ] 完善 `times.py` 高精度时间戳处理
61+
- [ ] **新增GUI相关模块**
62+
- [ ] 创建 `gui/
63+
64+
## GUI脚本命名规范方案 🎯
65+
66+
### [ ] GUI模块命名约定
67+
- [ ] **核心组件命名**
68+
- [ ] 主窗口: `main_window.py` - 应用程序主界面
69+
- [ ] 设备面板: `device_panel.py` - 设备状态和控制面板
70+
- [ ] 信号图表: `signal_chart.py` - 实时触发信号可视化
71+
- [ ] 监控仪表: `monitor_dashboard.py` - 统计和监控数据展示
72+
- [ ] 配置对话框: `config_dialog.py` - 连接和设置配置界面
73+
74+
- [ ] **工具模块命名**
75+
- [ ] 数据导出: `data_exporter.py` - CSV/图表导出功能
76+
- [ ] 主题样式: `theme_manager.py` - PyQt样式和主题管理
77+
- [ ] 图表工具: `chart_utils.py` - pyqtgraph图表工具函数
78+
- [ ] 界面工具: `ui_utils.py` - 通用UI组件和工具
79+
80+
- [ ] **子包结构规划**
81+
```
82+
gui/
83+
├── __init__.py # GUI包初始化
84+
├── main_window.py # 主应用窗口
85+
├── widgets/ # 自定义组件子包
86+
│ ├── __init__.py
87+
│ ├── device_panel.py # 设备状态面板组件
88+
│ ├── signal_chart.py # 信号图表组件
89+
│ └── trigger_indicator.py # 触发状态指示器
90+
├── dialogs/ # 对话框子包
91+
│ ├── __init__.py
92+
│ ├── config_dialog.py # 配置对话框
93+
│ └── about_dialog.py # 关于对话框
94+
├── utils/ # GUI工具子包
95+
│ ├── __init__.py
96+
│ ├── theme_manager.py # 主题管理
97+
│ ├── chart_utils.py # 图表工具
98+
│ └── ui_utils.py # UI工具函数
99+
└── resources/ # 资源文件
100+
├── icons/ # 图标文件
101+
├── styles/ # 样式表文件
102+
└── themes/ # 主题配置
103+
```
104+
105+
### [ ] 文件命名规范
106+
- [ ] **命名约定**
107+
- [ ] 使用小写字母和下划线 (snake_case)
108+
- [ ] 文件名应清晰表达功能用途
109+
- [ ] 避免缩写,使用完整描述性名称
110+
- [ ] 类名使用帕斯卡命名法 (PascalCase)
111+
112+
- [ ] **模块前缀规范**
113+
- [ ] `main_*`: 主要应用窗口和入口点
114+
- [ ] `*_panel`: 功能面板组件
115+
- [ ] `*_dialog`: 对话框和弹窗
116+
- [ ] `*_chart`: 图表和可视化组件
117+
- [ ] `*_utils`: 工具函数和助手模块
118+
- [ ] `*_manager`: 管理器和控制器类
119+
120+
### [ ] 类和函数命名规范
121+
- [ ] **PyQt组件类命名**
122+
- [ ] 主窗口类: `MainWindow` (继承自 QMainWindow)
123+
- [ ] 自定义组件: `*Widget`, `*Panel`, `*Chart`
124+
- [ ] 对话框类: `*Dialog` (继承自 QDialog)
125+
- [ ] 工具类: `*Manager`, `*Utils`, `*Helper`
126+
127+
- [ ] **方法命名约定**
128+
- [ ] Qt槽函数: `on_*_clicked`, `on_*_changed`
129+
- [ ] 初始化方法: `init_*`, `setup_*`
130+
- [ ] 更新方法: `update_*`, `refresh_*`
131+
- [ ] 数据处理: `process_*`, `handle_*`
132+
133+
### [ ] 导入和依赖规范
134+
- [ ] **导入顺序标准**
135+
```python
136+
# 标准库导入
137+
import sys
138+
from typing import Optional, Dict
139+
140+
# 第三方库导入
141+
from PyQt6.QtWidgets import QMainWindow, QWidget
142+
from PyQt6.QtCore import QTimer, pyqtSignal
143+
import pyqtgraph as pg
144+
145+
# 项目内部导入
146+
from ..infinite_sense_core import Synchronizer
147+
from .widgets.device_panel import DevicePanel
148+
```
149+
150+
- [ ] **相对导入规范**
151+
- [ ] gui包内模块间使用相对导入
152+
- [ ] 避免循环导入依赖
153+
- [ ] 明确定义包内接口和边界` 子包用于PyQt界面
154+
- [ ] 实现触发信号可视化组件
155+
- [ ] 添加实时数据监控窗口
156+
- [ ] 配置PyQt6和pyqtgraph依赖
157+
- [ ] **uv环境依赖管理**
158+
- [ ] 更新 `pyproject.toml` 添加GUI依赖
159+
- [ ] 配置开发和生产环境依赖分离
160+
- [ ] 添加开发工具依赖(black, pytest, mypy)
161+
162+
### [ ] 1.2 触发信号解析增强
163+
- [ ] **信号解析引擎**
164+
- [ ] PWM信号波形分析
165+
- [ ] PPS信号精度测量
166+
- [ ] 触发延迟统计和补偿
167+
- [ ] 信号质量评估指标
168+
- [ ] **数据缓冲和处理**
169+
- [ ] 高频数据环形缓冲区
170+
- [ ] 触发事件时序分析
171+
- [ ] 同步精度实时计算
172+
- [ ] 异常检测和报警机制
173+
174+
---
175+
176+
## 阶段二:PyQt简洁界面设计 🖥️
177+
178+
### [ ] 2.1 主界面布局(简洁风格)
179+
- [ ] **单窗口设计**
180+
- [ ] 顶部: 连接状态和控制按钮
181+
- [ ] 左侧: 设备列表(8个触发设备)
182+
- [ ] 右侧: 触发信号可视化区域
183+
- [ ] 底部: 状态栏和简要统计信息
184+
185+
### [ ] 2.2 核心可视化组件
186+
- [ ] **触发信号实时显示**
187+
- [ ] 8通道触发状态LED指示器
188+
- [ ] 触发时序图(时间轴+设备标识)
189+
- [ ] 触发频率实时柱状图
190+
- [ ] 同步精度散点图
191+
- [ ] **设备状态面板**
192+
- [ ] 设备连接状态图标
193+
- [ ] 最后触发时间显示
194+
- [ ] 触发计数和频率统计
195+
- [ ] 设备健康状态指示
196+
197+
### [ ] 2.3 交互控制界面
198+
- [ ] **连接配置对话框**
199+
- [ ] 串口选择和参数设置
200+
- [ ] 网络IP/端口配置
201+
- [ ] 连接测试和状态反馈
202+
- [ ] **监控控制面板**
203+
- [ ] 开始/停止监控按钮
204+
- [ ] 数据记录开关
205+
- [ ] 显示刷新率调节
206+
- [ ] 导出数据功能
207+
208+
---
209+
210+
## 阶段三:数据处理和可视化优化 📊
211+
212+
### [ ] 3.1 实时数据流处理
213+
- [ ] **高效数据管道**
214+
- [ ] 异步ZeroMQ消息接收
215+
- [ ] 多线程数据处理队列
216+
- [ ] 实时数据压缩和缓存
217+
- [ ] 内存使用优化管理
218+
- [ ] **触发信号分析算法**
219+
- [ ] 触发间隔时间分析
220+
- [ ] 同步精度统计计算
221+
- [ ] 信号抖动检测
222+
- [ ] 设备协调性评估
223+
224+
### [ ] 3.2 高性能图表组件
225+
- [ ] **PyQtGraph集成**
226+
- [ ] 实时波形绘制(1kHz+更新)
227+
- [ ] 多通道触发信号重叠显示
228+
- [ ] 可缩放时间轴和自动范围
229+
- [ ] 触发事件标记和注释
230+
- [ ] **数据导出功能**
231+
- [ ] CSV格式触发数据导出
232+
- [ ] PNG/SVG图表截图保存
233+
- [ ] 时间段数据选择导出
234+
- [ ] 统计报告生成
235+
236+
---
237+
238+
## 阶段四:集成测试和优化 🔧
239+
240+
### [ ] 4.1 系统集成
241+
- [ ] **多线程架构**
242+
- [ ] 主线程: PyQt界面渲染
243+
- [ ] 数据线程: ZeroMQ消息处理
244+
- [ ] 分析线程: 触发信号解析
245+
- [ ] 监控线程: 系统状态检查
246+
- [ ] **线程同步机制**
247+
- [ ] 线程安全的数据队列
248+
- [ ] Qt信号槽跨线程通信
249+
- [ ] 资源竞争避免和死锁预防
250+
251+
### [ ] 4.2 性能优化和测试
252+
- [ ] **性能基准**
253+
- [ ] 触发响应延迟 <1ms
254+
- [ ] 界面刷新率 ≥30fps
255+
- [ ] 内存占用 <100MB
256+
- [ ] CPU使用率 <20%
257+
- [ ] **稳定性测试**
258+
- [ ] 24小时连续运行测试
259+
- [ ] 高频触发压力测试
260+
- [ ] 网络断连恢复测试
261+
- [ ] 异常场景处理验证
262+
263+
---
264+
265+
## 简化功能特性
266+
267+
### 核心功能(必需)
268+
- [x] 8设备触发状态实时监控
269+
- [x] 触发信号波形可视化
270+
- [x] 串口/网络双模式连接
271+
- [x] 基础数据导出功能
272+
273+
### 增强功能(可选)
274+
- [ ] 触发精度统计分析
275+
- [ ] 设备同步质量评估
276+
- [ ] 历史数据回放功能
277+
- [ ] 配置模板保存/加载
278+
279+
### 暂不实现
280+
- ❌ 复杂的传感器SDK集成
281+
- ❌ ROS节点发布功能
282+
- ❌ 高级数据融合算法
283+
- ❌ 多语言界面支持
284+
285+
---
286+
287+
## 技术栈和环境配置
288+
289+
### uv环境使用指南
290+
```bash
291+
# 进入Python开发目录
292+
cd python/
293+
294+
# 激活uv虚拟环境
295+
source .venv/bin/activate
296+
297+
# 安装GUI相关依赖
298+
uv add PyQt6 pyqtgraph numpy
299+
300+
# 安装开发工具
301+
uv add --dev black pytest mypy ruff
302+
303+
# 查看已安装依赖
304+
uv pip list
305+
306+
# 退出虚拟环境
307+
deactivate
308+
```
309+
310+
### pyproject.toml 配置更新
311+
```toml
312+
[project]
313+
name = "infinitesense"
314+
version = "0.2.0"
315+
requires-python = ">=3.10"
316+
dependencies = [
317+
"pyserial>=3.5",
318+
"pyzmq>=27.0.1",
319+
"PyQt6>=6.4.0",
320+
"pyqtgraph>=0.13.0",
321+
"numpy>=1.21.0",
322+
]
323+
324+
[tool.uv]
325+
dev-dependencies = [
326+
"black>=23.0.0",
327+
"pytest>=7.0.0",
328+
"mypy>=1.0.0",
329+
"ruff>=0.1.0",
330+
]
331+
```
332+
333+
### 现有依赖分析
334+
-**pyserial>=3.5**: 串口通信,已配置
335+
-**pyzmq>=27.0.1**: ZeroMQ消息传递,已配置
336+
- 🔄 **PyQt6**: GUI框架,需要添加
337+
- 🔄 **pyqtgraph**: 高性能图表,需要添加
338+
- 🔄 **numpy**: 数值计算,需要添加
339+
340+
---
341+
342+
## 开发时间线和环境准备
343+
344+
### 环境准备阶段
345+
**预计时间**: 1周
346+
**主要任务**:
347+
- 配置uv环境GUI依赖
348+
- 分析现有Python代码质量
349+
- 设计GUI模块架构
350+
351+
### 开发阶段规划
352+
353+
| 阶段 | 时间 | 关键交付物 | uv环境操作 |
354+
|------|------|-----------|-----------|
355+
| 准备阶段 | 第1周 | 环境配置完成 | `uv add PyQt6 pyqtgraph numpy` |
356+
| 阶段一 | 第2-3周 | Python核心增强 | 基于现有infinite_sense_core优化 |
357+
| 阶段二 | 第4-5周 | PyQt基础界面 | GUI模块开发和测试 |
358+
| 阶段三 | 第6-7周 | 可视化优化 | 触发信号实时显示 |
359+
| 阶段四 | 第8周 | 集成测试 | 完整功能验证 |
360+
361+
## 成功标准
362+
363+
### 功能完整性
364+
- ✅ 完全兼容现有C++触发管理功能
365+
- ✅ 8设备触发状态100%准确显示
366+
- ✅ 实时数据可视化流畅无卡顿
367+
- ✅ 配置保存/加载功能正常
368+
369+
### 性能指标
370+
- ✅ 触发检测延迟 ≤1毫秒
371+
- ✅ 界面响应时间 ≤100毫秒
372+
- ✅ 内存使用 ≤100MB
373+
- ✅ 支持1kHz+触发频率监控
374+
375+
### 用户体验
376+
- ✅ 一键启动监控功能
377+
- ✅ 直观的设备状态指示
378+
- ✅ 简洁的参数配置界面
379+
- ✅ 可靠的数据导出功能
380+
381+
---
382+
383+
**最后更新**: 2025-09-17
384+
**版本**: v2.0 - 基于现有代码库优化版
385+
**负责人**: Claude Code Assistant

0 commit comments

Comments
 (0)