无ROS环境下在Ubuntu14.04上运行ORB-SLAM2

这里主要介绍在安装和使用ORB-SLAM过程中踩过的坑,以此来提醒自己也方便他人。

首先在https://github.com/raulmur/ORB_SLAM2上下载源码,然后用cmake来编译,注意在make的时候,很多博客上的大神都是教大家:make  -j 

然而在碰到处理器比较弱鸡的情况下直接套用大神的代码,Ubuntu可能就会罢工。(本人用的是host :Windows7 ,i3处理器)

还是老老实实单一的make,就OK了。这样虽然比较慢,但是稳定性好啊。

在ORB-SLAM2的源码里面Readme告诉大家:你只需要./build.sh就可以一键编译,然而,他也提到了: A powerful computer (e.g. i7) will ensure real-time performance and provide more stable and accurate results。

所以我们安装ORB_SLAM2执行:
                         chmod +x build.sh
                         ./build.sh

然后死机的问题,我们可以改变思路,一步一步的编译各个三方库才能避免终端卡死的情况。分别编译Thirdparty/DBoW2,g2o;

然后我们在编译ORB_SLAM2,在编译整个ORB_SLAM2的时候终端会提醒你找不到Pangolin,在这里下载此库即可:

git clone https://github.com/stevenlovegrove/Pangolin 

下载好之后,我们开始编译pangolin,在编译的时候新的问题又出来了,编译的时候终端显示:Could not find GLEW

此时我们按之前的思想缺什么补什么,然后在 git clone  https://github.com/nigels-com/glew ,然后我们根据Readme进行编译,这里小编用的是cmake进行编译,于是直接在readme里面知道cmake对应的命令,然后进入./build执行cmake ./cmake进行编译。接下来执行 :make -j  的时候,我们跟上面一样选择make就OK了。

接下来,我们把glew库编译好了,然后我们重新编译pangolin,接着就对整个ORB_SLAM2工程进行编译。到目前为止,你的整个工程编译通过应该没有问题了。

http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载一个序列,并解压。转到ORBSLAM2文件夹下,执行下面的命令。根据下载的视频序列freiburg1, freiburg2 和 freiburg3将TUMX.yaml分别转换为TUM1.yaml,TUM2.yaml,TUM3.yaml。将PATH_TO_SEQUENCE_FOLDER更改为解压的视频序列文件夹。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

在我自己的电脑上就变成了:

./Examples/RGB-D/rgbd_tum——Vocabulary/ORBvoc.txt——Examples/RGB-D/TUM2.yaml——/home/lidar2/ORB_SLAM2/rgbd_dataset_freiburg1_room ——/home/lidar2/ORB_SLAM2/rgbd_dataset_freiburg1_room/associations.txt

其中(“——”表示空格)。

 

编译常见的bug

一:如果你的终端显示:

Error:
CMake Error at CMakeLists.txt:20 (cmake_policy): Policy "CMP0042" is not known to this version of CMake.

解决方法:进入GLEW/build/cmake,然后打开CmakeLists,用#注释CMP0042这一行,然后加上

if(NOT CMAKE_VERSION VERSION_LESS 3.0)
    cmake_policy(SET CMP0042 NEW)
endif()

如下图

无ROS环境下在Ubuntu14.04上运行ORB-SLAM2

然后重新编译GLEW,再编译pangolin,然后再编译ORB_SLAM2.

二:在运行数据集的时候出现

   1,   终端提示:libGLEW.so.2.1: cannot open shared object file

       执行 ln -sf /home/mks/myGL/oglpg/lib/libGLEW.so.1.11.0 /usr/lib64/libGLEW.so.1.11

       把中间的路径改成自己的就可以了。

   2,   终端提示 :  Failed to open settings file at: Examples/Monocular/TUM1.yaml

这是因为你的系统里面的opencv版本过低,或者编译不同的第三方库所使用的opencv不是同一个版本的。可以参考这里的回答https://github.com/raulmur/ORB_SLAM/issues/126

在编译ORB_SLAM2的readme里面:**Required at leat 2.4.3. Tested with OpenCV 2.4.11 and OpenCV 3.2**。小编原先安装的是opencv 3.2 ,结果还是不成功。就换成了2.4.11,然后这个bug就解决了。

操作方法:

   查询自己的opencv版本:pkg-config --modversion opencv

 卸载opencv:sudo make uninstall
                       sudo rm -r release
                       sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 

下载新的opencv2.4.11:https://opencv.org/releases.html

    3,安装好下载的opencv,进行重新编译第三方库和整个系统,然后接下来跑数据集的时候,并不会提示错误,但是光标会一直闪,就是不会有反馈,和输出,也就是构建地图的过程。

       原因是:你下载的数据集里面的rgd.txt和depth.txt 需要用TUM数据集提供的数据关联插件把这两个文件进行时间和数据上的对齐。这个插件associate.py,下载地址为

https://svncvpr.in.tum.de/cvpr-ros-pkg/trunk/rgbd_benchmark/rgbd_benchmark_tools/src/rgbd_benchmark_tools/

在这个插件的目录下打开终端,执行:python associate.py /home/lidar2/ORB_SLAM2/rgbd_dataset_freiburg1_room/rgb.txt /home/lidar2/ORB_SLAM2/rgbd_dataset_freiburg1_room/depth.txt > associations.txt

接下来,你需要把上一步生成的associations.txt文件放在你运行的数据集(/rgbd_dataset_freiburg1_room)和可执行程序的文件夹里面。

大家修改一下路径就可以啦。

      4,可能在解决完插件的问题之后还会有新的问题,比如关于what(): Pangolin X11的问题:

           terminate called after throwing an instance of 'std::runtime_error'

           what(): Pangolin X11: Unable to retrieve framebuffer options abort(core dump)

解决方法是:

将源码目录Pangolin\src\display\device下的display_x11.cpp文件做如下修改(也即是注释了两行代码)

# GLX_SAMPLE_BUFFERS , glx_sample_buffers,

# GLX_SAMPLES , glx_sample_buffers > 0 ? glx_samples : 0,

一定要记住:重新cmake一下,然后make一下,没错就是要重新把ORB_SLAM2进行编译,然后再运行数据集:

./Examples/RGB-D/rgbd_tum——Vocabulary/ORBvoc.txt——Examples/RGB-D/TUM2.yaml /home/lidar2/ORB_SLAM2/rgbd_dataset_freiburg1_room /home/lidar2/ORB_SLAM2/rgbd_dataset_freiburg1_room/associations.txt

放几张运行成功的图片:

无ROS环境下在Ubuntu14.04上运行ORB-SLAM2

最后:可能大家在安装的过程中会遇见各种各样的问题,这里就是把自己遇到的一些坑拿出来跟大家一起分享,提高学习效率。

此外也希望有小伙伴跟我一起分享,我们一起探讨学习。