news 2026/6/2 19:14:43

保姆级教程:在Ubuntu 20.04上从源码编译运行ORB-SLAM3(含ROS/非ROS版本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 20.04上从源码编译运行ORB-SLAM3(含ROS/非ROS版本)

从零构建ORB-SLAM3:Ubuntu 20.04全流程实战指南

当你第一次接触视觉SLAM系统时,最令人兴奋的莫过于看到自己编译的程序成功运行在真实数据集上。ORB-SLAM3作为当前最先进的视觉惯性SLAM框架之一,其多传感器支持能力和稳定的表现使其成为学习与研究的热门选择。本文将带你完整走过从环境配置到实际运行的每一步,无论你是希望快速验证算法效果的研究者,还是计划进行二次开发的工程师,这篇详尽的实践手册都能帮你避开那些新手常遇到的"坑"。

1. 环境准备与依赖安装

在开始编译ORB-SLAM3之前,我们需要确保系统具备所有必要的依赖项。Ubuntu 20.04作为长期支持版本,其软件包稳定性非常适合开发环境搭建。打开终端,首先更新软件源:

sudo apt update && sudo apt upgrade -y

1.1 基础编译工具链

ORB-SLAM3的构建需要现代C++工具链支持,安装以下核心组件:

sudo apt install -y build-essential cmake git libeigen3-dev

验证Eigen3安装是否成功:

pkg-config --modversion eigen3

正常应输出类似3.3.7的版本号

1.2 可视化与图像处理依赖

Pangolin是ORB-SLAM3的可视化界面基础,而OpenCV处理所有图像相关操作:

sudo apt install -y libopencv-dev libgl1-mesa-dev libglew-dev \ libpython2.7-dev libwayland-dev libxkbcommon-dev wayland-protocols

对于Pangolin,建议从源码编译最新版以确保兼容性:

git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin && mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) sudo make install

注意:如果系统已安装旧版Pangolin,建议先卸载以避免冲突

1.3 可选但推荐的优化工具

ORB-SLAM3使用g2o进行后端优化,安装这些工具可以提升性能:

sudo apt install -y libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev

2. ORB-SLAM3源码获取与配置

现在我们可以获取ORB-SLAM3的源代码并进行初步配置:

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 cd ORB_SLAM3 chmod +x build.sh

2.1 非ROS版本编译

对于不需要ROS集成的用户,直接运行构建脚本:

./build.sh

编译过程可能持续10-30分钟,取决于硬件性能。如果遇到问题,可以尝试:

make clean ./build.sh

2.2 ROS版本编译(可选)

如果需要ROS支持,确保已安装ROS Noetic并配置好工作空间:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src ln -s /path/to/ORB_SLAM3 . cd .. && catkin_make -j$(nproc)

提示:首次编译ROS版本时,建议先执行catkin_make而非catkin_make -j以便观察错误

3. 数据集准备与运行测试

ORB-SLAM3支持多种传感器配置,我们以最常用的EuRoC MAV数据集为例演示运行流程。

3.1 数据集下载与结构

从官网获取EuRoC数据集:

wget -P datasets http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_01_easy/V1_01_easy.zip unzip datasets/V1_01_easy.zip -d datasets/

典型数据集目录结构应包含:

  • mav0/cam0/data (图像序列)
  • mav0/imu0/data.csv (IMU数据)
  • mav0/state_groundtruth_estimate0/data.csv (真值)

3.2 单目+IMU模式运行

这是ORB-SLAM3最具特色的工作模式,执行命令:

./Examples/Monocular-Inertial/mono_inertial_euroc \ Vocabulary/ORBvoc.txt \ Examples/Monocular-Inertial/EuRoC.yaml \ datasets/V1_01_easy/mav0 \ Examples/Monocular-Inertial/EuRoC_TimeStamps/V101.txt

关键参数说明:

  • ORBvoc.txt: 预训练的词袋模型
  • EuRoC.yaml: 传感器配置文件
  • 最后两个参数分别指定数据集路径和时间戳

3.3 其他传感器模式示例

对于纯视觉版本,命令稍有不同:

双目模式:

