ORB-SLAM2 初体验 —— 配置安装
转载请注明出处,谢谢
原创作者:MingruiYU
原创链接:https://www.cnblogs.com/MingruiYu/p/12286752.html
ORB-SLAM2作为目前应用最广泛的视觉SLAM系统,其经典和重要程度毋庸置疑。ORB-SLAM2的github文档中,提供了详尽的ORB-SLAM2配置教程,上手应该是比较容易的。本文将跟随其github文档中的配置教程,对ORB-SLAM2系统进行安装和测试。
本文要点包括:
- ORB-SLAM2的初次配置安装(包括相关依赖)
- ORB-SLAM2运行TUM fr1/desk视频序列的单目SLAM和RGB-D SLAM示例
- 解决ORB-SLAM2编译过程中报错:
error: usleep is not declared this scope - 解决ORB-SLAM2运行示例过程中提示
Failed to load module "canberra-gtk-module"
ORB-SLAM2 简介
ORB-SLAM是15年Raul等人提出的一个单目SLAM系统,其在单目SLAM领域影响广泛。详情可见论文:[Monocular] Raúl Mur-Artal, J. M. M. Montiel and Juan D. Tardós. ORB-SLAM: A Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, vol. 31, no. 5, pp. 1147-1163, 2015. (2015 IEEE Transactions on Robotics Best Paper Award). PDF.
在单目ORB-SLAM的基础上,17年Raul等人又提出了ORB-SLAM2,增加了对于双目相机和RGB相机的支持。详情可见论文:[Stereo and RGB-D] Raúl Mur-Artal and Juan D. Tardós. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras. IEEE Transactions on Robotics, vol. 33, no. 5, pp. 1255-1262, 2017. PDF.
ORB-SLAM2是一个开源系统,其完整源码可见Github: raulmur/ORB_SLAM2.该开源库具备以下特征:
- 支持单目,双目,RGB相机
- 实时计算相机位姿和稀疏的三维重建,可进行回环检测和相机重定位
- 提供运行示例:配置安装好后,可直接在KITTI, TUM, EuRoC数据集中的视频序列下运行
- 可在ROS中编译,也可以不在ROS中编译:如果只是在数据集上运行,则不需要ROS;如果需要与真实摄像头连接,在真实场景下实时运行,则需要ROS。
安装相关依赖
在了解了ORB-SLAM2的概况后,我们开始对其进行配置安装。raulmur/ORB_SLAM2/README中提供了详尽的介绍和配置教程,建议大家尽可能去看原版,这样不容易因第三方转述而产生误解。本文在其配置教程的基础上,记录了一些自己遇到的其他情况和问题。本文暂没有使用ROS。
官方教程中提到他们测试了在Ubuntu12.04/14.04/16.04下的编译配置,而本文中,我是在Ubuntu18.04下进行编译配置的,经测试应该没有问题。在安装ORB-SLAM2之前,首先要安装相关的依赖。
C++11
使用Ubuntu18.04不需要额外配置。
Pangolin
Pangolin是一个用来可视化的库,ORB-SLAM2用它来进行可视化和人机交互。其下载和安装教程可见:(https://github.com/stevenlovegrove/Pangolin)。跟随该安装教程进行即可。其中,对于Pangolin的依赖项,我只安装了Required Dependencies和Recommended Dependencies。之后按照cmake工程编译的方法进行编译即可。
OpenCV
OpenCV肯定是必不可少的了。其下载和安装教程可见:(https://opencv.org/releases/)。找到需要的OpenCV版本,对于Linux系统,应点击其中Sources,下载一个压缩文件,下载完成后应对其进行解压。其安装教程可见:(https://docs.opencv.org/4.2.0/d7/d9f/tutorial_linux_install.html)。
注:官方文档中提到他们测试了OpenCV 2.4.11和OpenCV 3.2,我使用的是OpenCV3的最新版——OpenCV 3.4.9。
Eigen3
Eigen3作为矩阵运算库,当然也是必不可少的。其下载和安装教程可见:(http://eigen.tuxfamily.org)。在ubuntu中,可以直接使用 sudo apt-get install libeigen3-dev进行安装。
注:关于Eigen3的安装路径,如果出现程序include不到Eigen3的情况,可以参考 (https://www.cnblogs.com/newneul/p/8256803.html) 对Eigen3的位置进行调整。
DBoW2 & g2o(已包含在ORB-SLAM2库的第三方文件夹中)
ORB-SLAM2使用DBoW2库的改进版进行场景识别,使用g2o库来进行非线性优化。这俩都包含在ORB-SLAM2的第三方库中,不需要自己额外安装,它们的编译会和ORB-SLAM2库的编译一起进行。
安装ORB-SLAM2
在上述依赖全部安装完毕后(除了DBoW2 & g2o),可以开始进行ORB-SLAM2的配置安装。
clone该repo:
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
使用build.sh脚本安装ORB-SLAM2和第三方库:
cd ORB_SLAM2
chmod +x build.sh
./build.sh
注:在我编译ORB-SLAM2时,报错:error: usleep is not declared this scope。google后发现,在raulmur/ORB_SLAM2的Issues中,有很多人都遇到了这个问题(Issues/337)。其解决方法很简单,参照Acerlon的回答,只需在/include/System.h文件中添加头文件#include <unistd.h>即可。虽然不知道为什么源码中没有include该头文件……
运行示例
ORB-SLAM2提供了KITTI/TUM/EuRoC数据集下的运行示例。官方文档Monocular Examples Stereo Examples RGB-D Example提供了详细的在不同数据集上运行的教程。注意不同的相机类型对应着不同的数据集,也对应着不同的运行方法。
下面就举两个我运行了的示例,以TUM数据集中的fr1/desk视频序列为例。该数据集下载链接为(https://vision.in.tum.de/data/datasets/rgbd-dataset/download),找到其中fr1/desk序列,点击tgz下载压缩文件,之后进行解压。
单目示例
根据教程中所述,运行单目TUM示例的命令为
# ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
对应不同的具体视频序列需要对该命令进行调整:
- 调整TUMX.yaml:如果视频序列是freiburg1(fr1)目录下的,则改为TUM1.yaml;如果视频序列是freiburg2(fr2)目录下的,则改为TUM2.yaml;如果视频序列是freiburg3(fr3)目录下的,则改为TUM3.yaml;
- 调整PATH_TO_SEQUENCE_FOLDER:将其改为刚才解压后视频序列文件夹的路径。
所以,在我的机器上,TUM数据集fr1/desk序列对应的单目SLAM运行命令就是:在ORB_SLAM2文件夹下的终端中输入
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ../rgbd_dataset_freiburg1_desk
注:在我第一次运行的过程中,会有提示:Failed to load module "canberra-gtk-module",虽然感觉不影响运行,但还是解决了它为好。
解决方法:
sudo apt-get install libcanberra-gtk-module
运行效果如下:

RGB-D示例
根据教程中所述,运行单目TUM示例的命令为
# ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
对应不同的具体视频序列需要对该命令进行调整:
- 调整TUMX.yaml:如果视频序列是freiburg1(fr1)目录下的,则改为TUM1.yaml;如果视频序列是freiburg2(fr2)目录下的,则改为TUM2.yaml;如果视频序列是freiburg3(fr3)目录下的,则改为TUM3.yaml;
- 调整PATH_TO_SEQUENCE_FOLDER:将其改为刚才解压后视频序列文件夹的路径。
- 调整PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE:将其改为该序列associations文件的路径。associations文件是用来将RGB图像和Depth图像一一对应起来的文件。ORB-SLAM2库Examples/RGB-D/associations/中提供了几个视频序列的associations文件,其中包含fr1/desk序列。所以此处就不需要自己生成了。
所以,在我的机器上,TUM数据集fr1/desk序列对应的RGB-D SLAM运行命令就是:在ORB_SLAM2文件夹下的终端中输入
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ../rgbd_dataset_freiburg1_desk ./Examples/RGB-D/associations/fr1_desk.txt
运行效果如下:

最后,还是推荐大家尽可能地去阅读原始文档,这样最清晰也最不容易出错。如果遇到原始文档中没有提到的问题,再广泛查阅第三方资料为好。
ORB-SLAM2 系列博文
ORB-SLAM2 初体验 —— 配置安装的更多相关文章
- Git:Git初体验——Git安装配置
作为即将成为一个程序员的男人,一直在听别人说Git多好多好,之前也随便了解了一些,但是始终没有决心去学会.现在大四了,只有毕设和一门开学六七周只去过一次课的全员必修课外,也没有什么事情做,何不去做这些 ...
- Linux初体验--配置网络(CentOS7)
在安装好虚拟机和操作系统后,一台合格的网络设备当然是要冲浪啊. 一.记下自己的网络配置 二.打开终端,输入命令 三.修改文件 保存后退出(wq). 四.重启网络服务 systemctl restart ...
- 【Android Studio】安卓开发初体验1——安装与试用
安装 (安装预留硬盘(C盘)空余空间16G以上,8G以上内存) Intel用户: 安装Android Studio和AVD(安卓虚拟机 Android Virtual Device) 安装过程需要注意 ...
- 树莓派初体验,安装Ubuntu 14.04 LTS
转载自:http://www.polarxiong.com/archives/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%88%9D%E4%BD%93%E9%AA%8C-%E5%AE ...
- VUE初体验篇-安装
现代前端框架大行其道,讲前端思想从操作dom的阶段,升级到操作数据的阶段.vue作为三大前端框架之一,其中平缓的学习曲线,让好多前端新手非常喜欢,应用也越来越广泛.虽然其他两个框架有facebook, ...
- 【Node.js】初体验之安装和HelloWorld
听说Node.js是个蛮吊的东东.中午休息时间有限,暂时看了下知道怎么安装和初步使用了. 1.安装: 到Node.js官网下载就可以了,才5M多点,双击后按步骤安装就可以了. 2."Hell ...
- Kubernetes Python Client 初体验之安装授权
最近想做一个基于flask的云平台管理服务器,利用python调用kubenetes提供的API来实现云平台的操作.笔者使用的是Windows,kubernetes集群安装在Ubuntu和Respbi ...
- 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验
----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafk ...
- PyPy初体验
PyPy初体验 PyPy安装 1.下载 下载地址:http://pypy.org/download.html(温馨提示:需要梯子) 下载PyPy3.6 64bit Ubuntu版本 解压 下载下来的文 ...
随机推荐
- 漏洞挖掘 | 远程WWW服务支持TRACE请求
允许TRACE方法 漏洞描述 目标WEB服务器启用了TRACE方法.TRACE方法是HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的 ...
- 1069 微博转发抽奖 (20分)C语言
小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整数 M(≤ 1000). ...
- oracle中使用pl/sql进行的文件读写操作
第一次知道,可以使用pl/sql来进行文件的读写操作,嘿嘿,简单的试了下可行. 基本步骤如下: SQL> conn sys/sys@orcl as sysdba 已连接. SQL> cre ...
- MinGW-W64下载与安装
安装方案 1 下载安装包,MinGW-w64 - for 32 and 64 bit Windows,然后直接以管理员安装即可,但是这个方案在部分电脑可能不行,会提示 cannot download ...
- Eclipse配置运行内存
对于一些大的项目,运行时等待过长可能出现内存溢出现象,需要重新配置IDE运行内存大小,如下: 1.配置Eclipse.ini 如图再改大点: -Xms512m-Xmx512m 2.JDK内存扩大 Wc ...
- 天天都在用Git,那么你系统学习过吗?(一)学习过程
你系统学习Git了吗? 使用Mac编程的好处,不是因为Mac长得好看 Git内容学习准备 如果你还没有用Git,就不要写代码了. GitHub仓库的使用. 新员工入职的时候,会让他先用一周的时间去学习 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子 (莫队)
题目传送门:小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… ...
- vue传值(父子传值,非父子传值)
vue组件传值,分为父子传值和非父子传值,父子传值又分为父传子和子传父. 组件之间的传值,实现了数据的联动,是从操作Dom到操作数据一个跳转性的突破,在学习vue双向绑定原理之后, 这种观念就应该继续 ...
- jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表
扩容时使用transfertransfer不同于put时的判断hash冲突,直接使用头插法,如果没有冲突,则next为null.如下:e.next = newTable[i];newTable[i] ...
- 世界500强ING集团顺利的敏捷转型之路
案例背景 为什么银行要像灰狗一样快? 荷兰国际集团(ING),成立于1991年,主营业务银行与保险业务,在全球45个国家和地区拥有分支机构,总资产887亿欧元(2018),全球53,000多名员工,拥 ...