Ubuntu 18.04 + ROS Melodic 下,ORB-SLAM3 编译避坑全记录(附 Pangolin v0.5 降级方案)
Ubuntu 18.04 + ROS Melodic 环境下 ORB-SLAM3 完整编译指南与实战经验
当你在Ubuntu 18.04系统上尝试编译ORB-SLAM3时,可能会遇到各种令人头疼的依赖问题。作为SLAM领域的重要开源项目,ORB-SLAM3对环境配置有着严格的要求,特别是当它与ROS Melodic结合使用时。本文将带你一步步解决最常见的编译问题,特别是那些让新手耗费数小时甚至数天的"坑"。
1. 环境准备与基础依赖安装
在开始编译ORB-SLAM3之前,确保你的Ubuntu 18.04系统已经安装了必要的开发工具和基础依赖。ROS Melodic的完整安装是第一步,因为它提供了许多ORB-SLAM3需要的底层库和工具。
首先,更新系统并安装基础编译工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git wget unzip接下来,安装ROS Melodic完整版(如果尚未安装):
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install -y ros-melodic-desktop-full echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc安装ROS依赖包:
sudo apt install -y python-rosdep python-rosinstall python-rosinstall-generator python-wstool sudo rosdep init rosdep update2. 解决OpenCV版本冲突问题
ORB-SLAM3官方要求OpenCV版本大于4.4,但ROS Melodic默认安装的是OpenCV 3.2。这种版本冲突是编译过程中最常见的错误之一。
解决方案有两种:
修改ORB-SLAM3的CMakeLists.txt(推荐新手使用)
找到ORB_SLAM3文件夹下的CMakeLists.txt文件,修改以下内容:
find_package(OpenCV 3 REQUIRED) if(NOT OpenCV_FOUND) message(FATAL_ERROR "OpenCV > 3 not found.") endif()安装OpenCV 4.x并配置环境变量(适合需要新特性的用户)
安装OpenCV 4.x:
sudo apt install -y libopencv-dev python-opencv然后设置环境变量,确保系统能找到正确的OpenCV版本:
echo "export OpenCV_DIR=/usr/local/share/OpenCV" >> ~/.bashrc source ~/.bashrc
3. Pangolin降级到v0.5的详细步骤
Pangolin的最新版本与ORB-SLAM3存在兼容性问题,会导致编译失败。以下是降级到v0.5的具体步骤:
卸载现有Pangolin版本(如果有):
sudo rm -rf /usr/local/include/pangolin sudo rm -rf /usr/local/lib/libpangolin*下载并编译Pangolin v0.5:
git clone --branch v0.5 https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build && cd build cmake .. cmake --build . sudo make install验证安装:
检查Pangolin版本是否正确:
pkg-config --modversion pangolin应该输出
0.5或类似的版本号。
4. ORB-SLAM3编译与测试
完成上述准备工作后,可以开始编译ORB-SLAM3:
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 cd ORB_SLAM3 chmod +x build.sh ./build.sh如果一切顺利,你应该能看到编译成功的消息。接下来可以测试EuRoC数据集:
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo常见测试问题及解决方案:
缺少euroc_examples.sh文件:
新版本的ORB-SLAM3可能移除了这个文件,可以从详细注释版仓库获取:
wget https://raw.githubusercontent.com/electech6/ORB_SLAM3_detailed_comments/master/euroc_examples.sh chmod +x euroc_examples.shIMU初始化问题:
如果看到
Fail to track local map! IMU is not or recently initialized错误,尝试:- 确保数据集路径正确
- 检查IMU数据是否完整
- 增加初始化时间
5. 性能优化与实用技巧
经过多次项目实践,我总结出以下优化建议:
内存管理:
- 对于大型场景,限制地图点数量
- 使用
--limit_map_points参数控制内存使用
实时性优化:
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo --frame_skip 2精度对比(以MH_01_easy为例):
传感器配置 绝对轨迹误差(RMSE) 双目 0.025 m 单目+IMU 0.027 m 双目+IMU 0.024 m 单目 0.152 m 户外场景处理:
- 忽略20米外的特征点可提高稳定性
- 调整特征点提取阈值适应不同光照条件
