这里主要介绍在安装和使用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()
如下图
然后重新编译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
放几张运行成功的图片:
最后:可能大家在安装的过程中会遇见各种各样的问题,这里就是把自己遇到的一些坑拿出来跟大家一起分享,提高学习效率。
此外也希望有小伙伴跟我一起分享,我们一起探讨学习。