ORB-SLAM2:从编译到调试

ORB-SLAM2:从编译到调试

一、准备

  1. 已经安装好opencv2.7版本以上的ubuntu系统(之前写过类似的文章)
  2. 安装Pangolin 作为可视化和用户界面
sudo apt-get install libglew-dev  
git clone https://github.com/stevenlovegrove/Pangolin.git
(在Pangolin目录下)mkdir build
cd build
cmake ..
make -j4
  1. (以下跟随slam14讲练习的可以跳过)安装Eigen3
git clone https://github.com/eigenteam/eigen-git-mirror.git
mkdir build
cd build
cmake  ..
sudo make install
sudo cp -r /usr/local/include/eigen3 /usr/include 
  1. 安装第三方库的依赖环境(指DBoW2和G2O,ORB-SLAM2里面包含了这两个,因此只需要安装依赖环境就好):
sudo apt-get install libboost-dev
sudo apt-get install  libeigen3-dev  libsuitesparse-dev qtdeclarative5-dev qt5-qmake  libqglviewer-dev
  1. 下载安装ORB-SLAM2:
git clone https://github.com/raulmur/ORB_SLAM2.git

二、安装ORB-SLAM2

之所以把安装ORB-SLAM这部分单独提出来,是因为我在这个地方遇到了一点小问题,正常的安装其实很简单,我在台式机就是这样做的:

chmod +x build.sh
sh build.sh

它所有的操作集合在了build.sh这个文件里面。但是由于我用的是虚拟机,在执行这个命令的时候,它卡在了g2o的编译这部分,所以他出现了这个提示:

c++: internal compiler error: 已杀死 (program cc1plus)Please submit a full …………

这种情况的原因在于内存不够了,我当时选择的是2GB的内存和1G的交换空间,我本来觉得够了,但是很遗憾,它实际上是不够的。所以我用sublime或者文本编辑器打开build.sh文件。将命令分开操作,这次g2o这部分顺利的过去了,但是又卡在了ORB-SLAM的编译上。
无奈之下,我扩大了内存,当时40G的情况下内存最大是3G,还是不行,我有点懵,后来想了一下,扩大一下交换空间行不?
交换空间的扩大详见文章:https://blog.csdn.net/u011345885/article/details/73060897
所以我现在是3G内存+3G交换;这次……因为交换空间的速度明显慢于内存,所以我一点点看着它从0.6%用了一两分钟爬到100%,所以还是不行。
我本来想继续扩大内存或者交换的,但是突然想起了之前我对g2o那里的做法,一个处理不了可以把它分开进行处理吗!当时默认的命令(build.sh里面)的是 make -j,一开始我以为是只用一个核心进行处理的意思,后来看了下内存和cpu,感觉不太对,四个cpu都在100%。我上网查了一下,并没有查到,所以我用了 make -j2,这个倒是很明确,用两个处理器进行操作,两个一批进行编译,结果这次居然顺利的通过了。
因为非专业,这个原理还真是不太懂,如果大家知道麻烦告诉我一声。

三、调试

一般测试ORB-SALM都是单目和RGB-D比较多一点,双目的话,因为KITTI还是比较难下,太大了。所以优先单目和RGBD吧。
首先是数据集,TUM和KITTI两个暂时就够用了:
TUM:https://vision.in.tum.de/data/datasets/rgbd-dataset/download,这个主要是室内,单目和RGB-D
KITTI:http://www.cvlibs.net/datasets/kitti/eval_odometry.php,这个主要是室外,双目
然后是分别测试:

  1. 单目
    在ORB-SLAM下新建文件夹Data,要测试的数据解压在这里就好。
    TUM数据集分为相机fr1,fr2,fr3,对应TUM1-3.yaml;
    一般第一次测试用fr1/xyz这个数据集,这个就是x,y,z方向来回动,很简单,用来检测一下系统出没出什么问题。
    其他的数据看名字就知道,比如desk就是在桌子附近来回转,room就是在房间里面扫来扫去。
    值得注意的是,运行其他数据集的时候,单目不一定能追踪成功,在台式机上能成功的在虚拟机上也不一定能成功,这就需要我们进行一些调整,比如调整初始化需求数量啊什么的,这个关系到对slam系统的理解,就不在多嘴了。
    ,以room为例,执行命令是:
./Examples/Monocular/mono_tum  Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml   Data/rgbd_dataset_freiburg1_room
  1. RGB-D
    与单目不同,这里需要一个rgb和depth图片的关联文件,这是python2的一个脚本(注意不是Python3),代码见官网:
    https://vision.in.tum.de/data/datasets/rgbd-dataset/toolsassociate.py,可以直接下载。
    使用:在ORB_SLAM目录下终端输入
python2 Data/associate.py Data/rgbd_dataset_freiburg1_room/rgb.txt Data/rgbd_dataset_freiburg1_room/depth.txt >Data/rgbd_dataset_freiburg1_room/associate.txt

在Data/rgbd_dataset_freiburg1_room位置生成associate.txt文件;
然后执行rgb-slam命令:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml Data/rgbd_dataset_freiburg1_room Data/rgbd_dataset_freiburg1_room/associate.txt

不得不说RGB-D比单目效果要好的不少,至少在room这个数据集上表现得不错,但是在小部分数据集如fr2/pioneer_slam上面跑还是有丢追踪的情况。

剩下的,关于ORB-SLAM的改进还没有弄完,等做完再记录一下吧。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值