./Examples/Stereo/stereo_euroc \ Vocabulary/ORBvoc.txt \ Examples/Stereo/EuRoC.yaml \ datasets/V1_01_easy/mav0 \ Examples/Stereo/EuRoC_TimeStamps/V101.txt

RGB-D模式:

./Examples/RGB-D/rgbd_tum \ Vocabulary/ORBvoc.txt \ Examples/RGB-D/TUM1.yaml \ datasets/rgbd_dataset_freiburg1_room \ Examples/RGB-D/associations/fr1_room.txt

4. 常见问题解决方案

即使按照步骤操作,仍可能遇到各种环境问题。以下是几个典型场景的解决方法。

4.1 依赖版本冲突

当系统存在多个OpenCV版本时,CMake可能选择错误版本。强制指定版本:

cmake .. -DOpenCV_DIR=/usr/local/share/OpenCV

或在CMakeLists.txt中添加:

find_package(OpenCV 4.2 REQUIRED)

4.2 Pangolin渲染问题

如果出现黑屏或渲染异常,尝试修改Pangolin的渲染后端:

export DISPLAY=:0 ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml datasets/rgbd_dataset_freiburg1_room

4.3 内存不足处理

大规模场景可能耗尽内存,两种优化方案:

  1. 降低特征点数量(修改yaml文件):
# ORB Parameters ORBextractor.nFeatures: 1000
  1. 使用轻量级词袋:
./build.sh minimal

5. 高级配置与性能调优

当基本功能运行正常后,可以通过调整参数获得更好性能。

5.1 关键参数对照表

参数项默认值调整建议影响范围
ORBextractor.nFeatures2000500-5000计算负载/精度
ThDepth35.0根据场景深度调整三维重建
KeyFrameCreation0.90.7-1.2系统响应速度
IMU.NoiseGyro1.7e-4校准设备后设置IMU融合效果

5.2 实时性能监控

添加以下代码到System.cc可以输出各线程耗时:

#include <chrono> auto start = std::chrono::high_resolution_clock::now(); // 你的代码段 auto end = std::chrono::high_resolution_clock::now(); std::cout << "耗时: " << std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count() << "ms" << std::endl;

5.3 多地图管理实践

ORB-SLAM3的多地图系统需要特别激活:

# 在yaml配置文件中添加 System.MultipleMaps: 1

运行时通过GUI的"New Map"按钮或程序接口切换地图。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 19:06:03

超越供应商SDK:为RK3568构建高性能Qt+QML开发环境的完整心路与配置

深度解锁RK3568的QtQML开发潜能&#xff1a;从硬件加速到团队协作的全链路实践当RK3568遇上Qt框架&#xff0c;这颗国产芯片的Mali-G52 GPU本应成为嵌入式GUI开发的利器。但现实情况是&#xff0c;许多开发团队发现官方提供的Qt SDK在QML渲染性能上表现糟糕——动画卡顿、界面响…

作者头像 李华
网站建设 2026/6/2 19:02:39

私人AI Agent搭建:让人人都拥有自己的数字员工

&#x1f916; 你干任何事情&#xff0c;都能拥有自己的AI Agent &#x1f4cc; 你是不是也觉得&#xff0c;每天有做不完的事&#xff1f; 想写文案&#xff0c;绞尽脑汁&#xff1b;想作图&#xff0c;技术有限&#xff1b;想学新技能&#xff0c;时间不够…… 如果有一个“数…

作者头像 李华
网站建设 2026/6/2 18:58:17

别再只看像素了!聊聊ADAS前视摄像头选型时,分辨率与帧率背后的那些‘隐形’成本

别再只看像素了&#xff01;ADAS前视摄像头选型中的隐性成本博弈当主机厂的采购部门拿着8MP摄像头的报价单皱起眉头时&#xff0c;工程师们正在会议室里争论着是否需要将帧率从30fps提升到60fps。这看似是技术参数的简单选择&#xff0c;实则是一场牵涉整个电子架构的成本博弈。…

作者头像 李华
网站建设 2026/6/2 18:57:33

从B站缓存到通用MP4:m4s-converter帮你轻松转换视频格式

从B站缓存到通用MP4&#xff1a;m4s-converter帮你轻松转换视频格式 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是不是也遇到过这样的情况…

作者头像 李华