# 数据预处理系统(Data Preprocessing System) ## 项目概述 本项目是一个用于处理车辆数据的预处理系统,支持多种数据源和格式,包括CAN数据、GNSS数据、雷达数据等。系统采用插件架构,允许用户扩展自定义数据处理功能。 ## 系统架构 ### 核心组件 ``` +------------------+ +------------------+ +------------------+ | | | | | | | 数据源(ZIP) +----->+ 数据处理管道 +----->+ 输出(CSV) | | | | | | | +------------------+ +------------------+ +------------------+ | v +------------------+ | | | 插件系统 | | | +------------------+ ``` 系统由以下主要组件构成: 1. **数据处理器(DataProcessor)**:负责协调整个处理流程,包括ZIP文件解析、数据提取、格式转换等。 2. **插件系统**: - **插件接口(PluginInterface)**:定义插件必须实现的方法。 - **插件管理器(PluginManager)**:负责发现、加载和管理插件。 - **资源管理器(ResourceManager)**:管理插件资源和验证数据格式。 3. **数据处理管道**: - **ZIP/CSV处理器**:处理ZIP中的数据库文件并生成CSV。 - **Rosbag处理器**:处理ROS包数据。 - **C++引擎**:执行高性能数据处理任务。 - **最终数据处理器**:合并、清洗和验证数据。 ## 插件系统 ### 插件接口 所有插件必须实现以下接口: ```python def can_handle(self, zip_path: Path, folder_name: str) -> bool: """判断插件是否可以处理指定文件夹中的数据""" pass def process_data(self, zip_path: Path, folder_name: str, output_dir: Path) -> Optional[Path]: """处理数据并返回处理后的CSV文件路径""" pass def get_required_columns(self) -> Dict[str, Any]: """返回插件将提供的列及其数据类型""" pass ``` ### 现有插件 系统已包含以下插件: 1. **雷达数据处理器(RadarDataProcessor)**:处理雷达数据,使用XML配置文件定义数据格式和处理参数。 2. **文本数据处理器(TextDataProcessor)**:处理简单文本格式的传感器数据。 ## 数据处理流程 1. **初始化配置**:创建配置对象,设置输入/输出路径、UTM区域等参数。 2. **处理ZIP中的数据库文件**:提取并处理数据库文件,生成初始CSV文件。 3. **处理Rosbag文件**:提取并处理ROS包数据。 4. **运行C++预处理引擎**:执行高性能数据处理任务。 5. **数据质量预检**:验证数据质量,检查帧丢失等问题。 6. **最终数据处理**:合并数据、计算曲率、处理交通灯信息等。 7. **插件数据处理**:使用插件处理自定义数据文件夹,并将结果合并到主数据文件中。 8. **扩展后处理**:应用额外的处理/验证步骤。 ## 使用方法 ### 基本用法 ```bash python run.py --zip-path <数据ZIP文件路径> --output-dir <输出目录> ``` ### 完整参数 ```bash python run.py \ --zip-path <数据ZIP文件路径> \ --trafficlight-json <交通灯JSON文件路径> \ --output-dir <输出目录> \ --utm-zone \ --x-offset \ --y-offset \ --plugins-dir <插件目录> \ --resources-dir <资源目录> ``` ### 列出可用插件 ```bash python run.py --list-plugins ``` ## 开发自定义插件 1. 在 `plugins` 目录下创建新的Python文件。 2. 导入并继承 `CustomDataProcessorPlugin` 基类。 3. 实现所有必需的方法(`can_handle`、`process_data`、`get_required_columns`)。 4. 如果需要配置文件,可以将其放在 `resources` 目录下。 示例插件模板可参考 `plugins/data_processor_template.py`。 ## 系统要求 - Python 3.6+ - pandas - numpy - cantools(用于处理CAN数据) - bagpy(用于处理ROS包) - pyproj(用于坐标投影) ## 编译打包 使用PyInstaller打包为可执行文件: ```bash pyinstaller --onedir --name merge_data_process_LST --clean \ --add-data="$(python -c 'import bagpy; from pathlib import Path; print(f"{Path(bagpy.__file__).parent}:bagpy")')" \ --add-binary="/path/to/engine:." \ --add-data="./data_map:data_map" \ --add-data="VBox.dbc:." \ merge_data_process_LST.py ``` ## 代码优化建议 1. **错误处理**:增强错误处理机制,提供更详细的错误信息和恢复策略。 2. **日志系统**:引入结构化日志系统,便于调试和问题追踪。 3. **配置管理**:使用统一的配置管理系统,支持配置文件、环境变量和命令行参数。 4. **单元测试**:增加单元测试覆盖率,确保代码质量和稳定性。 5. **文档完善**:为每个模块和函数添加详细的文档字符串。 6. **性能优化**:识别性能瓶颈并进行优化,特别是大数据处理部分。 7. **代码重构**:减少重复代码,提高模块化和可维护性。