ORB-SLAM2 + windows + usb摄像头 项目实战(二)

前言:本博客是博主本科毕业设计时的学习、探索与总结第二篇,本篇介绍了ORB-SLAM2项目在win下编译构建的方法,以及在此基础上对原算法的修改、测试与应用展示。其中,开发环境为VS2017 + C++,并且提供了博主自己修改过的源码以供学习使用,其中难免有很多不足与疏漏之处,还望不吝赐教。


系列博客
* ORB-SLAM2 + windows + usb摄像头 项目实战(一)*


目录

  • 一、相关编译软件的安装:
    • 1. 安装 CMake 软件:
    • 2. 安装 Git 软件:
  • 二、项目三方依赖库的构建和编译:
    • 1. OpenCV库:
    • 2. DBoW2库:
    • 3. g2o库:
    • 4. Pangolin库:
    • 5. eigen库:
  • 三、ORB-SLAM2工程的构建和编译:
  • 四、ORB-SLAM2算法的修改和测试方法:


一、相关编译软件的安装:

1. 安装 CMake 软件:

CMake是一个用于工程组建以及编译的平台,我们主要用它来编译一些此项目中会用到的三方库。博主使用的3.10.2版本,软件链接 CMake-3.10.2(注意此处下载目录和下面的Git下载目录是同一个,注意不要重复下载)。
安装完成后软件界面如下
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第1张图片

2. 安装 Git 软件:

编译构建g2o库的时候需要从github上下载一些依赖项,此时需要电脑中有Git,并且还需要。软件下载地址Git-2.16.2。安装完成后打开这个软件,打开图标
这里写图片描述
在其中的命令行输入一下自己的GitHub账号和邮箱,登陆一下。

git config --global user.name "ypxsl"
git config --global user.email "[email protected]"

ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第2张图片

二、项目三方依赖库的构建和编译:

(此工程源码我已经上传到CSDN上,请直接下载然后按照以下步骤编译构建工程,下载地址 My_ORB-SLAM24Windows ,然后再在其下进行编译,为了下次还可以用这个文件编译,此处我是将其拷贝到桌面C:\Users\yp\Desktop\下的)。

1. OpenCV库:

1)OpenCV是一个用于图像处理的三方库,它的软件下载目录 Opencv-2.4.13,注意这里需要 根据VS版本选择解压不同的opencv版本的软件。

VS版本 vc编译器版本
Visual Studio 2012 vc11
Visual Studio 2013 vc12
Visual Studio 2015 vc14

2)点击安装软件,自定义安装路径,此处我是解压安装到目录G:\Program\下的,解压出来的目录如下:
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第3张图片

2. DBoW2库:

DBoW2库是项目里面 主要用来做重定位和回环检测的。重定位指图像如果变化太快,特征点跟丢之后,我们可以利用词袋模型(Bag of Word)去匹配场景中的物体,如果相似度到一定程度,则可以认为找到了之前的相似场景,则系统可以重新追踪到特征点并且运行起来;回环检测相机运行了一圈,由于累计误差会越来越大,对此,我们可以在相机回到了原来走过的位置的时候,可以利用词袋模型识别场景的方法识别出相机此刻的位置,并用这个值来优化之前的估计的轨迹,让运动轨迹更加精确。注意这个库的编译需要OpennCV库的支持,所以需要事先安装好OpennCV库。
1)打开CMake软件,点击Browse Source键,选择DBoW2库所在目录,此处我的目录是
C:\Users\yp\Desktop\My_ORB-SLAM24Windows\Thirdparty\DBoW2\
2)点击Browse Build键,选择编译文件的放置目录,此处我们在DBoW库的目录下新建一个 build文件夹,然后 点击 Browse Build 键 选择此文件夹;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第4张图片
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第5张图片
3)点击 Config 按钮 配置库,按照VS版本选择自己的编译格式,点击Finish;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第6张图片
4)然后会看到提示报错,点击ok,看红色的报错提示,可以看到报错是因为没有找到OpenCV的lib库;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第7张图片
5)将右上角的Grouped 和Advanced 框前打上勾。并点击OpenCV一栏,选择lib目录(此处目录根据自己安装的OpenCV路径而定),并将OpenCV_FOUND 后面的框打上勾,如下;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第8张图片
6)再次点击Config配置项目;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第9张图片
7)点击Generate 生成项目,并点击Open Project打开工程;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第10张图片
8)先调节Debug和Release版本,此处我整个工程使用的是Release版本,所以此处选择Release版本,注意后面的64和32位是在CMake生成项目的时候选择的,在此处不能修改,否则会出错。然后右击ALL_BUILD 键,选择生成,生成项目;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第11张图片
9)生成成功如下;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第12张图片
生成成功后会在DBoW2库目录,下面生成了lib库目录,这里生成的就是DBow2库的.lib文件:
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第13张图片
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第14张图片
至此,DBoW2库就配置生成好了。

3. g2o库:

G2o库主要是做图优化的,即优化精确计算结果。
1)同上,点击Browse Source 键选择源目录,然后在g2o库的目录下新建build文件夹,再点击Browse Build 键选择此buid文件夹作为输出目录,点击config配置,会有警告,不过不用理会。如下
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第15张图片
2)点击Generate 按钮生成,并点击Open Project打开工程;同上将项目调节成Release模式;并且右击 g2o项目,选择 属性,按下图在预处理器一栏增加WINDOWS;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第16张图片
点击确定退出,随后右击右击ALL_BUILD 键,选择生成,生成项目;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第17张图片
查看g2o库下有没有生成lib文件夹,并且其中有没有生成.lib文件;
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第18张图片
至此,g2o库编译完成。

