保姆级教程:在Ubuntu 20.04上从源码编译ORB-SLAM3(附完整依赖安装与常见错误修复)
从零构建ORB-SLAM3:Ubuntu 20.04源码编译全指南与深度避坑手册
当你在深夜的显示器前第三次看到make命令抛出红色错误时,或许会想起第一次听说ORB-SLAM3这个开源视觉SLAM方案时的兴奋。作为当前最先进的单目/双目/RGB-D SLAM系统之一,ORB-SLAM3在学术界和工业界都展现出惊人的潜力——直到你真正开始部署它。本文将带你穿越依赖地狱和编译陷阱,用工业级的严谨流程,在Ubuntu 20.04上构建出稳定运行的ORB-SLAM3环境。
1. 环境准备:构建编译堡垒
1.1 系统基础配置
在开始之前,建议先执行以下命令更新系统基础组件:
sudo apt update && sudo apt upgrade -y sudo apt install build-essential cmake git wget unzip -y这些基础工具链就像手术器械,缺一不可。特别提醒:
- 确保
cmake版本≥3.16(ORB-SLAM3的最低要求) build-essential包含GCC/G++编译器,这是后续所有编译的基础
注意:如果之前尝试过安装但失败,建议先彻底清理残留文件:
sudo apt autoremove --purge libopencv* eigen3*
1.2 关键依赖矩阵
ORB-SLAM3依赖的库之间存在复杂的版本关系,下表列出了经过验证的稳定组合:
| 依赖库 | 推荐版本 | 安装方式 | 关键作用域 |
|---|---|---|---|
| OpenCV | 4.2.0 | 源码编译 | 图像处理基础 |
| Eigen | 3.3.7 | apt安装 | 矩阵运算核心 |
| Pangolin | 0.8 | 源码编译 | 可视化界面 |
| DBoW2 | 最新版 | ORB-SLAM3自带 | 词袋模型 |
| g2o | 20200410 | ORB-SLAM3自带 | 图优化后端 |
2. 依赖库精准安装:避开版本雷区
2.1 OpenCV编译的艺术
OpenCV是最大的痛点来源。建议使用以下脚本进行标准化安装:
# 下载指定版本 wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip unzip opencv.zip && unzip opencv_contrib.zip # 编译配置 cd opencv-4.2.0 mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.2.0/modules \ -D WITH_CUDA=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D BUILD_EXAMPLES=OFF ..关键参数解析:
WITH_CUDA=OFF:除非确需CUDA加速,否则关闭可减少问题OPENCV_ENABLE_NONFREE=ON:启用SIFT/SURF等算法-j$(nproc):make时使用此参数加速编译
2.2 Eigen版本控制
虽然Ubuntu 20.04默认仓库的Eigen版本(3.3.7)可以工作,但需要特别注意:
sudo apt install libeigen3-dev # 验证版本 pkg-config --modversion eigen3若遇到/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h:438: error: static assertion failed这类错误,可能需要降级到3.2.10。
3. ORB-SLAM3源码编译:手术级操作
3.1 源码获取与准备
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3 chmod +x build.sh在运行build.sh前,必须修改CMakeLists.txt:
- 在
project(ORB_SLAM3)后添加:set(CMAKE_CXX_STANDARD 14) add_compile_options(-std=c++14) - 检查OpenCV路径设置:
find_package(OpenCV 4 REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS})
3.2 编译过程中的急诊方案
当遇到Package opencv was not found错误时,按以下步骤创建opencv.pc:
sudo mkdir -p /usr/local/lib/pkgconfig sudo nano /usr/local/lib/pkgconfig/opencv.pc文件内容模板:
prefix=/usr/local exec_prefix=${prefix} includedir=${prefix}/include/opencv4 libdir=${exec_prefix}/lib Name: OpenCV Description: Open Source Computer Vision Library Version: 4.2.0 Libs: -L${libdir} -lopencv_core -lopencv_highgui [...其他库] Cflags: -I${includedir}保存后执行:
sudo ldconfig pkg-config --modversion opencv # 验证配置4. 高级调优与性能适配
4.1 内存受限设备优化
对于树莓派/Jetson等设备,需要修改编译参数:
# 在CMakeLists.txt中添加 add_definitions(-D__ARM_NEON__) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -mtune=cortex-a72")同时建议:
- 关闭Pangolin可视化界面(修改
build.sh) - 使用
-j2而非-j$(nproc)限制编译线程
4.2 多版本共存管理
当系统需要多个OpenCV版本时,推荐使用符号链接方案:
sudo ln -s /usr/local/lib/pkgconfig/opencv.pc /usr/lib/x86_64-linux-gnu/pkgconfig/ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH验证环境变量:
echo $PKG_CONFIG_PATH pkg-config --variable=includedir opencv5. 验证与调试:从理论到实践
编译成功后,使用TUM数据集验证:
./Examples/Monocular/mono_tum \ Vocabulary/ORBvoc.txt \ Examples/Monocular/TUM1.yaml \ /path/to/rgbd_dataset_freiburg1_room常见运行时报错解决方案:
- 段错误(Segmentation fault):检查数据集路径权限
- 找不到Vocabulary:确认ORBvoc.txt路径(建议使用绝对路径)
- GLFW错误:重新安装Pangolin并启用
-D BUILD_PANGOLIN_GLFW=ON
在成功运行的系统中,你会看到实时构建的三维点云地图——这是对之前所有努力的最佳回报。记得在首次运行时按Tab键调出Pangolin的控制面板,调整视图参数获得最佳观察效果。
