[Ubuntu] ORB SLAM2 编译&调试

ORB SLAM2 是 2015年比较受到关注的一篇文章,它的主要思想是借助 ORB 描述子改进了 Sparse SLAM 的性能,使得其在稳定性和速度上都达到了比较好的程度。从创新性上来讲,它的主要贡献是在跟踪、地图创建、重定位等方面统一采用了 ORB 描述子,同时在例如初始化等细节上考虑非常周全。

相对 LSD-SLAM 来说,它的理论上创新并不大,更没有 PTAM 横空出世的惊艳。但其工程实现更加完整,效果也更优益,适合学习。(另外,ORB-SLAM2 新增了支持双目和RGBD的算法,可以取得更好的效果。)

0、安装环境:
Ubuntu 14.04

1、依赖安装:
1)安装 GLEW:

2)安装 libuvc:

3)安装 Pangolin:
这是一个可视化库,作者使用它来进行一些中间结果的展示。也就是在编译这个库的时候出现了一个问题(参见相关问题1))。

PS:如果你也遇到 uvc.cpp 的编译错误,请参考相关问题1)中的解答。

2、编译 ORB-SLAM2:
1)首先clone它的源代码到ORB-SLAM2目录下:

2)运行如下命令:

如果过程中没有出错,编译过程就完成了。

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 文件夹下面并解压缩。
运行如下指令:

你会看到如下画面,分别是视频数据和地图:
Screenshot from 2016-03-16 11:39:12
Screenshot from 2016-03-16 11:39:24

注意:官方所带的 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)中的单目比一比,是不是少了讨厌的初始化过程?稳定性应该也有了较大提升。(不过中间有段LOST不知道是什么原因)

附注:
如果想了解如何在 ROS 系统上运行 ORB_SLAM2 请移步这里:[Ubuntu] ORB SLAM2 在 ROS 上编译&调试

相关问题:
1)错误:error: ‘uvc_format_desc_t’ does not name a type

使用 cmake-gui 打开 Pangolin 目录,如图所示清空最后两个uvc的内容:
CMake 2.8.12.2 - -home-skylook-Develop-AR-Pangolin-build_002

然后依次点击[Configure]、[Generate]按钮。生成工程后再次进入 Pangolin/build 目录运行:

就可以编过了。

2)错误:This file requires compiler and library support for the ISO C++ 2011 standard.
编译有些版本的 g2o 库可能会出现如下错误:

修改方法是打开 Thirdparty/g2o/CMakeList.txt 文件:
找到:

修改为:

3)错误:error: ‘setfill’ was not declared in this scope
编译如果出现如下错误:

请打开 Examples/Monocular/mono_kitti.cc 和 Examples/Stereo/stereo_kitti.cc 文件,找到:

修改为:

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 文件,查找:

修改为:

5 Comments

Add a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注