2、环境搭建与编译:Ubuntu系统配置、Eigen3与Pangolin安装、OpenCV与g2o依赖、ORB-SLAM3源码编译与测试

说实话,很多同学卡在ORB-SLAM3的第一步——环境搭建。我见过太多人,代码逻辑看得明明白白,结果编译报错一整天,最后发现是某个库版本不对。这一章,咱们就把这些坑一个个填平。

核心要点:环境搭建的本质,就是让ORB-SLAM3依赖的六个关键库(Eigen3、Pangolin、OpenCV、g2o、DBoW2、Sophus)在系统里各就各位。版本匹配是重中之重。

2.1 Ubuntu系统配置:先把地基打牢

我个人习惯用Ubuntu 18.04或20.04。为什么?因为ORB-SLAM3官方测试环境就是这两个版本。你非要用22.04也行,但要做好心理准备——有些库的依赖关系会变。

装完系统第一件事,更新源:

sudo apt update
sudo apt upgrade -y

然后安装基础编译工具。嗯,这里有个小坑:build-essential 必须装,但很多人会漏掉 cmakegit

sudo apt install build-essential cmake git pkg-config -y

我的经验:装完系统后,先跑一遍 sudo apt install mesa-utils。这能避免后面Pangolin编译时OpenGL相关的报错。我曾经在这上面浪费过两小时。

2.2 Eigen3安装:轻量级矩阵库

Eigen3是个纯头文件库,说白了就是不需要编译。但版本有讲究——ORB-SLAM3要求3.1.0以上,我建议直接装3.3.7或3.4.0。

sudo apt install libeigen3-dev -y

验证安装:

pkg-config --modversion eigen3

如果输出3.3.7或更高,就OK了。注意,Eigen3的安装路径默认在 /usr/include/eigen3,但有些项目会去 /usr/include 找。我习惯做个软链接:

sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen

避坑指南:我曾经遇到过Eigen3版本冲突——系统自带的3.2.10和项目要求的3.3.7打架。解决办法是手动卸载旧版,从源码编译新版。具体命令:sudo apt remove libeigen3-dev,然后从官网下载源码包。

2.3 Pangolin安装:可视化窗口的基石

Pangolin负责显示相机轨迹和地图点。它依赖OpenGL和GLEW。先装依赖:

sudo apt install libgl1-mesa-dev libglew-dev libpython2.7-dev -y

然后从GitHub克隆源码:

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build
cmake ..
make -j4
sudo make install

这里有个细节:make -j4 的4代表并行编译线程数,根据你的CPU核心数调整。我笔记本是8核,所以用 -j8

我的习惯:编译Pangolin时,如果报错 Could NOT find GL,说明OpenGL开发包没装全。执行 sudo apt install libglu1-mesa-dev freeglut3-dev 就能解决。

2.4 OpenCV安装:图像处理的引擎

ORB-SLAM3对OpenCV的版本要求比较宽松,3.2.0到4.x都行。但我建议用3.4.16——稳定,且和g2o兼容性好。

两种安装方式:

方式 命令 适用场景
apt安装 sudo apt install libopencv-dev -y 快速验证,版本可能较旧
源码编译 从GitHub下载,cmake编译 需要特定版本或contrib模块

我个人推荐源码编译,因为可以控制编译选项。比如关闭不需要的模块来加速编译:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_TBB=ON \
      -D WITH_OPENMP=ON \
      -D BUILD_opencv_python2=OFF \
      -D BUILD_opencv_python3=ON ..

避坑指南:如果你同时装了ROS,ROS自带的OpenCV版本可能和ORB-SLAM3冲突。解决办法是在编译ORB-SLAM3时,显式指定OpenCV路径:cmake -D OpenCV_DIR=/usr/local/share/OpenCV ..

2.5 g2o安装:图优化的核心

g2o是ORB-SLAM3后端优化的关键。它依赖Eigen3和SuiteSparse。先装SuiteSparse:

sudo apt install libsuitesparse-dev -y

然后克隆g2o源码:

git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build && cd build
cmake ..
make -j4
sudo make install

注意,g2o的版本要和ORB-SLAM3匹配。我测试过,2020年之后的g2o版本都能用。如果编译报错,多半是Eigen3版本不对——回头检查2.2节。

我的经验:g2o编译时,如果报 undefined reference to CHOLMOD,说明SuiteSparse没装好。执行 sudo apt install libcholmod3 libcholmod-dev 即可。

2.6 ORB-SLAM3源码编译:终于到了正题

克隆源码:

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
cd ORB_SLAM3

执行编译脚本:

chmod +x build.sh
./build.sh

这个脚本会自动编译DBoW2、g2o、Sophus和ORB-SLAM3主程序。编译过程大概10-20分钟,取决于你的机器性能。

如果编译成功,你会看到 libORB_SLAM3.so 和几个可执行文件。如果失败,别慌——90%的问题出在依赖库版本上。

常见编译错误及解决:

  • Eigen3找不到:检查 /usr/include/eigen3 是否存在,或设置 -D EIGEN3_INCLUDE_DIR
  • OpenCV版本冲突:pkg-config --modversion opencv 查看版本,确保≥3.2.0
  • Pangolin链接错误:重新编译Pangolin,确保 sudo make install 执行成功

2.7 测试运行:验证你的环境

编译成功后,用官方提供的EuRoC数据集测试。下载一个序列(比如MH_01_easy),然后运行:

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

如果看到Pangolin窗口显示相机轨迹和地图点,恭喜你——环境搭建成功!

我的建议:第一次测试时,用 ./build.sh -j1 单线程编译。虽然慢,但能避免多线程编译时的内存溢出问题。我16GB内存的机器,用 -j8 编译时偶尔会卡死。

2.8 知识体系总览

下面这张图,帮你理清ORB-SLAM3的依赖关系:

ORB-SLAM3 Eigen3(矩阵运算) Pangolin(可视化) OpenCV(图像处理) g2o(图优化) DBoW2(回环检测) Sophus(李代数) 依赖关系图:箭头指向表示「被依赖」,虚线表示「间接依赖」

说白了,ORB-SLAM3就像一辆车——Eigen3是底盘,OpenCV是发动机,Pangolin是仪表盘,g2o是悬挂系统。任何一个部件出问题,车都跑不起来。

本章小结:环境搭建没有捷径,但可以少走弯路。记住三点:版本匹配、依赖顺序、编译选项。把这章的内容吃透,后面源码解析你会轻松很多。

专注资料整理