Apollo2NuScenes数据转换工具概要设计

Apollo2NuScenes数据转换工具概要设计

1. 概述

1.1 设计目标

本工具旨在将Apollo Record格式的传感器数据转换为NuScenes数据集格式,同时将点云检测模型生成的障碍物信息作为标注,为后续的自动驾驶感知模型训练和验证提供标准化数据。

1.2 工具功能

  • 将Apollo Record中的多相机图像、激光雷达点云数据转换为NuScenes格式
  • 处理相机图像的去畸变和裁剪,确保图像质量
  • 基于时间戳同步多传感器数据
  • 将障碍物检测结果转换为NuScenes标注格式
  • 生成符合NuScenes规范的JSON元数据文件

2. 系统架构与原理

2.1 核心组件

组件名称 职责
Config 存储全局配置参数,如传感器映射关系、目标分辨率等
Buffer 缓存和检索时间戳相关的数据,支持数据同步
Apollo2NuScenesConverter 核心转换逻辑,处理数据读取、转换和保存

2.2 数据流分析

  1. 数据输入:Apollo Record文件,包含相机图像、激光雷达点云和障碍物检测结果
  2. 数据处理
    • 消息解析与缓存
    • 时间戳同步
    • 图像去畸变与裁剪
    • 点云数据处理
    • 障碍物标注转换
  3. 数据输出 :符合NuScenes格式的数据集,包括:
    • 图像文件(.jpg)
    • 点云文件(.pcd.bin)
    • 元数据文件(.json)

2.3 关键原理

  1. 时间同步原理

    • 使用Buffer类缓存传感器数据,基于时间戳进行最近邻匹配
    • 确保同一时间戳下的多传感器数据被关联到同一个样本
  2. 坐标系转换原理

    • 构建传感器间的变换树,基于外参计算不同坐标系间的转换
    • 将传感器数据统一转换到世界坐标系
  3. 图像去畸变原理

    • 使用OpenCV的fisheye模块进行鱼眼相机图像去畸变
    • 基于相机内参和ROI进行图像裁剪和缩放
  4. 数据格式转换原理

    • 将Apollo的传感器数据格式转换为NuScenes格式
    • 将Apollo的障碍物类型映射到NuScenes的类别体系

3. 详细设计

3.1 配置模块

3.1.1 Config类
  • 目标分辨率设置:定义输出图像的目标宽度和高度
  • 传感器映射:建立Apollo传感器话题与NuScenes传感器名称的映射关系
  • 置信度阈值:设置障碍物检测结果的过滤阈值

3.2 缓存模块

3.2.1 Buffer类
  • 数据添加:使用二分查找保持时间戳有序,确保高效插入
  • 数据检索:基于时间戳查找最近邻数据,支持数据同步
  • 缓存管理:自动清理过期数据,优化内存使用

3.3 核心转换模块

3.3.1 Apollo2NuScenesConverter类
3.3.1.1 初始化与准备
  • 创建输出目录结构
  • 加载预定义的JSON文件
  • 初始化数据结构和缓冲区
3.3.1.2 传感器校准
  • 加载传感器外参
  • 构建变换树
  • 计算传感器到世界坐标系的转换
  • 生成校准传感器信息
3.3.1.3 消息处理
  • 解析CAN总线消息,获取车辆状态
  • 解析相机图像数据,进行缓存
  • 解析激光雷达点云数据,进行缓存
  • 解析位姿数据,构建世界坐标系转换
3.3.1.4 障碍物处理与数据同步
  • 基于障碍物消息时间戳同步多传感器数据
  • 过滤低置信度障碍物
  • 生成障碍物标注信息
  • 关联实例ID,构建实例跟踪
3.3.1.5 数据保存
  • 保存处理后的图像和点云数据
  • 生成符合NuScenes格式的元数据文件
  • 构建场景、样本、标注等数据结构

4. 工作流程

4.1 整体流程

  1. 初始化阶段

    • 解析命令行参数
    • 初始化Cyber框架
    • 创建转换器实例
    • 构建传感器校准信息
  2. 数据处理阶段

    • 读取Record文件
    • 解析并缓存传感器消息
    • 处理障碍物数据,同步传感器数据
    • 生成样本和标注信息
  3. 数据保存阶段

    • 保存处理后的传感器数据
    • 生成NuScenes格式的元数据文件
    • 关闭Cyber框架

4.2 详细流程





启动程序
解析命令行参数
初始化Cyber框架
创建转换器实例
创建传感器校准信息
读取Record文件
解析传感器消息
是否是障碍物消息?
处理障碍物数据
缓存传感器数据
同步多传感器数据
生成样本和标注
达到最大处理数量?
保存数据
关闭Cyber框架
结束

5. 数据结构

5.1 输入数据结构

  • Apollo Record文件:包含多种传感器消息
  • 传感器外参文件:YAML格式,定义传感器间的位置关系
  • 相机内参文件:YAML格式,定义相机的内参和ROI

5.2 输出数据结构

