前两天跑通了高博的视觉里程计代码,可以装ORBSLAM2测试一下了。久闻大名,听说是
国外研究者在近年做出的较优秀和成熟的一个视觉SLAM方案,是国内SLAM研究的一个重点案例(上个月还碰到做计算机视觉的研究生提到它)。
ORB-SLAM2支持单目、rgbd、双目接口。因为毕设研究的是双目视觉里程计,我使用了EuRoC数据集提供的双目相机的数据进行测试,系统为Ubuntu14.04。
此部分参考之前写的博客:
https://blog.csdn.net/Banmei_Brandy/article/details/89949843
里面总结了cmake3.1.4和OpenCV3.1.0库的安装,写得应该挺详细了。
(可选)安装git:
sudo apt-get install git
git可以通过git clone命令方便地从github上下载所有库和代码。因为我git clone的速度太慢,所以后面没有使用,所有东西都是去github上下载编译的。
Pangolin是一款开源的OPENGL显示库,可以用来视频显示、而且开发容易,是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。
先安装依赖项。
Glew:sudo apt-get install libglew-dev
Boost:sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
Python-dev:sudo apt-get install libpython2.7-dev
(注意要和自带Python的版本对应)
build-essential:sudo apt-get install build-essential
装完后去github下载Pangolin的源码:
https://github.com/stevenlovegrove/Pangolin
该链接提供的是较新的版本,我编译时报了一大堆错,看了许多博客,暂时不明白什么原因。最后使用了一个较旧的版本,能够成功编译安装:
https://github.com/zzx2GH/Pangolin
下载好后,解压并编译安装:
cd Pangolin
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo make install
Eigen是一个C++开源线性代数库。它提供了快速的有关矩阵的线性代数运算及求解方程等功能。
执行
sudo apt-get install libeigen3-dev
Eigen头文件存放在“/usr/include/eigen3”中。
也可以去下面链接下载更新的版本,然后用cmake-make-make install安装。
http://eigen.tuxfamily.org
Github下载:
https://github.com/raulmur/ORB_SLAM2
解压。进入文件夹。
执行
sudo vi build.sh
用编辑器打开这个文件,修改线程数,把末尾的 make -j 改成 make -j4,否则编译爆卡。vi编辑器的使用,之前博客写过。
保存好后,给它加个执行权限:
sudo chmod 777 build.sh
这里是因为ORB-SLAM2整个文件夹的修改权限都只限于root账户(“777”的权限是完全开放给所有用户)。此处也可以通过
sudo -i
暂时切换为root账户,方便执行之后的命令。
下面运行build自动安装:
./build.sh
安装完成后的目录如图:
EuRoC MAV Dataset是苏黎世联邦理工学院用微型飞行器在室内采集的数据。这篇博客给出了详细介绍:
https://blog.csdn.net/colorsky100/article/details/85331711
双目测试数据的下载地址:
https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
找到Downloads下面的data链接,进入Vicon Room随便下载一个数据包,大小1G多。
下载好后,解压。有两个大文件夹,数据存放在“mav0”中,两个相机采集的数据分别存放在 mav0/cam0/data 和 mav0/cam1/data 里面。
在ORB-SLAM2的目录下,执行
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml 数据集路径.../mav0/cam0/data 数据集路径.../mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/V10X.txt
读取词袋;读取配置参数;填写数据集的路径;最后时间序列V10X选哪一个都行,我用了V101.txt。
结果:
除了Pangolin的库编译问题,换了个旧版本以外,开跑ORB-SLAM2时报了这个错:
terminate called after throwing an instance of ‘std::runtime_error’
what(): Pangolin X11: Unable to retrieve framebuffer options
解决办法是到Pangolin\src\display\device路径下,把display_x11.cpp注释掉两行代码:
(大概一百多行的位置)
staticint visual_attribs[] =
{
GLX_X_RENDERABLE , True,
GLX_DRAWABLE_TYPE , GLX_WINDOW_BIT,
GLX_RENDER_TYPE , GLX_RGBA_BIT,
GLX_X_VISUAL_TYPE , GLX_TRUE_COLOR,
GLX_RED_SIZE , 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_ALPHA_SIZE, 8,
GLX_DEPTH_SIZE, 24,
GLX_STENCIL_SIZE, 8,
GLX_DOUBLEBUFFER , glx_doublebuffer ? True : False,
//注释这一行 GLX_SAMPLE_BUFFERS , glx_sample_buffers,
//注释这一行 GLX_SAMPLES , glx_sample_buffers > 0 ? glx_samples : 0,
None
}
然后通过cmake-make-make install重新编译安装一遍Pangolin。再跑就没问题了。