ORB-SLAM2 是用于单目、立体和 RGB-D 相机的实时 SLAM 库,用于计算相机轨迹和稀疏 3D 重建(在具有真实比例的立体和 RGB-D 情况下)。它能够检测循环并实时重新定位相机。我们提供了在 KITTI 数据集中以立体或单目运行 SLAM 系统的示例,在 TUM 数据集中以 RGB-D 或单目运行,在 EuRoC 数据集中以立体或单目运行 SLAM 系统。我们还提供 ROS 节点来处理实时单目、立体声或 RGB-D 流。该库可以在没有ROS的情况下进行编译(引自ORB-SLAM2)
1 安装环境:
ubuntu 18.04 LTS
2 依赖:
C++11
一般ubuntu 环境创建好后默认是存在的,验证命令
Pangolin
官网Plangolin,ORB-SLAM2要求的版本为 v0.5
下载
1 2
| git clone --recursive https://github.com/stevenlovegrove/Pangolin.git ``` cd Pangolin
|
切换版本
检查是否有 v0.5 这个标签
如果存在 v0.5这个标签,可以直接切换到该版本
或者可以直接创建一个新分支,并切换到v0.5 版本
1
| git checkout -b new_branch_name v0.5
|
依赖
1 2 3 4 5 6 7 8 9
| sudo apt install libgl1-mesa-dev sudo apt install libglew-dev sudo apt install cmake sudo apt install libpython2.7-dev sudo apt install pkg-config sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev sudo apt install libdc1394-22-dev libraw1394-dev sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev
|
特殊依赖
1
| sudo apt-get install libeigen3-dev
|
编译安装
1 2 3 4 5 6
| cd Pangolin mkdir build cd build cmake .. sudo make -j4 sudo make install
|
OpenCV
下载
1 2
| git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git
|
切换版本
1 2 3 4
| cd opencv_contrib git checkout 3.4.6 cd ../opencv git checkout 3.4.6
|
依赖
1 2 3
| sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
|
编译安装
1 2 3 4 5 6
| cd opencv mkdir build cd build sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. sudo make -j4 sudo make install
|
环境声明
在build目录下,打开编写一个空白的文件opencv.conf,在其中追加/usr/local/lib
1 2
| cd build sudo gedit /etc/ld.so.conf.d/opencv.conf
|
使刚才的路径配置生效 sudo ldconfig
配置 bashrc
1
| sudo gedit /etc/bash.bashrc'
|
在结尾处添加
1 2
| PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
|
保存关闭文件使之生效 source /etc/bash.bashrc
Eigen3
1
| sudo apt-get install libeigen3-dev
|
DBoW2 and g2o (Included in Thirdparty folder)
ROS (optional)
编译
1 2 3
| cd ORB_SLAM2 chmod +x build.sh ./build.sh
|
运行与测试
1 . RGB-D测试
数据集TUM
使用 python 脚本 associate.py 关联 RGB 图像和深度图像
1
| python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt
|
执行以下命令。将 freiburg1、freiburg2 和 freiburg3 序列分别更改为 TUM1.yaml、TUM2.yaml 或 TUM3.yaml。更改为未压缩的序列文件夹。更改为相应关联文件的路径
TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
需注意该命令有四个参数方可执行成功。
1
| ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
|
示例
1
| ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml datasheet/rgbd_dataset_freiburg1_xyz Examples/RGB-D/associations/fr1_xyz.txt
|
错误解决方案
1. 找不到opencv
OpenCV > 2.4.3 not found
修改ORB-SLAM2 和 Thirdparty/DBoW2 中的 CMakelsit.txt,将 opencv3.0 改为 4.4
1 2 3 4 5 6 7
| find_package(OpenCV 4.4 QUIET) if(NOT OpenCV_FOUND) find_package(OpenCV 2.4.3 QUIET) if(NOT OpenCV_FOUND) message(FATAL_ERROR "OpenCV > 2.4.3 not found.") endif() endif()
|
2. 找不到 Eigen3
修改 ORB-SLAM2目录下 的 CMakelist.txt 中的
1 2 3
| find_package(Eigen3 3.1.0 REQUIRED) 改为 find_package(Eigen3 3.1.0 REQUIRED NO_MUDULE)
|
3. 缺少头文件
1
| error: ’usleep’ was not declared in this scope
|
报错的文件包括:mono_euroc.cc、mono_kitti.cc、mono_tum.cc、rgbd_tum.cc、stereo_euroc.cc、stereo_kitti.cc、LoopClosing.cc、System.cc、Viewer.cc
在这些报错的文件中添加
4. 头文件失效
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>
|
5. Opencv定义更换
error:'CV_LOAD_IMAGE_UNCHANGED' was not declared in this scope
报错的文件包括:mono_euroc.cc、mono_kitti.cc、mono_tum.cc、rgbd_tum.cc、stereo_euroc.cc、stereo_kitti.cc
1 2 3 4
| 将 CV_LOAD_IMAGE_UNCHANGED 替换为 cv::IMREAD_UNCHANGED
|