保姆级避坑指南:在Ubuntu 20.04/22.04上搞定ORBSLAM3和TUM RGBD数据集(从依赖到运行)

张开发
2026/5/10 10:28:44 15 分钟阅读

分享文章

保姆级避坑指南:在Ubuntu 20.04/22.04上搞定ORBSLAM3和TUM RGBD数据集(从依赖到运行)
保姆级避坑指南在Ubuntu 20.04/22.04上搞定ORBSLAM3和TUM RGBD数据集从依赖到运行引言视觉SLAM技术在机器人导航、增强现实等领域应用广泛ORBSLAM3作为当前最先进的开源视觉SLAM系统之一因其支持单目、双目和RGB-D相机而备受关注。然而对于刚接触SLAM的研究人员和开发者来说在Ubuntu系统上配置ORBSLAM3并运行TUM RGBD数据集往往充满挑战。本文将分享我在多次安装过程中积累的实战经验重点解决那些官方文档没有明确说明、但实际安装时必然会遇到的坑。1. 系统准备与环境配置1.1 Ubuntu版本选择与基础设置ORBSLAM3对Ubuntu 20.04和22.04都有良好支持但两者在依赖库版本上存在差异。建议新手选择Ubuntu 20.04 LTS因为其软件库更稳定社区支持更完善。关键操作# 更新系统软件包列表 sudo apt update sudo apt upgrade -y # 安装基础开发工具 sudo apt install -y build-essential cmake git wget unzip注意避免使用root用户直接编译项目这可能导致权限问题。建议创建普通用户并添加到sudo组。1.2 编译器配置ORBSLAM3需要C11或更高版本支持。虽然Ubuntu默认安装gcc/g但版本可能不符合要求。验证编译器版本gcc --version g --version如果版本低于7.0需要手动安装新版sudo apt install -y gcc-9 g-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 sudo update-alternatives --install /usr/bin/g g /usr/bin/g-9 902. 关键依赖安装与避坑指南2.1 Pangolin安装可视化工具的陷阱Pangolin是ORBSLAM3的可视化工具但安装过程最容易出问题。常见错误1缺少GLFW后端支持# 完整依赖安装比官方文档更全面 sudo apt install -y libglew-dev libboost-dev libgl1-mesa-dev \ libwayland-dev libxkbcommon-dev wayland-protocols \ libegl1-mesa-dev libpng-dev libjpeg-dev常见错误2编译时找不到Python.h# 确保安装Python开发头文件 sudo apt install -y python3-dev推荐安装方式git clone --recursive https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make -j$(nproc) sudo make install2.2 OpenCV版本选择与安装ORBSLAM3官方推荐OpenCV 3.4但Ubuntu 20.04/22.04默认仓库中的版本可能不兼容。解决方案1从源码编译OpenCV 3.4.16wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.16.zip unzip opencv.zip cd opencv-3.4.16 mkdir build cd build cmake -D CMAKE_BUILD_TYPERelease -D CMAKE_INSTALL_PREFIX/usr/local .. make -j$(nproc) sudo make install解决方案2使用OpenCV 4.x的兼容模式# 在编译ORBSLAM3时添加以下CMake选项 -DOpenCV_DIR/usr/local/lib/cmake/opencv4重要提示安装后运行pkg-config --modversion opencv验证版本如果显示错误可能需要手动设置PKG_CONFIG_PATHexport PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH3. ORBSLAM3源码编译与调试3.1 源码获取与准备避免的坑直接克隆主分支可能导致编译失败git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3 git checkout tags/v1.0 # 使用稳定版本3.2 编译过程中的常见错误错误1Eigen3头文件路径问题# 解决方案手动指定Eigen3路径 sudo cp -r /usr/include/eigen3/Eigen /usr/local/include错误2链接时找不到DBoW2或g2o库# 修改ORB_SLAM3/CMakeLists.txt添加 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /usr/local/lib)优化编译使用多核加速./build.sh -j$(nproc) # 替代简单的./build.sh4. TUM RGBD数据集运行全流程4.1 数据集下载与准备推荐下载方式wget https://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_desk.tgz tar xzf rgbd_dataset_freiburg1_desk.tgz目录结构要求ORB_SLAM3/ ├── Examples/ ├── Vocabulary/ └── rgbd_dataset_freiburg1_desk/ ├── rgb/ ├── depth/ ├── rgb.txt └── depth.txt4.2 时间戳对齐脚本的改进版官方提供的associate.py在处理大文件时可能内存不足改进版本# associate_improved.py import argparse import numpy as np def read_timestamps(filename): 更高效的时间戳读取方式 timestamps [] with open(filename) as f: for line in f: if line.strip() and not line.startswith(#): timestamps.append(float(line.split()[0])) return np.array(timestamps) # ...其余部分与原始脚本类似但使用numpy优化匹配算法运行命令python3 associate_improved.py rgb.txt depth.txt associations.txt4.3 实战运行与参数调整基础运行命令./Examples/RGB-D/rgbd_tum \ Vocabulary/ORBvoc.txt \ Examples/RGB-D/TUM1.yaml \ rgbd_dataset_freiburg1_desk \ rgbd_dataset_freiburg1_desk/associations.txt常见问题解决轨迹漂移严重尝试调整ORB特征点数量# 修改TUM1.yaml中的 ORBextractor.nFeatures: 2000运行时卡顿关闭实时可视化./Examples/RGB-D/rgbd_tum ... -no-viewer内存不足限制地图大小# 在TUM1.yaml中添加 System.MapSize: 1005. 高级调试与性能优化5.1 GDB调试技巧当ORBSLAM3崩溃时使用gdb获取更多信息gdb --args ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml dataset associations.txt (gdb) run (gdb) bt # 查看调用栈5.2 性能分析工具使用perf分析热点函数perf record ./Examples/RGB-D/rgbd_tum ... perf report5.3 多数据集批量测试脚本创建run_all_datasets.sh自动化测试#!/bin/bash DATASETS(freiburg1_desk freiburg1_room freiburg2_pioneer_slam) for dataset in ${DATASETS[]}; do echo Processing $dataset... python3 associate_improved.py ${dataset}/rgb.txt ${dataset}/depth.txt ${dataset}/associations.txt ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml $dataset ${dataset}/associations.txt | tee ${dataset}_log.txt done6. 扩展应用与进阶建议6.1 使用ROS封装ORBSLAM3创建ROS包catkin_create_pkg orbslam3_ros roscpp std_msgs sensor_msgs image_transport cv_bridge修改CMakeLists.txtfind_package(ORB_SLAM3 REQUIRED) include_directories(${ORB_SLAM3_INCLUDE_DIRS}) add_executable(orbslam3_ros_node src/orbslam3_ros_node.cpp) target_link_libraries(orbslam3_ros_node ${ORB_SLAM3_LIBRARIES})6.2 自定义特征提取参数在TUM1.yaml中调整ORB参数ORBextractor.nFeatures: 1500 # 特征点数量 ORBextractor.scaleFactor: 1.2 # 金字塔缩放因子 ORBextractor.nLevels: 8 # 金字塔层数 ORBextractor.iniThFAST: 20 # 初始FAST阈值 ORBextractor.minThFAST: 7 # 最小FAST阈值6.3 使用IMU数据的扩展配置对于包含IMU的数据集如EuRoC需要额外配置IMU.NoiseGyro: 1.7e-4 IMU.NoiseAcc: 2.0e-3 IMU.GyroWalk: 1.9393e-05 IMU.AccWalk: 3.0e-03 IMU.Frequency: 2007. 实际项目中的经验分享在多个机器人项目中使用ORBSLAM3后我发现以下几点特别值得注意环境光照变化在光线剧烈变化的场景中建议启用ORB-SLAM3的自动曝光补偿功能Viewer.enableAutoExposure: true动态物体干扰对于室内服务机器人场景可以开启动态特征过滤// 在System.cc中修改 mpTracker-EnableDynamicObjectFiltering(true);长期运行优化连续运行超过1小时后建议定期保存和重载地图以避免内存泄漏# 运行时按CtrlC触发安全退出并保存地图 ./Examples/RGB-D/rgbd_tum ... -map-save map.bin跨平台部署将训练好的ORB词汇表转换为二进制格式可加速加载ORB_SLAM3::ORBVocabulary vocab; vocab.loadFromTextFile(ORBvoc.txt); vocab.saveToBinaryFile(ORBvoc.bin);实时性能调优在Jetson等嵌入式设备上可以通过以下设置提升性能ORBextractor.nFeatures: 1000 Viewer.enable: false System.activateLocalizationMode: true # 仅定位模式

更多文章