5.2.1 目录结构
复制代码
out_dir/
├── can_bus/          # 车辆状态数据
└── nuscenes/
    ├── samples/      # 传感器数据
    │   ├── CAM_BACK/        # 后相机图像
    │   ├── CAM_BACK_LEFT/   # 左后相机图像
    │   ├── CAM_BACK_RIGHT/  # 右后相机图像
    │   ├── CAM_FRONT/       # 前相机图像
    │   ├── CAM_FRONT_LEFT/  # 左前相机图像
    │   ├── CAM_FRONT_RIGHT/ # 右前相机图像
    │   └── LIDAR_TOP/       # 激光雷达点云
    ├── sweeps/       # 预留目录
    └── v1.0-mini/    # 元数据文件
        ├── attribute.json       # 属性定义
        ├── calibrated_sensor.json # 传感器校准信息
        ├── category.json        # 类别定义
        ├── ego_pose.json        # 车辆位姿
        ├── instance.json        # 实例信息
        ├── log.json             # 日志信息
        ├── map.json             # 地图信息
        ├── sample.json          # 样本信息
        ├── sample_annotation.json # 标注信息
        ├── sample_data.json     # 样本数据信息
        ├── scene.json           # 场景信息
        ├── sensor.json          # 传感器信息
        └── visibility.json      # 可见性定义
5.2.2 核心元数据结构
  • scene.json:场景信息,包含场景的起始和结束样本
  • sample.json:样本信息,每个样本对应一个时间戳
  • sample_data.json:传感器数据信息,关联样本和传感器数据文件
  • sample_annotation.json:标注信息,包含障碍物的位置、大小、类别等
  • instance.json:实例信息,跟踪障碍物在不同样本中的出现

6. 接口设计

6.1 命令行接口

bash 复制代码
python apollo2nuscenes.py <record_path>
  • record_path:Apollo Record文件所在目录

6.2 主要类接口

6.2.1 Apollo2NuScenesConverter类
  • **init(record_path, output_dir, perception_params)**:初始化转换器
  • create_calibrated_sensor():创建传感器校准信息
  • process_samples():处理样本数据
6.2.2 Buffer类
  • add(timestamp, data):添加数据到缓冲区
  • get_nearest(target_timestamp):获取最近邻数据

7. 性能与优化

7.1 内存优化

  • 缓存管理:自动清理过期数据,控制内存使用
  • 数据处理:采用流式处理,避免一次性加载全部数据

7.2 时间优化

  • 二分查找:使用二分查找提高时间戳查找效率
  • 并行处理:对多传感器数据的处理可考虑并行化

7.3 存储优化

  • 数据压缩:对图像数据进行适当压缩
  • 格式选择:选择高效的点云存储格式

8. 错误处理与容错

8.1 错误处理

  • 文件不存在:检查输入文件和参数的有效性
  • 传感器数据缺失:当某传感器数据缺失时,跳过该样本
  • 外参获取失败:当无法获取传感器外参时,记录警告并继续处理

8.2 容错机制

  • 时间同步容错:允许一定的时间同步误差
  • 数据质量容错:对低质量传感器数据进行过滤

9. 测试与验证

9.1 功能测试

  • 数据格式验证:确保输出数据符合NuScenes格式规范
  • 传感器同步验证:验证同一时间戳下的多传感器数据一致性
  • 标注转换验证:验证障碍物标注的准确性和完整性

9.2 性能测试

  • 处理速度:测试不同规模数据的处理速度
  • 内存使用:监控处理过程中的内存使用情况

9.3 验证方法

  • 可视化验证:使用NuScenes SDK可视化转换后的数据
  • 统计验证:对比转换前后的数据量和分布

10. 总结与展望

10.1 总结

  • 本工具实现了Apollo Record到NuScenes数据集的完整转换流程
  • 支持多传感器数据同步、图像去畸变、坐标系转换等功能
  • 生成符合NuScenes格式规范的数据,可直接用于模型训练和验证

10.2 展望

  • 扩展传感器支持:增加对更多传感器类型的支持
  • 优化处理速度:进一步提高大规模数据的处理效率
  • 增强数据质量:添加数据质量评估和增强功能
  • 支持更多数据集格式:扩展支持其他常用数据集格式

11. 参考资料

  1. Apollo传感器数据格式文档
  2. NuScenes数据集格式文档
  3. OpenCV相机标定与去畸变文档
  4. Open3D点云处理文档
  5. Python性能优化指南
相关推荐
不做无法实现的梦~7 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
Ai1731639157913 小时前
2026年了,你认为AI会取代人类吗?欢迎留言讨论
大数据·图像处理·人工智能·深度学习·计算机视觉·自动驾驶·语音识别
王锋(oxwangfeng)2 天前
自动驾驶感知系统核心模块详解
人工智能·机器学习·自动驾驶
地平线开发者2 天前
征程 6 | power management sample
算法·自动驾驶
三克的油3 天前
ros-day4
人工智能·机器人·自动驾驶
康谋自动驾驶3 天前
2026年,3DGS和世界模型,在自动驾驶仿真中的组合应用
人工智能·3d·自动驾驶·仿真·3dgs·世界模型
田里的水稻3 天前
FA_融合和滤波(FF)-非线性卡尔曼滤波(EKF)
人工智能·数学建模·机器人·自动驾驶
田里的水稻3 天前
FA_融合和滤波(FF)-数据融合(0)
人工智能·数学建模·机器人·自动驾驶