[Ubuntu] ORB SLAM2 编译&调试
ORB SLAM2 是 2015年比较受到关注的一篇文章,它的主要思想是借助 ORB 描述子改进了 Sparse SLAM 的性能,使得其在稳定性和速度上都达到了比较好的程度。从创新性上来讲,它的主要贡献是在跟踪、地图创建、重定位等方面统一采用了 ORB 描述子,同时在例如初始化等细节上考虑非常周全。
相对 LSD-SLAM 来说,它的理论上创新并不大,更没有 PTAM 横空出世的惊艳。但其工程实现更加完整,效果也更优益,适合学习。(另外,ORB-SLAM2 新增了支持双目和RGBD的算法,可以取得更好的效果。)
0、安装环境:
Ubuntu 14.04
1、依赖安装:
1)安装 GLEW:
1 | sudo apt-get install libglew-dev |
2)安装 libuvc:
1 2 3 4 5 6 | git clone https://github.com/ktossell/libuvc cd libuvc mkdir build cd build cmake .. make && sudo make install |
3)安装 Pangolin:
这是一个可视化库,作者使用它来进行一些中间结果的展示。也就是在编译这个库的时候出现了一个问题(参见相关问题1))。
1 2 3 4 5 6 | git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake -DCPP11_NO_BOOST=1 .. make -j |
PS:如果你也遇到 uvc.cpp 的编译错误,请参考相关问题1)中的解答。
2、编译 ORB-SLAM2:
1)首先clone它的源代码到ORB-SLAM2目录下:
1 | git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 |
2)运行如下命令:
1 2 3 | cd ORB_SLAM2 chmod +x build.sh sh build.sh |
如果过程中没有出错,编译过程就完成了。
3、运行(基本例程):
1)运行单目 SLAM:
我们这里采用 freiburg1_desk 数据,可以从这里下载:
http://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_desk
或者从我的百度网盘下载:
http://pan.baidu.com/s/1brJJC6
该数据集是一个典型的桌面小场景数据,和AR的需求比较接近。将这个数据集放在 ORB_SLAM2 下的 Data 文件夹下面并解压缩。
运行如下指令:
1 | ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_desk |
注意:官方所带的 TUM1.yaml 是针对所有 freiburg1 的测试数据的。同理 TUM2.yaml 是针对 freiburg2 测试数据,使用时注意匹配。
另外 KITTI 的数据也提供了 Demo,具体请看官方的说明:
https://github.com/raulmur/ORB_SLAM2
2)运行双目 SLAM:
数据实在太大了,没下下来,嗯。。。
具体请看官方的说明:
https://github.com/raulmur/ORB_SLAM2
3)运行 RGBD SLAM:
我们这里仍然采用 freiburg1_desk 数据,下载方式参见1)中的地址。但是 RGBD 的数据处理需要一个工作,就是将 RGB 图和深度图合在一起。我们这里采用 TUM 提供的 associate.py 脚本:
http://pan.baidu.com/s/1o7pt258
下载后放在 ORB_SLAM2 跟目录下,运行如下命令:
1 | python associate.py Data/rgbd_dataset_freiburg1_desk/rgb.txt Data/rgbd_dataset_freiburg1_desk/depth.txt > Data/rgbd_dataset_freiburg1_desk/associations.txt |
执行完毕后就可以使用如下命令运行测试程序:
1 | ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml Data/rgbd_dataset_freiburg1_desk Data/rgbd_dataset_freiburg1_desk/associations.txt |
和1)中的单目比一比,是不是少了讨厌的初始化过程?稳定性应该也有了较大提升。(不过中间有段LOST不知道是什么原因)
附注:
如果想了解如何在 ROS 系统上运行 ORB_SLAM2 请移步这里:[Ubuntu] ORB SLAM2 在 ROS 上编译&调试。
相关问题:
1)错误:error: ‘uvc_format_desc_t’ does not name a type
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Building CXX object src/CMakeFiles/pangolin.dir/video/drivers/uvc.cpp.o Building C object src/CMakeFiles/pangolin.dir/fonts.c.o /home/skylook/Develop/AR/Pangolin/src/video/drivers/uvc.cpp: In member function ‘void pangolin::UvcVideo::InitDevice(int, int, const char, int, int, int, int)’: /home/skylook/Develop/AR/Pangolin/src/video/drivers/uvc.cpp:157:11: error: ‘uvc_format_desc_t’ does not name a type const uvc_format_desc_t uvc_fmt = uvc_get_format_descs(devh_); ^ /home/skylook/Develop/AR/Pangolin/src/video/drivers/uvc.cpp:158:12: error: ‘uvc_fmt’ was not declared in this scope while( uvc_fmt->bFormatIndex != ctrl_.bFormatIndex && uvc_fmt ) { ^ /home/skylook/Develop/AR/Pangolin/src/video/drivers/uvc.cpp:162:8: error: ‘uvc_fmt’ was not declared in this scope if(uvc_fmt) { ^ make[2]: *** [src/CMakeFiles/pangolin.dir/video/drivers/uvc.cpp.o] Error 1 make[1]: *** [src/CMakeFiles/pangolin.dir/all] Error 2 make: *** [all] Error 2 |
使用 cmake-gui 打开 Pangolin 目录,如图所示清空最后两个uvc的内容:
然后依次点击[Configure]、[Generate]按钮。生成工程后再次进入 Pangolin/build 目录运行:
1 | make |
就可以编过了。
2)错误:This file requires compiler and library support for the ISO C++ 2011 standard.
编译有些版本的 g2o 库可能会出现如下错误:
1 | error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. |
修改方法是打开 Thirdparty/g2o/CMakeList.txt 文件:
找到:
1 | SET(g2o_CXX_FLAGS) |
修改为:
1 | SET(g2o_CXX_FLAGS "-std=c++0x") |
3)错误:error: ‘setfill’ was not declared in this scope
编译如果出现如下错误:
1 2 | Examples/Stereo/stereo_kitti.cc:159:26: error: ‘setfill’ was not declared in this scope ss << setfill('0') << setw(6) << i; |
请打开 Examples/Monocular/mono_kitti.cc 和 Examples/Stereo/stereo_kitti.cc 文件,找到:
1 | #include<iostream> |
修改为:
1 2 | #include<iostream> #include <iomanip> |
4)错误:YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
编译时如果出现如下错误:
AssignEvaluator.h:834:3: error: static_assert failed "YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY"
请打开 Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h 文件,查找:
1 | typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix; |
修改为:
1 | typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::StorageIndex> PermutationMatrix; |
Thanks for sharing. Got a libGLEW problem while running as following:
cwu@ubuntu:~/project/ORB_SLAM2$ ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ~/Downloads/rgbd_dataset_freiburg/
./Examples/Monocular/mono_tum: error while loading shared libraries: libGLEW.so.1.12: cannot open shared object file: No such file or directory
Any thoughts? Thanks a lot.
博主,之前看你的博客有一段时间搜不到了,最近重新发现,那个用ROS运行ORBSLAM的配置过程找不到了。。。可以重新发出来吗?谢谢~!
https://www.liuxiao.org/2016/07/ubuntu-orb-slam2-%E5%9C%A8-ros-%E4%B8%8A%E7%BC%96%E8%AF%91%E8%B0%83%E8%AF%95/
是 Ubuntu 环境吗?是否正确安装了 Pangolin 和 GLEW?
您好,博主,我编译通过以后,运行数据集只出现数据视频,地图(Map Viewer)为黑屏,请问这是什么原因??