ORB-SLAM3 安装与部署:从零编译到跑通第一个数据集
二、安装与部署:从零编译到跑通第一个数据集
官方推荐的运行环境是 Ubuntu 18.04 或 20.04,配 ROS Melodic 或 Noetic。更新的 Ubuntu 22.04 + ROS 2 不是官方主线支持路径,社区有移植版但踩坑成本高,首次上手建议直接用 Ubuntu 20.04 + Noetic。Windows 上虽然有人用 WSL2 编译成功,但 Pangolin 的 GUI 与 USB 相机直通容易出问题,实机调试不要用 WSL。
依赖分为三档:系统库、第三方源码库、以及 ORB-SLAM3 仓库内自带的 Thirdparty。系统库方面需要 C++11 以上编译器、CMake、Git、OpenCV、Eigen3、Pangolin(新版还可能需要 GLEW 与 libepoxy)以及 Boost 的部分组件。仓库里自带 DBoW2、g2o、Sophus 三个第三方库,不需要你单独装,但编译时间会因此变长。
- 安装系统依赖。Ubuntu 20.04 下执行:
sudo apt update sudo apt install -y build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \ libopenblas-dev liblapack-dev libeigen3-dev libboost-all-dev - 安装 OpenCV。官方代码对 OpenCV 3.2 及以上可用;OpenCV 4.x 需要改动若干处旧宏名。用 apt 装最省事,出问题再源码编译:
sudo apt install -y libopencv-dev pkg-config --modversion opencv4 - 编译安装 Pangolin。它是可视化窗口依赖,缺了会在链接阶段报一堆 Pangolin 未定义符号:
sudo apt install -y libglew-dev libepoxy-dev libpython2.7-dev git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin && mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j4 && sudo make install - 拉取 ORB-SLAM3 与词袋文件。词袋文件体积较大,务必确认下载完整,否则运行时会报读取词汇表失败:
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3 ls -lh Vocabulary/ORBvoc.txt - 编译。仓库自带
build.sh,内部会对每个 Thirdparty 依次执行 make:
若机器核心数多,可以把chmod +x build.sh ./build.shbuild.sh里的make -j改成make -j8加速。旧机器若出现virtual memory exhausted,说明并发编译把内存吃满了,改成make -j2或make -j1。 - 配置动态库路径。编译出的
lib/libORB_SLAM3.so默认不在系统搜索路径里,不配置就会在运行可执行文件时报找不到共享库:echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'"$PWD"'/lib' >> ~/.bashrc source ~/.bashrc - 下载 EuRoC 数据集跑通双目惯性示例,验证安装是否完整:
终端里出现关键帧数量不断增长的日志,同时弹出 Pangolin 窗口显示当前帧与地图点,说明成功。./Examples/Stereo-Inertial/stereo_inertial_euroc \ ./Vocabulary/ORBvoc.txt \ ./Examples/Stereo-Inertial/EuRoC.yaml \ /path/to/MH_01_easy \ ./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt \ dataset-MH01
常见报错与排查方向,按出现频率排序。
| 报错现象 | 根因 | 处理方式 |
|---|---|---|
| 链接阶段大量 Pangolin 未定义符号 | Pangolin 未安装或安装了不兼容版本 | 重装 Pangolin,确认 /usr/local/lib 下有 libpango |
error while loading shared libraries: libORB_SLAM3.so | 运行时找不到动态库 | 把 lib/ 加入 LD_LIBRARY_PATH,或写入 /etc/ld.so.conf.d/ 后执行 ldconfig |
CV_LOAD_IMAGE_UNCHANGED was not declared | OpenCV 4 删除了旧宏 | 替换为 cv::IMREAD_UNCHANGED,同类宏还有 CV_RGB2GRAY 等 |
| 启动即 Segmentation fault | 数据集路径写错,或词袋文件没下载完整 | 打印路径确认存在;比对 ORBvoc.txt 文件大小 |
terminate called after throwing an instance of std::bad_alloc | 并发编译内存不足,或地图点膨胀 | 降 -j 并行度;运行时考虑开启地图点剔除 |
| Pangolin 窗口不显示任何图像 | 显卡驱动或 OpenGL 上下文问题,也可能在 WSL 里 | 换到原生机;或在配置里关闭 Viewer 先跑通算法 |
标定工具方面,单目/双目相机标定常用 Kalibr(支持相机与 IMU 联合标定),也可以用 ROS 的 camera_calibration 包做纯相机内参标定,用 imu_utils 做 IMU 噪声标定。标定板建议用 Aprilgrid 而非棋盘格,Kalibr 对 Aprilgrid 的支持更稳,且不要求整块板都被拍到。IMU 与相机之间的外参(平移与旋转)如果标不准,视觉惯性模式会表现为轨迹整体旋转或尺度漂移,这是实机上最常见的精度问题来源。

