Ubuntu 20.04 下 ORB-SLAM2 从安装到运行的全流程避坑指南(附常见错误修复)
视觉SLAM技术,尤其是ORB-SLAM2,早已成为机器人、自动驾驶和增强现实领域开发者绕不开的经典课题。然而,对于许多初次接触这个开源项目的新手来说,从零开始搭建一个能跑起来的环境,其过程往往比算法本身更令人“印象深刻”——各种依赖冲突、编译错误、路径问题层出不穷,足以消磨掉大半的热情。
这篇文章,就是为你准备的。我们不谈高深的理论,只聚焦于一个目标:在Ubuntu 20.04系统上,从一张白纸开始,直到成功运行ORB-SLAM2的示例程序。我会结合自己多次在不同机器上“踩坑”的经验,将整个流程拆解,并重点剖析那些最常见的“拦路虎”及其根治方案。无论你是SLAM的初学者,还是需要快速复现环境的开发者,这份指南都力求让你少走弯路,把时间花在更有价值的研究上。
1. 环境准备与依赖库的精准安装
在动手编译ORB-SLAM2之前,一个干净、完备的底层环境是成功的基石。Ubuntu 20.04作为长期支持版本,其软件源和库版本已经足够新,但这也带来了一些与ORB-SLAM2原始开发环境(基于更早的Ubuntu版本)的兼容性问题。我们的第一步,就是系统地解决这些问题。
1.1 系统更新与基础工具
首先,确保你的系统是最新的。打开终端,执行以下命令来更新软件包列表并升级已安装的包。这一步能避免很多因旧版本软件导致的奇怪问题。
sudo apt update
sudo apt upgrade -y
接下来,安装一些编译和开发所必需的基础工具。git用于拉取代码,cmake是跨平台的编译构建工具,gcc和g++则是C/C++编译器。
sudo apt install -y git cmake gcc g++
注意:Ubuntu 20.04默认的GCC版本是9.x,这完全支持C++11标准,满足ORB-SLAM2的要求。无需降级。
1.2 Pangolin:可视化界面的搭建
Pangolin是一个轻量级的OpenGL显示与交互库,ORB-SLAM2用它来实时显示相机轨迹和地图点。它的安装相对独立,但依赖项较多。
首先,从GitHub克隆Pangolin的代码。建议使用--recursive参数,确保子模块(如Eigen)也被正确下载。
cd ~
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
在编译Pangolin之前,需要安装其依赖的图形和窗口系统库。以下命令会一次性安装所需的大部分库:
sudo apt install -y libgl1-mesa-dev libglew-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt install -y libegl1-mesa-dev libpng-dev libjpeg-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
依赖安装完毕后,使用CMake进行构建和安装。这里我们采用“Release”模式构建,并开启-j参数以加速编译过程。
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -j$(nproc)
sudo make install
安装完成后,你可以通过一个简单的方法验证Pangolin是否安装成功:检查/usr/local/include目录下是否存在pangolin文件夹,以及/usr/local/lib目录下是否存在libpangolin.so等库文件。
2. OpenCV与Eigen:核心数学与视觉库的部署
ORB-SLAM2的图像处理依赖于OpenCV,而大量的矩阵和几何运算则依赖于Eigen。这两个库的安装需要格外仔细。
2.1 OpenCV 4.x的安装与配置
ORB-SLAM2官方推荐使用OpenCV 3,但在Ubuntu 20.04上,从软件源直接安装的是OpenCV 4。经过测试,ORB-SLAM2与OpenCV 4兼容性良好。我们选择从源码编译安装OpenCV 4.5.5,这是一个稳定且功能齐全的版本。
首先,安装编译OpenCV所需的大量依赖库:
sudo apt install -y build-essential libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install -y libtbb2 libtbb-

334

被折叠的 条评论
为什么被折叠?