4. Pangolin库:

Pangolin库主要是用来做系统交互和演示用的库。
1)同上,点击Browse Source 键选择Pangolin库源目录,然后在Pangolin库的目录下新建build文件夹,再点击Browse Build 键选择此buid文件夹作为输出目录,点击config配置,再点击Open Project按钮打开项目。
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第19张图片
2)注意,Pangolin库编译的时候会在git上下载一些依赖库,需要先打开Shadowsocks,下载地址:;
还需要打开Git软件,在窗口中输入

git config --global http.proxy 'socks5://127.0.0.1:1080'

ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第20张图片
点击enter。

3)接着右击ALL_BUILD 选择生成项目,因为编译生成的过程中会下载一些文件。所以需要编译时间会长一些。期间会报错 LNK1181 无法打开输入文件“pthread.lib”,无须理会。生成成功后也会在Pangolin库目录下生成lib目录,并在其中生成.lib库。

ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第21张图片
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第22张图片

5. eigen库:

Eigen库是一个模板库,无需编译。
至此,所有构建ORB-SLAM依赖的三方库都已经构建编译完毕。

三、ORB-SLAM2工程的构建和编译:

1. 在整个项目的,根目录下 新建一个build目录。
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第23张图片

2. 打开 CMake软件,和上述生成库的步骤相同,选择好源目录和生成目录(生成目录中的build文件夹需要自己创建),注意要根据自己的工程目录选择。
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第24张图片
3.点击 Config按钮会报错,主要还是Opencv库没有找好的原因。按图中步骤修改Opencv的库目录,然后点击Config 和 Generate按钮。
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第25张图片
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第26张图片

4.打开项目,先修改项目模式为64|Release 模式。直接生成会有一些报错
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第27张图片
这里写图片描述
因为还有一些库依赖没有配置好,此处我们再补充一些配置,右击ORB-SLAM2,选择属性,然后按下图增加库包含目录:
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第28张图片
按下图所示的分类,补充自己缺少的头文件包含,目录需要根据自己的项目目录而定:
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第29张图片
5.右击ALL|BUILD ,选择生成,编译成功后打开 My_Monocular 项目中的My_Monocular.cc程序,按住Crl + F5 键编译生成,出现以下界面,说明生成成功。
ORB-SLAM2 + windows + usb摄像头 项目实战(二)_第30张图片
6.项目中各个部分的代码的含义说明:
1)bin_vocabulary目录下程序,主要功能是将\My_ORB-SLAM24Windows\Vocabulary下的二进制词典文件 ORBvoc.txt文件转码成二进制格式文件ORBvoc.bin。这个工程我已经实现编译执行过了,无需再理会。
2)My_Monocular 目录是一个测试用例,用以测试算法的功能和输出。
3)ORB_SLAM2 目录下存放着算法的实现代码,一共是19个cpp文件,其中
(1)Converter.cc:实现 矩阵库eigen中的矩阵格式 和OpenCV中的矩阵的格式转换;
(2)Frame.cc: 存放了抽象的 每一帧图像的数据结构以及对每一帧的操作;
(3)FrameDrawer.cc:实现每一帧上的关键点以及图像上信息的绘制;
(4)Initializer.cc: 系统算法初始化相关的算法程序存放处;
(5)KeyFrame.cc:存放了 关键帧相关的数据结构 以及操作函数;
(6)KeyFrameDatabase.cc:存放了关键帧的数据库的相关属性 以及对这个数据库的相关操作;
(7)LocalMapping.cc:子线程1,建图线程,主要是将检测到的特征点投射到三维空间中,变成路标点,由这些路标点组成的空间的障碍物的位置和分布的过程 叫做建图;
(8)LoopClosing.cc:子线程2,回环检测线程,主要用于在摄像机回到原来走过的位置的时候,优化之前的位姿和轨迹估计;
(9)Map.cc: 存放 和地图相关的数据结构以及操作;
(10)MapDrawer.cc: 地图的绘制函数;
(11)MapPoint.cc:存放 地标点相关的数据结构以及操作;
(12)Optimizer.cc: 对计算到的位姿进行优化的相关函数存放处;
(13) ORBextractor.cc:图像中特征点的提取;
(14)ORBmatcher.cc:图像中特征点的匹配;
(15)PnPsolver.ccPnP算法的实现文件,用以存放PnP算法,PnP算法是求解相机的空间位姿的时候需要用到的一个算法;
(16)Sim3Solver.ccSim3算法的实现文件,Sim3算法主要是实现回环检测的时候 相似变换矩阵的计算;
(17)System.cc: 主线程,算法的入口,主要是读入 摄像头参数数据 和 ORB字典的数据,并且初始化四个子线程,算法开始运行;
(18)Tracking.cc:子线程3,摄像机的运动轨迹的更新与跟踪;
(19)Viewer.cc:子线程4,用Pangolin库显示摄像机三维空间位置以及交互用。

四、ORB-SLAM2算法的修改和测试方法:

由上述工程文件的分析可知,整个项目的算法都在ORB_SLAM2 项目中,如果要尝试修改算法,应该在这个目录下的源码进行,然后可以在测试工程My_Monocular中进行测试。下面一个博客会讲解这个测试工程的程序以及博主对源码做的一点点改动,以及在其他工程中调用此算法的方法。


系列博客
* ORB-SLAM2 + windows + usb摄像头 项目实战(一)*

你可能感兴趣的:(算法学习,SLAM,ORB-SLAM2,OpenCV)