告别build.sh:手动编译ORB-SLAM3详解,在Ubuntu 20.04上精细控制每个模块(Pangolin/OpenCV/Eigen)
2026/6/25 20:08:46 网站建设 项目流程

手动编译ORB-SLAM3全流程:在Ubuntu 20.04上精细控制每个模块

当你厌倦了官方build.sh的黑箱操作,或是遭遇内存不足等报错时,手动编译可能是更优解。本文将带你用手术刀式精准操作完成Pangolin、OpenCV、Eigen等核心组件的源码编译,最终构建完整的ORB-SLAM3系统。不同于一键脚本的"快餐式"安装,我们追求的是完全掌控编译过程——从CMake参数调优到并行编译线程控制,每个环节都清晰可见。

1. 环境准备与依赖规划

在Ubuntu 20.04上手动编译ORB-SLAM3,需要预先规划好各库的安装路径和版本兼容性。以下是基础环境配置清单:

# 更新系统并安装基础工具链 sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git wget unzip

关键组件版本要求:

  • Pangolin:最新master分支(需支持GUI交互)
  • OpenCV:3.4.3(严格匹配ORB-SLAM3兼容性)
  • Eigen3:3.3.4+(必须源码编译安装)
  • Boost:1.75.0(提供多线程支持)

提示:建议在/usr/local下创建专用目录存放各组件源码,例如:

sudo mkdir /usr/local/slam_deps sudo chown -R $(whoami):$(whoami) /usr/local/slam_deps

2. 第三方库的精细编译

2.1 Pangolin:可视化核心

从源码构建Pangolin时,建议关闭非必要功能以减少依赖:

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

关键参数解析:

  • -DBUILD_EXAMPLES=OFF:禁用示例程序编译
  • -j$(nproc):自动检测CPU核心数并行编译

验证安装:

pkg-config --modversion pangolin # 应输出类似0.8.0的版本号

2.2 OpenCV 3.4.3:图像处理基石

编译OpenCV时需要特别注意IPPICV加速库的离线配置:

wget -O opencv-3.4.3.zip https://github.com/opencv/opencv/archive/3.4.3.zip unzip opencv-3.4.3.zip && cd opencv-3.4.3

修改3rdparty/ippicv/ippicv.cmake第47行:

# 替换为本地ippicv路径 "file:///path/to/your/ippicv/"

完整编译命令:

mkdir build && cd build cmake .. \ -DCMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DWITH_GTK=ON \ -DWITH_FFMPEG=OFF \ -DBUILD_TESTS=OFF make -j4 # 控制内存使用 sudo make install

2.3 Eigen3:线性代数库

必须通过源码安装以确保正确路径:

git clone https://gitlab.com/libeigen/eigen.git cd eigen mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local sudo make install

安装后检查头文件位置:

ls /usr/local/include/eigen3 # 应看到Eigen、unsupported等目录

3. ORB-SLAM3本体编译

3.1 源码获取与准备

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

3.2 分步手动编译

替代build.sh的精细化操作:

# 编译DBoW2 cd Thirdparty/DBoW2 mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j2 # 限制线程数防OOM cd ../../.. # 编译g2o cd Thirdparty/g2o mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j2 cd ../../.. # 解压词袋文件 cd Vocabulary tar -xf ORBvoc.txt.tar.gz cd .. # 主工程编译 mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j4 # 根据内存调整

常见问题处理:

  1. 内存不足:减少-j参数值或使用make单线程编译
  2. operator/报错:在出错源文件头部添加:
    namespace cv { template<typename _Tp, int m, int n> static inline Matx<_Tp, m, n> operator/(const Matx<_Tp, m, n>& a, float alpha) { return Matx<_Tp, m, n>(a, 1.f/alpha, Matx_ScaleOp()); } }

4. 运行验证与性能调优

4.1 数据集测试

使用EuRoC MAV数据集验证:

./Examples/Monocular/mono_euroc \ Vocabulary/ORBvoc.txt \ Examples/Monocular/EuRoC.yaml \ /path/to/MH_01_easy \ Examples/Monocular/EuRoC_TimeStamps/MH01.txt

4.2 编译参数优化对比

参数组合编译时间内存峰值二进制大小
make -j$(nproc)8min14GB82MB
make -j412min6GB82MB
make (单线程)35min2GB82MB

4.3 运行时性能监控

关键指标查看命令:

# CPU使用情况 htop -p $(pgrep -d',' mono_euroc) # 内存占用 watch -n 1 'free -m'

在i7-11800H处理器上的典型表现:

  • 跟踪线程:占用1个核心的80%算力
  • 局部建图线程:波动在30-50% CPU使用率
  • 内存占用:约1.2GB(不含可视化窗口)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询