Ubuntu 20.04 上 ORB-SLAM3 环境搭建避坑全记录从 OpenCV 4.2 到 Pangolin 0.6 的完整配置流程视觉SLAM技术的快速发展为机器人导航、增强现实等领域带来了革命性突破。作为当前最先进的视觉SLAM系统之一ORB-SLAM3凭借其多地图系统和对单目、双目、RGB-D相机的全面支持成为众多研究者和开发者的首选工具。然而在Ubuntu 20.04系统上从零开始搭建ORB-SLAM3开发环境时版本兼容性问题和依赖项冲突常常让初学者举步维艰。本文将深入剖析环境搭建过程中的关键环节提供经过实战验证的解决方案帮助开发者避开那些耗费数小时甚至数天的深坑。1. 系统基础环境准备在开始安装ORB-SLAM3之前确保系统基础环境配置正确至关重要。Ubuntu 20.04虽然提供了稳定的LTS支持但默认安装的软件包可能不完全满足SLAM开发的需求。首先更新系统软件源并升级现有软件包sudo apt update sudo apt upgrade -y接下来安装必要的编译工具链和基础依赖sudo apt install -y build-essential cmake git wget unzip对于C开发建议安装gcc-9和g-9Ubuntu 20.04默认版本sudo apt install -y gcc-9 g-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9 sudo update-alternatives --install /usr/bin/g g /usr/bin/g-9 9提示使用update-alternatives可以方便地在不同版本的gcc/g之间切换当需要处理多个项目时特别有用。2. OpenCV 4.2 的精准安装与配置ORB-SLAM3对OpenCV版本有特定要求官方推荐使用OpenCV 3.2但在实际测试中发现OpenCV 4.2表现最为稳定。以下是经过优化的安装流程2.1 依赖项安装OpenCV的完整功能需要大量系统库支持执行以下命令安装所有必要依赖sudo apt install -y libgtk2.0-dev libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev \ libjpeg-dev libpng-dev libtiff-dev \ libopenexr-dev libwebp-dev \ libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \ python3-dev python3-numpy2.2 源码编译安装从OpenCV官网下载4.2.0版本源码并解压wget -O opencv-4.2.0.zip https://github.com/opencv/opencv/archive/4.2.0.zip unzip opencv-4.2.0.zip cd opencv-4.2.0配置编译选项关键参数已优化mkdir build cd build cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_GENERATE_PKGCONFIGYES \ -D WITH_GTKON \ -D WITH_OPENGLON \ -D OPENCV_ENABLE_NONFREEON \ -D BUILD_EXAMPLESOFF \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF ..开始编译根据CPU核心数调整-j参数make -j$(nproc) sudo make install2.3 环境配置与验证更新动态链接库缓存sudo ldconfig验证安装是否成功pkg-config --modversion opencv4若返回4.2.0则表示安装成功。若遇到问题检查/usr/local/lib/pkgconfig是否在PKG_CONFIG_PATH环境变量中export PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH3. Pangolin 0.6 的定制化安装Pangolin作为ORB-SLAM3的可视化工具其版本选择和编译选项直接影响系统稳定性。以下是针对ORB-SLAM3优化的安装方案。3.1 依赖项准备安装必要的图形和视频处理库sudo apt install -y libglew-dev libboost-dev libboost-thread-dev \ libboost-filesystem-dev ffmpeg libavcodec-dev \ libavutil-dev libavformat-dev libswscale-dev3.2 源码编译与安装从GitHub获取Pangolin 0.6版本git clone --branch v0.6 https://github.com/stevenlovegrove/Pangolin.git cd Pangolin关键编译配置禁用不必要的组件以减少依赖冲突mkdir build cd build cmake -DCPP11_NO_BOOST1 \ -DBUILD_PANGOLIN_PYTHONOFF \ -DBUILD_PANGOLIN_LIBREALSENSEOFF \ -DBUILD_PANGOLIN_LIBUVCOFF \ -DBUILD_PANGOLIN_FFMPEGOFF \ -DBUILD_PANGOLIN_OPENNIOFF .. make -j$(nproc) sudo make install3.3 安装验证运行示例程序测试安装cd ../examples/HelloPangolin mkdir build cd build cmake .. make ./HelloPangolin成功执行应显示一个旋转的立方体窗口。若遇到GLFW或GLEW相关错误检查/usr/local/lib是否在LD_LIBRARY_PATH中export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH4. Eigen3 和 Boost 库的最佳实践4.1 Eigen3 安装与配置Eigen是ORB-SLAM3的核心依赖之一建议通过apt安装sudo apt install -y libeigen3-dev验证安装位置sudo updatedb locate eigen3 | grep include通常安装在/usr/include/eigen3。如需特定版本可从官网下载源码并设置EIGEN3_INCLUDE_DIR环境变量。4.2 Boost 库的精准安装ORB-SLAM3需要Boost的文件系统和线程组件。安装推荐版本sudo apt install -y libboost-filesystem-dev libboost-thread-dev如需手动编译特定版本如1.77.0wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz tar -xzf boost_1_77_0.tar.gz cd boost_1_77_0 ./bootstrap.sh --with-librariesfilesystem,thread sudo ./b2 install5. ORB-SLAM3 的编译与调试5.1 源码获取与准备推荐使用带有详细注释的ORB-SLAM3分支git clone https://github.com/electech6/ORB_SLAM3_detailed_comments.git ORB-SLAM3 cd ORB-SLAM35.2 关键文件修改修改顶层CMakeLists.txt将find_package(OpenCV 3.2)改为find_package(OpenCV 4.2 REQUIRED)移除find_package(Eigen3 3.1.0 REQUIRED)中的版本限制修改Thirdparty/DBoW2/CMakeLists.txt更新OpenCV版本要求为4.2修改Examples/Monocular/mono_euroc.cc将false改为true以启用可视化5.3 编译与问题排查执行编译脚本chmod x build.sh ./build.sh常见问题及解决方案问题现象可能原因解决方案OpenCV not found路径配置错误设置OpenCV_DIR为/usr/local/lib/cmake/opencv4Pangolin链接错误库路径未识别添加export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH到.bashrcEigen3版本冲突系统多版本并存使用update-alternatives设置正确版本6. 数据集测试与性能优化6.1 EuRoC数据集测试下载并准备MH_01_easy数据集mkdir -p datasets/MH01 cd datasets/MH01 wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.zip unzip MH_01_easy.zip运行单目示例./Examples/Monocular/mono_euroc \ ./Vocabulary/ORBvoc.txt \ ./Examples/Monocular/EuRoC.yaml \ ./datasets/MH01 \ ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt \ dataset-MH01_mono6.2 性能优化技巧启用SSE/AVX指令集 在CMakeLists.txt中添加set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -marchnative)调整ORB特征点数量 修改include/System.h中的DEFAULT_ORB_FEATURES值默认1000使用多线程优化./build.sh -j$(nproc)7. 高级调试与自定义开发7.1 GDB调试配置编译时添加调试符号./build.sh -DCMAKE_BUILD_TYPEDebug常用GDB命令gdb --args ./Examples/Monocular/mono_euroc [参数...] (gdb) break System::TrackMonocular (gdb) run (gdb) backtrace7.2 ROS集成建议创建ROS工作空间mkdir -p ~/orbslam3_ws/src cd ~/orbslam3_ws/src catkin_init_workspace添加ORB-SLAM3 ROS包git clone https://github.com/electech6/ORB_SLAM3_detailed_comments.git mv ORB_SLAM3_detailed_comments ORB_SLAM3修改ORB_SLAM3/Examples/ROS/ORB_SLAM3/CMakeLists.txt更新OpenCV和Eigen3路径设置正确的Pangolin链接选项在实际项目中我发现最耗时的往往不是算法本身而是环境配置和参数调试。建议每次修改后保存完整的编译日志使用script命令记录终端会话这对后期问题排查极有帮助。
Ubuntu 20.04 上 ORB-SLAM3 环境搭建避坑全记录:从 OpenCV 4.2 到 Pangolin 0.6 的完整配置流程
Ubuntu 20.04 上 ORB-SLAM3 环境搭建避坑全记录从 OpenCV 4.2 到 Pangolin 0.6 的完整配置流程视觉SLAM技术的快速发展为机器人导航、增强现实等领域带来了革命性突破。作为当前最先进的视觉SLAM系统之一ORB-SLAM3凭借其多地图系统和对单目、双目、RGB-D相机的全面支持成为众多研究者和开发者的首选工具。然而在Ubuntu 20.04系统上从零开始搭建ORB-SLAM3开发环境时版本兼容性问题和依赖项冲突常常让初学者举步维艰。本文将深入剖析环境搭建过程中的关键环节提供经过实战验证的解决方案帮助开发者避开那些耗费数小时甚至数天的深坑。1. 系统基础环境准备在开始安装ORB-SLAM3之前确保系统基础环境配置正确至关重要。Ubuntu 20.04虽然提供了稳定的LTS支持但默认安装的软件包可能不完全满足SLAM开发的需求。首先更新系统软件源并升级现有软件包sudo apt update sudo apt upgrade -y接下来安装必要的编译工具链和基础依赖sudo apt install -y build-essential cmake git wget unzip对于C开发建议安装gcc-9和g-9Ubuntu 20.04默认版本sudo apt install -y gcc-9 g-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9 sudo update-alternatives --install /usr/bin/g g /usr/bin/g-9 9提示使用update-alternatives可以方便地在不同版本的gcc/g之间切换当需要处理多个项目时特别有用。2. OpenCV 4.2 的精准安装与配置ORB-SLAM3对OpenCV版本有特定要求官方推荐使用OpenCV 3.2但在实际测试中发现OpenCV 4.2表现最为稳定。以下是经过优化的安装流程2.1 依赖项安装OpenCV的完整功能需要大量系统库支持执行以下命令安装所有必要依赖sudo apt install -y libgtk2.0-dev libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev \ libjpeg-dev libpng-dev libtiff-dev \ libopenexr-dev libwebp-dev \ libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \ python3-dev python3-numpy2.2 源码编译安装从OpenCV官网下载4.2.0版本源码并解压wget -O opencv-4.2.0.zip https://github.com/opencv/opencv/archive/4.2.0.zip unzip opencv-4.2.0.zip cd opencv-4.2.0配置编译选项关键参数已优化mkdir build cd build cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_GENERATE_PKGCONFIGYES \ -D WITH_GTKON \ -D WITH_OPENGLON \ -D OPENCV_ENABLE_NONFREEON \ -D BUILD_EXAMPLESOFF \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF ..开始编译根据CPU核心数调整-j参数make -j$(nproc) sudo make install2.3 环境配置与验证更新动态链接库缓存sudo ldconfig验证安装是否成功pkg-config --modversion opencv4若返回4.2.0则表示安装成功。若遇到问题检查/usr/local/lib/pkgconfig是否在PKG_CONFIG_PATH环境变量中export PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH3. Pangolin 0.6 的定制化安装Pangolin作为ORB-SLAM3的可视化工具其版本选择和编译选项直接影响系统稳定性。以下是针对ORB-SLAM3优化的安装方案。3.1 依赖项准备安装必要的图形和视频处理库sudo apt install -y libglew-dev libboost-dev libboost-thread-dev \ libboost-filesystem-dev ffmpeg libavcodec-dev \ libavutil-dev libavformat-dev libswscale-dev3.2 源码编译与安装从GitHub获取Pangolin 0.6版本git clone --branch v0.6 https://github.com/stevenlovegrove/Pangolin.git cd Pangolin关键编译配置禁用不必要的组件以减少依赖冲突mkdir build cd build cmake -DCPP11_NO_BOOST1 \ -DBUILD_PANGOLIN_PYTHONOFF \ -DBUILD_PANGOLIN_LIBREALSENSEOFF \ -DBUILD_PANGOLIN_LIBUVCOFF \ -DBUILD_PANGOLIN_FFMPEGOFF \ -DBUILD_PANGOLIN_OPENNIOFF .. make -j$(nproc) sudo make install3.3 安装验证运行示例程序测试安装cd ../examples/HelloPangolin mkdir build cd build cmake .. make ./HelloPangolin成功执行应显示一个旋转的立方体窗口。若遇到GLFW或GLEW相关错误检查/usr/local/lib是否在LD_LIBRARY_PATH中export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH4. Eigen3 和 Boost 库的最佳实践4.1 Eigen3 安装与配置Eigen是ORB-SLAM3的核心依赖之一建议通过apt安装sudo apt install -y libeigen3-dev验证安装位置sudo updatedb locate eigen3 | grep include通常安装在/usr/include/eigen3。如需特定版本可从官网下载源码并设置EIGEN3_INCLUDE_DIR环境变量。4.2 Boost 库的精准安装ORB-SLAM3需要Boost的文件系统和线程组件。安装推荐版本sudo apt install -y libboost-filesystem-dev libboost-thread-dev如需手动编译特定版本如1.77.0wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz tar -xzf boost_1_77_0.tar.gz cd boost_1_77_0 ./bootstrap.sh --with-librariesfilesystem,thread sudo ./b2 install5. ORB-SLAM3 的编译与调试5.1 源码获取与准备推荐使用带有详细注释的ORB-SLAM3分支git clone https://github.com/electech6/ORB_SLAM3_detailed_comments.git ORB-SLAM3 cd ORB-SLAM35.2 关键文件修改修改顶层CMakeLists.txt将find_package(OpenCV 3.2)改为find_package(OpenCV 4.2 REQUIRED)移除find_package(Eigen3 3.1.0 REQUIRED)中的版本限制修改Thirdparty/DBoW2/CMakeLists.txt更新OpenCV版本要求为4.2修改Examples/Monocular/mono_euroc.cc将false改为true以启用可视化5.3 编译与问题排查执行编译脚本chmod x build.sh ./build.sh常见问题及解决方案问题现象可能原因解决方案OpenCV not found路径配置错误设置OpenCV_DIR为/usr/local/lib/cmake/opencv4Pangolin链接错误库路径未识别添加export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH到.bashrcEigen3版本冲突系统多版本并存使用update-alternatives设置正确版本6. 数据集测试与性能优化6.1 EuRoC数据集测试下载并准备MH_01_easy数据集mkdir -p datasets/MH01 cd datasets/MH01 wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.zip unzip MH_01_easy.zip运行单目示例./Examples/Monocular/mono_euroc \ ./Vocabulary/ORBvoc.txt \ ./Examples/Monocular/EuRoC.yaml \ ./datasets/MH01 \ ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt \ dataset-MH01_mono6.2 性能优化技巧启用SSE/AVX指令集 在CMakeLists.txt中添加set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -marchnative)调整ORB特征点数量 修改include/System.h中的DEFAULT_ORB_FEATURES值默认1000使用多线程优化./build.sh -j$(nproc)7. 高级调试与自定义开发7.1 GDB调试配置编译时添加调试符号./build.sh -DCMAKE_BUILD_TYPEDebug常用GDB命令gdb --args ./Examples/Monocular/mono_euroc [参数...] (gdb) break System::TrackMonocular (gdb) run (gdb) backtrace7.2 ROS集成建议创建ROS工作空间mkdir -p ~/orbslam3_ws/src cd ~/orbslam3_ws/src catkin_init_workspace添加ORB-SLAM3 ROS包git clone https://github.com/electech6/ORB_SLAM3_detailed_comments.git mv ORB_SLAM3_detailed_comments ORB_SLAM3修改ORB_SLAM3/Examples/ROS/ORB_SLAM3/CMakeLists.txt更新OpenCV和Eigen3路径设置正确的Pangolin链接选项在实际项目中我发现最耗时的往往不是算法本身而是环境配置和参数调试。建议每次修改后保存完整的编译日志使用script命令记录终端会话这对后期问题排查极有帮助。