从零开始玩转LDSO:3步快速部署与TUM/Kitti/EuRoC数据集实战教程

从零开始玩转LDSO:3步快速部署与TUM/Kitti/EuRoC数据集实战教程

【免费下载链接】LDSODSO with SIM(3) pose graph optimization and loop closure项目地址: https://gitcode.com/gh_mirrors/ld/LDSO

LDSO(Direct Sparse Odometry with Loop Closure)是一款基于直接法的视觉里程计系统,通过SIM(3)位姿图优化和回环检测技术,有效解决了传统单目SLAM的尺度漂移问题。本教程将带你快速掌握LDSO的环境搭建、编译配置和三大主流数据集的实战运行方法,让你轻松开启视觉SLAM之旅!

📋 准备工作:环境依赖与工具安装

在开始LDSO的部署前,需要确保系统已安装以下依赖库。这些组件将为LDSO提供数值计算、图像处理和优化求解等核心功能支持。

核心依赖库安装

打开终端执行以下命令,安装所有必要的系统依赖:

sudo apt-get install libeigen3-dev libgoogle-glog-dev libgtest-dev libsuitesparse-dev libopencv-dev libzip-dev libboost-all-dev

提示:以上命令适用于Ubuntu 16.04及以上系统,其他Linux发行版请参考对应包管理器进行安装。

获取LDSO源代码

通过Git克隆项目仓库到本地:

git clone https://gitcode.com/gh_mirrors/ld/LDSO cd LDSO

🔨 编译构建:3步完成LDSO项目编译

LDSO项目采用CMake构建系统,通过自动化脚本可以轻松完成编译过程。整个编译流程包括第三方库构建和主项目编译两个阶段。

第1步:运行依赖安装脚本

项目根目录下提供了依赖安装脚本,执行以下命令自动安装所需依赖:

chmod +x install_dependencies.sh ./install_dependencies.sh

第2步:执行编译脚本

项目提供了一键编译脚本make_project.sh,该脚本会依次编译第三方库(DBoW3、g2o)和主项目:

chmod +x make_project.sh ./make_project.sh

编译过程详解:

  • 脚本首先编译第三方库thirdparty/DBoW3(用于回环检测的词袋模型)
  • 接着编译thirdparty/g2o(图优化库,用于位姿优化)
  • 最后编译主项目,生成可执行文件

第3步:验证编译结果

编译完成后,在build目录下会生成可执行文件。通过以下命令验证是否编译成功:

ls build/

若看到dso_kittidso_euroc等可执行文件,说明编译成功!

🚀 实战教程:三大数据集运行指南

LDSO支持Kitti、EuRoC和TUM Mono等主流SLAM数据集。下面分别介绍各数据集的配置方法和运行步骤。

Kitti数据集运行教程

Kitti数据集是自动驾驶领域最常用的视觉里程计评测数据集,包含大量城市和高速公路场景的立体图像序列。

数据集准备
  1. 下载Kitti数据集(官网地址)
  2. 解压到本地目录,例如/path/to/kitti/dataset/sequences/00
运行命令

在项目根目录执行以下命令运行Kitti序列:

./build/examples/run_dso_kitti files=/path/to/kitti/dataset/sequences/00 calib=./examples/Kitti/Kitti00-02.txt preset=0

参数说明:

  • files:数据集序列路径
  • calib:相机内参文件,位于examples/Kitti/Kitti00-02.txt
  • preset:0表示默认设置,2表示快速模式

EuRoC数据集运行教程

EuRoC数据集由ETH Zurich提供,包含微型飞行器在室内环境采集的高频率图像和IMU数据,适合评估SLAM系统的精度和鲁棒性。

运行命令
./build/examples/run_dso_euroc files=/path/to/EuRoC/MH-01/mav0/cam0/data calib=./examples/EUROC/EUROC.txt mode=1

注意:EuRoC数据集没有光度标定,LDSO会自动估计光照参数a和b。

TUM Mono数据集运行教程

TUM Mono数据集包含单目相机在室内环境采集的序列,适合测试单目SLAM系统的性能。

运行命令
./build/examples/run_dso_tum_mono files=/path/to/tum/sequence calib=./examples/TUM/tum_calib.txt

📊 LDSO系统架构解析

LDSO系统采用模块化设计,主要由前端跟踪和后端优化两大部分组成。下图展示了LDSO的核心框架结构:

LDSO系统框架图:展示了从图像输入到位姿输出的完整流程,包括前端跟踪、后端优化和回环检测等模块

核心模块功能

  • CoarseInitializer:系统初始化模块,负责从初始图像对中估计相机位姿和场景结构
  • CoarseTracker:粗跟踪模块,通过图像金字塔进行快速位姿估计
  • FullSystem:系统主控制器,协调各模块工作,位于src/frontend/FullSystem.cc
  • EnergyFunctional:能量函数模块,构建优化问题,位于src/internal/OptimizationBackend/EnergyFunctional.cc
  • LoopClosing:回环检测模块,使用DBoW3词袋模型进行回环检测和位姿图优化

前端处理流程

LDSO的前端处理流程如下,展示了从图像输入到关键帧处理的完整步骤:

LDSO前端流程图:详细展示了AddActiveFrame函数的处理流程,包括初始化检查、位姿跟踪、关键帧处理和后端优化等步骤

💡 常见问题与优化建议

编译问题解决

  1. 缺少依赖库:确保所有依赖库已安装,可重新运行install_dependencies.sh
  2. 编译耗时过长:可修改make_project.sh中的NUM_PROC参数,使用更多CPU核心编译
  3. 第三方库编译失败:尝试手动进入thirdparty目录单独编译问题库

运行优化建议

  1. 提升运行速度:使用preset=2参数启用快速模式,降低图像分辨率和特征点数量
  2. 改善回环检测:确保词汇表文件路径正确,默认位于vocab/orbvoc.dbow3
  3. 调整参数设置:修改run_dso_*.cc文件中的参数,如setting_desiredPointDensity控制特征点数量

🎯 总结

通过本教程,你已经掌握了LDSO的环境搭建、编译配置和三大数据集的运行方法。LDSO作为一款高性能的直接法SLAM系统,在保持精度的同时具有较好的实时性,适合用于机器人导航、增强现实等领域的研究与应用。

后续可以深入研究LDSO的源代码,特别是src/frontend/FullSystem.cc中的主控制逻辑和src/internal/OptimizationBackend目录下的优化算法,进一步理解直接法SLAM的核心原理。

祝你在SLAM的学习之路上取得更多成果!🚀

【免费下载链接】LDSODSO with SIM(3) pose graph optimization and loop closure项目地址: https://gitcode.com/gh_mirrors/ld/LDSO

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考