一、Docker 容器创建

1
2
3
4
5
6
7
8
9
10
11
12
sudo docker run -dit \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
--name=orbslam2 \
--privileged \
-v /dev:/dev \
-v /home/xfy/docker_practice/orbslam2Base20.04:/home/docker \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-w /home \
--net=host \
ubuntu:20.04

二、Ubuntu 源配置

  1. 安装 vim

    1
    apt install vim
  2. 备份原始源

    1
    cp /etc/apt/sources.list /etc/apt/sources.list.backup
  3. 编辑源文件

    1
    2
    3
    4
    vim /etc/apt/sources.list
    # gg dG 移动到文件第一行并删除所有内容
    # i进入编辑模式
    # 编辑完esc退出到普通模式,:进入命令行模式输入wq保存并退出
  4. 替换为阿里云源

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

    # deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    # deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

三、安装基础开发工具

  1. 安装 build-essential

    1
    apt install build-essential
  2. 安装新版本的 git

    1
    2
    3
    4
    5
    apt update
    apt install -y software-properties-common
    add-apt-repository -y ppa:git-core/ppa
    apt update
    apt install -y git
  3. 安装新版本的 cmake

    1
    2
    3
    4
    5
    6
    7
    apt update
    apt install -y apt-transport-https ca-certificates gnupg wget
    wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
    apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
    apt update
    # apt install -y cmake # 这会安装4.*版本的cmake
    apt install cmake=3.29.6-*

四、安装 ORB-SLAM2 所需第三方库

1. 安装 Pangolin 0.6

1
2
3
4
5
6
7
8
9
10
11
# 从 https://github.com/stevenlovegrove/Pangolin/releases 下载安装包
tar -xzf Pangolin-0.6.tar.gz
# 安装 Pangolin 依赖
apt install libgl1-mesa-dev
apt install libglew-dev
# 编译安装
mkdir build
cd build
cmake ..
make
make install

2. 安装 Eigen 3.3.8

1
2
3
4
5
6
tar -xzf eigen-3.3.8.tar.gz
mkdir build
cd build
cmake ..
make install
# eigen不需要执行make

3. 安装 Boost

1
apt install libboost-all-dev

4. 安装 libssl-dev

1
apt install libssl-dev

5. 安装 OpenCV 4.6

1
2
3
4
5
6
7
8
9
10
11
# 安装 OpenCV 依赖
apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff5-dev libswscale-dev

# 安装 OpenCV
apt install unzip
unzip opencv-4.6.0.zip # 假设压缩包名称
cd opencv-4.6.0
mkdir build
cd build
cmake ..
make -j6

五、克隆并编译 ORB-SLAM2

1
2
3
# 克隆有详细注释的版本
git clone https://github.com/electech6/ORB_SLAM2_detailed_comments.git
# 把CMakeLists.txt 中的 OpenCV 依赖版本为 4,c++标准改为14

1. 编译 DBoW2 (ORB-SLAM2 自带)无需make install

1
2
3
4
5
6
cd ORB_SLAM2_detailed_comments/Thirdparty/DBoW2
# 先修改 CMakeLists.txt 中的 OpenCV 依赖版本为 4
mkdir build
cd build
cmake ..
make

2. 编译 g2o (ORB-SLAM2 自带)无需make install

1
2
3
4
5
cd ORB_SLAM2_detailed_comments/Thirdparty/g2o
mkdir build
cd build
cmake ..
make

六、常见问题及解决方案

问题1: opencv/cv.h 头文件缺失

1
fatal error: opencv/cv.h: 没有那个文件或目录

解决方法: 修改 ORBextractor.h

1
2
3
4
5
# 将
#include <opencv/cv.h>
# 换成
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui_c.h>

问题2: std::map 类型错误

1
2
/usr/include/c++/9/bits/stl_map.h:122:71: error: static assertion failed: std::map must have the same value_type as its allocator
static_assert(is_same<typename _Alloc::value_type, value_type>::value,

解决方法: 修改 LoopClosing.h 第49行

1
2
3
4
5
6
# 将
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
# 改成
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;

问题3-5: CV_LOAD_IMAGE_UNCHANGED 未定义

解决方法: 在相关文件中替换 OpenCV 常量

1
2
3
4
5
6
# 将所有 CV_LOAD_IMAGE_UNCHANGED 替换为 cv::IMREAD_UNCHANGED
# 需要修改的文件包括:
# - tum.cc
# - stereo_kitti.cc
# - stereo_euroc.cc
# 以及其他类似文件

七、测试安装结果

1
2
3
4
5
6
7
8
9
10
11
12
# 解压词汇表
cd ORB_SLAM2_detailed_comments/Vocabulary
tar -xzf ORBvoc.txt.tar.gz

# 安装 TUM 数据集,从官网下载并使用 associate.py 生成 associate.txt 文件

# 运行测试
/home/orbslam/ORB_SLAM2_detailed_comments/Examples/RGB-D/rgbd_tum \
/home/orbslam/ORB_SLAM2_detailed_comments/Vocabulary/ORBvoc.txt \
/home/orbslam/ORB_SLAM2_detailed_comments/Examples/RGB-D/TUM3.yaml \
/home/docker/rgbd_dataset_freiburg3_sitting_static \
/home/docker/rgbd_dataset_freiburg3_sitting_static/associate.txt

如果运行成功,说明 ORB-SLAM2 安装配置已完成。