README_new.md 5.3 KB

数据预处理系统(Data Preprocessing System)

项目概述

本项目是一个用于处理车辆数据的预处理系统,支持多种数据源和格式,包括CAN数据、GNSS数据、雷达数据等。系统采用插件架构,允许用户扩展自定义数据处理功能。

系统架构

核心组件

+------------------+      +------------------+      +------------------+
|                  |      |                  |      |                  |
|  数据源(ZIP)    +----->+  数据处理管道     +----->+  输出(CSV)     |
|                  |      |                  |      |                  |
+------------------+      +------------------+      +------------------+
                                   |
                                   v
                          +------------------+
                          |                  |
                          |   插件系统       |
                          |                  |
                          +------------------+

系统由以下主要组件构成:

  1. 数据处理器(DataProcessor):负责协调整个处理流程,包括ZIP文件解析、数据提取、格式转换等。

  2. 插件系统

    • 插件接口(PluginInterface):定义插件必须实现的方法。
    • 插件管理器(PluginManager):负责发现、加载和管理插件。
    • 资源管理器(ResourceManager):管理插件资源和验证数据格式。
  3. 数据处理管道

    • ZIP/CSV处理器:处理ZIP中的数据库文件并生成CSV。
    • Rosbag处理器:处理ROS包数据。
    • C++引擎:执行高性能数据处理任务。
    • 最终数据处理器:合并、清洗和验证数据。

插件系统

插件接口

所有插件必须实现以下接口:

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. 扩展后处理:应用额外的处理/验证步骤。

使用方法

基本用法

python run.py --zip-path <数据ZIP文件路径> --output-dir <输出目录>

完整参数

python run.py \
  --zip-path <数据ZIP文件路径> \
  --trafficlight-json <交通灯JSON文件路径> \
  --output-dir <输出目录> \
  --utm-zone <UTM区域> \
  --x-offset <X偏移量> \
  --y-offset <Y偏移量> \
  --plugins-dir <插件目录> \
  --resources-dir <资源目录>

列出可用插件

python run.py --list-plugins

开发自定义插件

  1. plugins 目录下创建新的Python文件。
  2. 导入并继承 CustomDataProcessorPlugin 基类。
  3. 实现所有必需的方法(can_handleprocess_dataget_required_columns)。
  4. 如果需要配置文件,可以将其放在 resources 目录下。

示例插件模板可参考 plugins/data_processor_template.py

系统要求

  • Python 3.6+
  • pandas
  • numpy
  • cantools(用于处理CAN数据)
  • bagpy(用于处理ROS包)
  • pyproj(用于坐标投影)

编译打包

使用PyInstaller打包为可执行文件:

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. 代码重构:减少重复代码,提高模块化和可维护性。