保姆级避坑指南:在Ubuntu 20.04上从源码编译ORB-SLAM3(含ROS Noetic适配)

张开发
2026/4/20 21:56:38 15 分钟阅读

分享文章

保姆级避坑指南:在Ubuntu 20.04上从源码编译ORB-SLAM3(含ROS Noetic适配)
保姆级避坑指南在Ubuntu 20.04上从源码编译ORB-SLAM3含ROS Noetic适配当你在Ubuntu 20.04上尝试编译ORB-SLAM3时可能会遇到各种依赖问题、版本冲突和配置错误。本文将深入解析这些常见问题并提供经过验证的解决方案帮助你顺利完成编译过程。1. 环境准备与依赖安装在开始编译ORB-SLAM3之前确保你的Ubuntu 20.04系统已经安装了必要的开发工具sudo apt update sudo apt install -y git cmake gcc g build-essential1.1 关键依赖项安装ORB-SLAM3依赖于多个第三方库每个库都有特定的版本要求Eigen3推荐3.3.4或更高版本Pangolin0.6版本OpenCV3.4.2或4.x版本DBoW2和g2o包含在ORB-SLAM3源码中安装Eigen3最简单的方法是使用aptsudo apt install -y libeigen3-dev验证Eigen3安装pkg-config --modversion eigen32. Pangolin 0.6安装与常见问题Pangolin是ORB-SLAM3可视化的重要组件但安装过程中常会遇到各种依赖问题。2.1 安装依赖项首先安装Pangolin所需的所有依赖sudo apt install -y libglew-dev libpython3.8-dev pkg-config \ libgl1-mesa-dev libegl1-mesa-dev libwayland-dev \ libxkbcommon-dev wayland-protocols注意Ubuntu 20.04默认使用Python 3.8因此需要安装libpython3.8-dev而不是原文中的libpython2.7-dev2.2 编译安装Pangolin获取Pangolin 0.6源码并编译git clone --recursive https://github.com/stevenlovegrove/Pangolin.git -b v0.6 cd Pangolin mkdir build cd build cmake .. make -j$(nproc) sudo make install常见问题及解决方案GLFW相关错误Could NOT find GLFW (missing: GLFW_INCLUDE_DIR GLFW_LIBRARY)解决方法sudo apt install -y libglfw3-devPython绑定问题Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)解决方法sudo apt install -y python3-dev3. OpenCV安装与版本兼容性ORB-SLAM3对OpenCV版本有特定要求以下是两种安装方案3.1 方案一安装OpenCV 3.4.2sudo apt install -y libopencv-dev如果系统默认版本不符合要求可以从源码编译wget -O opencv-3.4.2.zip https://github.com/opencv/opencv/archive/3.4.2.zip unzip opencv-3.4.2.zip cd opencv-3.4.2 mkdir build cd build cmake -D CMAKE_BUILD_TYPERelease -D CMAKE_INSTALL_PREFIX/usr/local .. make -j$(nproc) sudo make install3.2 方案二适配OpenCV 4.x如果你已经安装了OpenCV 4.x可以修改ORB-SLAM3的CMakeLists.txtfind_package(OpenCV 4 REQUIRED)常见问题版本不匹配错误Could not find a configuration file for package OpenCV that is compatible with requested version 3.4.2解决方法修改ORB-SLAM3/CMakeLists.txt中的OpenCV版本要求4. ORB-SLAM3源码编译4.1 获取源码git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM34.2 编译第三方库建议单独编译每个第三方库便于排查问题编译DBoW2cd Thirdparty/DBoW2 mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)编译g2ocd ../../g2o mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)编译Sophuscd ../../Sophus mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)4.3 编译ORB-SLAM3主程序cd ../../.. mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)常见编译错误及解决方案Sophus头文件找不到fatal error: sophus/se3.hpp: No such file or directory解决方法sudo ln -s /usr/local/include/sophus /usr/include/sophusEigen3相关问题Eigen/Core: No such file or directory解决方法sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen5. ROS Noetic适配对于使用ROS Noetic的用户需要进行一些额外适配5.1 环境变量设置在~/.bashrc中添加export ROS_PACKAGE_PATH${ROS_PACKAGE_PATH}:$HOME/ORB_SLAM3/Examples_old/ROS5.2 ROS编译cd Examples_old/ROS/ORB_SLAM3 mkdir build cd build cmake .. -DROS_BUILD_TYPERelease make -j$(nproc)ROS Noetic特有修改修改CMakeLists.txtfind_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs cv_bridge image_transport tf sensor_msgs geometry_msgs message_filters )代码适配 在ViewerAR.h中添加#include Eigen/Dense #include opencv2/core/eigen.hpp6. 测试与运行6.1 数据集测试下载EuRoC数据集并运行./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ./Datasets/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo6.2 实时相机运行对于Intel RealSense D455相机安装ROS驱动sudo apt install ros-noetic-realsense2-camera修改相机参数文件# Examples/Stereo-Inertial/RealSense_D435i.yaml Camera.fps: 30 Camera.RGB: 1运行./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml7. 性能优化与调试技巧编译优化cmake .. -DCMAKE_BUILD_TYPERelease -DCMAKE_CXX_FLAGS-marchnative -O3内存管理// 在System.cc中添加 #include malloc.h malloc_trim(0); // 定期调用减少内存碎片线程设置# ORB参数文件中调整 ORBextractor.nFeatures: 1000 ORBextractor.nLevels: 8在实际项目中我发现ORB-SLAM3对相机标定参数非常敏感特别是畸变系数。建议使用高质量的标定板进行相机标定并在不同光照条件下测试系统稳定性。

更多文章