从零开始玩转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_kitti、dso_euroc等可执行文件,说明编译成功!
🚀 实战教程:三大数据集运行指南
LDSO支持Kitti、EuRoC和TUM Mono等主流SLAM数据集。下面分别介绍各数据集的配置方法和运行步骤。
Kitti数据集运行教程
Kitti数据集是自动驾驶领域最常用的视觉里程计评测数据集,包含大量城市和高速公路场景的立体图像序列。
数据集准备
- 下载Kitti数据集(官网地址)
- 解压到本地目录,例如
/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.txtpreset: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函数的处理流程,包括初始化检查、位姿跟踪、关键帧处理和后端优化等步骤
💡 常见问题与优化建议
编译问题解决
- 缺少依赖库:确保所有依赖库已安装,可重新运行
install_dependencies.sh - 编译耗时过长:可修改
make_project.sh中的NUM_PROC参数,使用更多CPU核心编译 - 第三方库编译失败:尝试手动进入
thirdparty目录单独编译问题库
运行优化建议
- 提升运行速度:使用
preset=2参数启用快速模式,降低图像分辨率和特征点数量 - 改善回环检测:确保词汇表文件路径正确,默认位于vocab/orbvoc.dbow3
- 调整参数设置:修改
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),仅供参考