三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

ORB-SLAM3数据集测试全流程:从EuRoC MH01下载到成功运行可视化

ORB-SLAM3数据集测试全流程:从EuRoC MH01下载到成功运行可视化

ORB-SLAM3实战指南:EuRoC数据集测试与可视化全解析

当你在Ubuntu 20.04上成功编译ORB-SLAM3后,最令人兴奋的时刻莫过于看到这个强大的视觉SLAM系统在真实数据集上运行起来。本文将带你完整走通从数据集获取到可视化结果的全流程,重点解决三个关键痛点:数据集下载慢、路径配置混乱和可视化结果解读。

1. EuRoC数据集获取与预处理

1.1 官方与备用下载方案

EuRoC数据集由苏黎世联邦理工学院(ETH)发布,包含11个序列的视觉惯性数据。官方下载地址为:

https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

但实际下载时会遇到两个典型问题:

  • 国际带宽限制导致下载速度极慢(通常<100KB/s)
  • 部分序列需要学术邮箱验证

高效解决方案:

  1. 使用国内镜像源(如清华TUNA)的离线包
  2. 通过百度云分享链接获取预处理好的数据(示例链接需替换为有效资源):
    链接:https://pan.baidu.com/s/1xxxxxx 提取码:yyyy

1.2 数据集目录结构解析

下载后的MH01典型结构如下:

mav0/ ├── cam0/ # 左目相机 │ ├── data/ # 图像序列 │ └── sensor.yaml # 相机参数 ├── cam1/ # 右目相机(立体配置) ├── imu0/ # IMU数据 └── state_groundtruth_estimate0/ # 真值轨迹

关键文件说明:

  • sensor.yaml:包含相机内参和畸变系数
  • data/目录下的图片命名采用时间戳格式(如1403715273562143104.png)
  • imu0/data.csv记录IMU的加速度计和陀螺仪测量值

2. 环境配置与脚本修改

2.1 数据集路径规划

推荐的项目目录结构:

ORB_SLAM3/ ├── build/ ├── Examples/ ├── Vocabulary/ └── dataset/ # 自定义数据集目录 └── MH01/ └── mav0/ # 解压后的数据

2.2 修改euroc_examples.sh脚本

原始脚本中的路径变量pathDatasetEuroc需要适配你的本地路径。以MH01单目运行为例:

# 原始指令(需修改) ./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono # 修改后指令(假设数据集放在../dataset) ./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ../dataset/MH01/mav0 ./Monocular/EuRoC_TimeStamps/MH01.txt

关键修改点:

  1. 移除$pathDatasetEuroc变量,直接使用相对路径
  2. 确保路径指向包含mav0的层级(多数错误源于路径层级不对)
  3. 最后一个参数dataset-MH01_mono为可选输出名称,可删除

2.3 时间戳文件验证

检查Examples/Monocular/EuRoC_TimeStamps/MH01.txt内容格式应为:

1403715273262143104 1403715273362143104 ...

常见问题:

  • 时间戳文件与图像数量不匹配
  • 时间戳单位不一致(ORB-SLAM3需要纳秒级时间戳)

3. 运行与可视化监控

3.1 启动命令执行

在ORB_SLAM3/Examples目录下执行:

chmod +x euroc_examples.sh ./euroc_examples.sh

或直接运行单目示例:

./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ../dataset/MH01/mav0 ./Monocular/EuRoC_TimeStamps/MH01.txt

3.2 终端输出解读

成功运行的典型输出包含以下关键阶段:

1. Loading ORB Vocabulary... (约5秒) 2. Camera Parameters: - fx: 435.204 - fy: 435.204 - k1: -0.283408 3. Initialization... 4. Tracking started with 1503 features 5. New Map created with 120 points 6. Mean tracking time: 12.3ms

异常情况处理:

  • Segmentation fault:检查OpenCV版本是否冲突(推荐3.4.x)
  • No such file or directory:确认数据集路径包含mav0层级
  • IMU data not found:检查imu0目录下data.csv是否存在

3.3 Pangolin可视化分析

成功运行后会弹出三个窗口:

  1. 主窗口:实时显示相机位姿和地图点

    • 绿色点:当前帧匹配的特征点
    • 红色点:历史地图点
    • 蓝色线:相机运动轨迹
  2. 帧窗口:显示当前帧的特征匹配

    • 绿色圆圈:ORB特征点位置
    • 红色线段:特征匹配关系
  3. 轨迹窗口:显示优化后的运动轨迹

    • 黑色线:估计轨迹
    • 绿色线:地面真值(如果提供)

操作技巧:

  • 鼠标拖动可旋转观察视角
  • 空格键暂停/继续播放
  • s键保存当前轨迹为TUM格式

4. 性能优化与调试技巧

4.1 参数调优建议

修改Examples/Monocular/EuRoC.yaml中的关键参数:

参数默认值优化建议影响
nFeatures20001000-3000特征点数量
scaleFactor1.21.1-1.3金字塔尺度
fps20实际帧率时间戳对齐
ThDepth35根据场景调整深度阈值

4.2 常见问题解决方案

  1. 轨迹漂移严重:

    • 检查时间戳同步
    • 尝试启用IMU(使用Stereo-Inertial模式)
  2. 初始化失败:

    • 修改EuRoC.yaml中的iniThFAST和minThFAST降低特征点阈值
    • 确保场景有足够纹理
  3. 实时性差:

    • 在build.sh中添加-DCMAKE_BUILD_TYPE=Release
    • 减少nFeatures到1000左右

4.3 轨迹评估方法

使用evo工具评估轨迹精度:

# 安装evo pip install evo --upgrade --no-binary evo # 评估绝对位姿误差 evo_ape tum groundtruth.txt estimated.txt -va --plot

输出指标解读:

  • RMSE:均方根误差(越小越好)
  • median:中值误差
  • max:最大误差

记得在运行前先确保ORB-SLAM3的输出轨迹与真值时间对齐。如果遇到初始化失败的情况,可以尝试在简单场景下先测试系统基础功能是否正常

← 返回列表