KITTI数据集改造实战:用rosbag_filter_gui和merge_bags.py打造你的专属100Hz IMU融合数据集

张开发
2026/4/17 1:31:22 15 分钟阅读

分享文章

KITTI数据集改造实战:用rosbag_filter_gui和merge_bags.py打造你的专属100Hz IMU融合数据集
KITTI数据集深度定制构建100Hz IMU融合数据集的完整实战指南在自动驾驶和机器人定位领域KITTI数据集一直是算法验证的黄金标准。但当我们试图评估基于滤波的多传感器融合算法时标准数据集中的10Hz IMU数据往往成为性能瓶颈。本文将带你从零开始通过rosbag_filter_gui和merge_bags.py等工具打造一个包含100Hz IMU、去畸变图像和激光点云的增强版数据集。1. 理解KITTI数据集的局限与改造需求标准KITTI数据集提供两种数据格式sync同步去畸变数据和extract原始高频数据。sync数据集虽然提供了经过校准和时间对齐的多传感器数据但IMU频率仅有10Hz这对于需要高频惯性测量的滤波算法如EKF、UKF来说远远不够。关键差异对比特性sync数据集extract数据集IMU频率10Hz100Hz图像处理去畸变原始数据时间对齐已同步未同步数据完整性精选片段完整记录提示extract数据集中的IMU数据虽然频率高但缺少相机去畸变处理直接使用会影响视觉算法的精度。2. 环境准备与工具链配置2.1 基础环境搭建首先确保系统已安装ROS推荐Melodic或Noetic版本和Python 2.7环境KITTI官方工具依赖sudo apt-get install python-pip python-qt4 ros-distro-rosbag ros-distro-tf2-msgs pip install pykitti numpy pandas2.2 必备工具获取需要准备三个核心工具rosbag_filter_gui可视化过滤工具merge_bags.py智能合并脚本kitti2bag数据集转换工具# 创建工作空间 mkdir -p ~/kitti_ws/src cd ~/kitti_ws/src # 获取工具 git clone https://github.com/AtsushiSakai/rosbag_filter_gui.git git clone https://github.com/geyuyuan/kitti2bag.git wget https://raw.githubusercontent.com/geyuyuan/kitti_utils/master/merge_bags.py3. 数据获取与预处理3.1 下载原始数据集从KITTI官网获取两个关键数据集2011_10_03_drive_0027_sync去畸变数据2011_10_03_drive_0027_extract高频IMU数据# 示例下载命令实际需替换为官网链接 wget http://kitti.is.tue.mpg.de/kitti/raw_data/2011_10_03_drive_0027/2011_10_03_drive_0027_sync.zip wget http://kitti.is.tue.mpg.de/kitti/raw_data/2011_10_03_drive_0027/2011_10_03_drive_0027_extract.zip3.2 数据重组策略执行以下关键操作将extract中的oxts文件夹重命名为oxts_extract复制到sync目录下将原sync中的oxts重命名为oxts_sync2011_10_03_drive_0027_sync/ ├── image_00 ├── oxts_sync/ # 原sync数据 └── oxts_extract/ # 新增extract数据注意此步骤确保两种数据源共存于同一目录结构为后续处理奠定基础。4. 时间戳修复与数据转换4.1 运行时间戳修复脚本GEYAO提供的scripts.py能自动处理时间戳异常# 示例脚本核心逻辑 def fix_timestamps(base_dir, drive): # 读取sync和extract的时间戳 sync_times load_timestamps(os.path.join(base_dir, oxts_sync)) extract_times load_timestamps(os.path.join(base_dir, oxts_extract)) # 线性插值对齐时间戳 aligned_times interpolate_timestamps(sync_times, extract_times) # 生成新的oxts文件夹 save_aligned_data(aligned_times, os.path.join(base_dir, oxts))运行命令python2 scripts.py -i 2011_10_03_drive_0027_sync4.2 生成ROS bag文件使用改造后的kitti2bag.py转换数据python2 kitti2bag.py -t 2011_10_03 -r 0027 raw_synced关键参数说明-t日期标签-r行驶编号raw_synced使用我们改造后的数据格式5. 精细化数据过滤与合并5.1 使用rosbag_filter_gui进行智能过滤启动GUI工具python2 rosbag_filter_gui.py过滤策略建议对sync.bag保留所有图像和点云topic删除/tf和/tf_static避免与extract数据冲突对extract.bag仅保留IMU和GPS相关topic特别保留高频/kitti/oxts/imu数据5.2 Topic重命名技巧为避免合并时的命名冲突需要重命名extract的topicrosrun rosbag topic_renamer.py /kitti/oxts/imu extracted_filtered.bag /kitti/oxts/imu/extract extracted_filtered2.bag rosrun rosbag topic_renamer.py /kitti/oxts/gps/fix extracted_filtered2.bag /kitti/oxts/gps/fix/extract extracted_filtered3.bag5.3 智能合并数据流使用merge_bags.py进行最终合并python2 merge_bags.py 2011_10_03_filtered.bag synced_filtered.bag extracted_filtered4.bag合并效果验证rostopic hz /kitti/oxts/imu/extract # 应显示100Hz rostopic hz /kitti/camera_color_left/image_raw # 应保持10Hz6. 高级技巧与问题排查6.1 数据同步质量检查建议使用rqt工具可视化检查时间对齐情况rqt_bag 2011_10_03_filtered.bag常见问题处理时间戳跳跃检查scripts.py是否正确处理了原始时间戳话题丢失确认过滤时没有误删关键topic频率异常验证extract数据是否完整下载6.2 性能优化建议对于大型bag文件可以考虑使用--chunksize参数控制内存使用先分割处理再合并采用SSD存储加速读写# 示例分割处理 rosbag filter large.bag small.bag t.secs 1317617734 and t.secs 13176180007. 实际应用与算法验证改造后的数据集特别适合以下场景紧耦合的VIO算法100Hz IMU10Hz图像多传感器标定提供精确的时间对齐数据SLAM系统评估通过evo工具计算轨迹误差典型评估命令evo_ape kitti ground_truth.txt estimated.txt -va --plot在完成数据集改造后我发现最耗时的环节往往是数据下载和初步验证。建议在开始前确保网络连接稳定数据集总大小约25GB预留足够的磁盘空间建议50GB以上建立完整的数据处理日志方便问题追踪

更多文章