ORB-SLAM2的编译运行以及TUM数据集测试

2023-05-16

近段时间一直在学习高翔博士的《视觉SLAM十四讲》,学了以后发现自己欠缺的东西实在太多,好多都需要深入系统的学习。ORB-SLAM2是一套完整的SLAM方案,提供了单目,双目和RGB-D三种接口。它能够实现地图重用,回环检测和重新定位的功能。无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车,ORB-SLAM2都能够在标准的CPU上进行实时工作。ORB-SLAM2在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法允许米制比例尺的轨迹精确度评估。此外,ORB-SLAM2包含一个轻量级的定位模式,该模式能够在允许零点漂移的条件下,利用视觉里程计来追踪未建图的区域并且匹配特征点。 可以说,ORB_SLAM2是近几年SLAM的集大成者,它吸收了近几年monoslam领域的很多理论成果,比如逆深度的使用,g2o工具箱的优化等。而且以orb特征贯穿始终,从一开始的特征处理,匹配,以及用于回环的bag-of-words,词典,全用的是orb。缺点在于它的的建图部分只含有稀疏的map point,这不仅让最终建的图很难看,而且对于机器人下一步的应用会造成很大困难。

      文章主要对ORB-SLAM2进行编译运行。以及下载TUM上的数据集。然后跑自己的数据集,以及利用笔记本摄像头进行测试。

前期准备

链接在此:https://github.com/raulmur/ORB_SLAM2

 使用git clone https://github.com/raulmur/ORB_SLAM2 下载ORB-SLAM2 根据Gthub上给的依赖项 进行安装

系统环境:

      ubuntu 16.04 LTS   安装好gcc  g++  cmake    git (这里就不细说了)

安装依赖库

(1)安装Pangolin 

       git  clone https://github.com/stevenlovegrove/Pangolin.gitcd Pangolin 进行下载

安装依赖:

a、opengl:

b、GLEW:

sudo apt-getinstall libglew-dev

c、Boost:

sudo apt-getinstall libboost-devlibboost-thread-devlibboost-filesystem-dev

d、Python2/Python3:

sudo apt-getinstall libpython2.7-dev

e、编译基础库

sudo apt-getinstall build-essential

安装Pangolin:

终端里输入

mkdir build

cd build

sudo cmake ..

sudo make-j(建议不要使用make-j,使用make。如果用make-j是使用多处理器编译,可能造成死机)

(2)安装OpenCV

安装依赖:

a、编译器相关:

sudo apt-getinstall build-essential

b、必须依赖:

sudo apt-getinstall cmake git libgtk2.0-devpkg-configlibavcodec-devlibavformat-devlibswscale-dev

c、可选安装:

sudo apt-getinstall python-devpython-numpylibtbb2 libtbb-devlibjpeg-devlibpng-devlibtiff-devlibjasper-devlibdc1394-22-dev

安装OpenCV:

a、官网下载OpenCV 2.4.11 forLinux下载地址,解压到Ubuntu中

b、进入OpenCV文件夹,配置工程

mkdirreleasecdreleasecmake -D CMAKE_BUILD_TYPE=RELEASE-D CMAKE_INSTALL_PREFIX=/usr/local ..

c、编译

makesudomakeinstall

(3)安装Eigen

下载Eigen下载地址,进入到在解压后的Eigen文件夹(例如eigen-eigen-07105f7124f9)下

mkdir buildcdbuildcmake ..makesudomake install

(7)安装BLAS and LAPACK库

sudo apt-getinstall libblas-dev

sudo apt-getinstall liblapack-dev

   g2o需要BLAS和LAPACK

(1) BLAS: Basic Linear Algebra Subprograms

提供了基本的向量和矩阵操作:

- Level-1 BLAS: 支持 标量、向量、向量-向量 操作

- Level-2 BLAS: 支持 矩阵-向量 操作

- Level-3 BLAS: 支持 矩阵-矩阵 操作

(2) LAPACK:Linear Algebra PACKage

    它调用BLAS来实现更高级的功能,支持以下操作:

- 解线性方程组

    - 线性方程组的最小二乘解

    - 特征值问题和奇异值问题

    - 矩阵分解 (LU, Cholesky, QR, SVD, Schur, generalized Schur)

    - 支持密集和带状矩阵,但不支持一般的稀疏矩阵

    - 支持单精度和双精

 DBoW2 and g2o (Included in Thirdparty folder)

   ORB_SLAM2使用修改版的DBoW2 库进行位置识别 ,使用 g2o 库进行非线性优化. 这两个修改版的库被放在第三方文件夹内.

总的对于 opencv 和 eigen3,可以简单的用一行命令来解决:

sudo apt-get install libopencv-dev libeigen3-dev libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2 libcholmod-dev  其中一部分是 g2o 的依赖项,不用太在意它的具体内容。至此,应该可以顺利编译 ORB-SLAM2 了

ORB-SLAM2进行编译

编译ORB_SLAM2库和例子程序(单目、双目和RGB-D)

cd ORB_SLAM2  

chmod +x build.sh  

 ./build.sh  

    生成的libORB_SLAM2.so位于lib目录下,可执行程序mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc and stereo_euroc位于Examples目录下。

Monocular 实例运行

在下载TUM数据集:TUM数据集 下载并解压一个序列,如:rgbd_dataset_freiburg1_desk1.tgz

然后在ORB-SLAM2目录下创建一个文件夹 Data 将数据集放置在该文件夹下,并进行解压。

cd ORB-SLAM2

mkdir  Data

tar  -zxvf   rgbd_dataset_freiburg1_desk.tgz

接下来 在终端输入

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_desk

完成运行 结果如下:

monocular  测试

RGB-D 测试实例

   按照要求下载数据集,下载的是rgbd_dataset_freiburg2_pioneer_360,将其解压到你喜欢的目录.我放在了ORB-SLAM2/Data目录下面

2.下载associate.py.放在/ORB_SLAM2/Examples/RGB-D/目录下面.

3.打开终端,进入到associate.py所在目录,即/ORB_SLAM2/Examples/RGB-D/,之后运行

python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt

这里的PATH_TO_SEQUENCE 是指的下载数据集的目录里面有depth.txt  和 rgb.txt

所以上述的我的输入:python associate.py ../../Data/rgbd_dataset_freiburg2_pioneer_360/rgb.txt ../../Data/rgbd_dataset_freiburg2_pioneer_360/depth.txt > associations.txt

运行之后在该目录中将会生成一个associations.txt文件.

4.参照所给链接中的第3步,https://github.com/raulmur/ORB_SLAM2,即

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

PATH_TO_SEQUENCE_FOLDER文件夹即为数据库所在文件夹,我的是在orbslam2工程下面,

ASSOCIATIONS_FILE即为第3步中生成的associations.txt,给出他的制定目录位置。

即:./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml Data/rgbd_dataset_freiburg2_pioneer_360 Examples/RGB-D/associations.txt

遇到的问题:

由于我之前安装的python中没有numpy模块 后面在生成associations.txt文件的时候一直报错,只需要安装 重新生成就可以了。

sudo apt-getinstall python-devpython-numpy 

运行结果:

RGB-D测试结果

跑自己的数据集测试

自己的数据集,是利用外部摄像头采集的一系列视频数据。这些数据需要进行处理,首先将视频读取成图像,再传给slam进行处理。

这里分别有myvideo.cpp 和 myvideo.yaml文件  需要将他们进入到CMakeListx.txt中。一下是给出的CMakeListx.txt  方案。

在目录./Examples新建文件夹 myvideo 将myvideo.cpp 和 myvideo.yaml文件放置在该文件夹下。

myvideo.cpp中的一些加载路径需要修改

接着在终端输入:

./Examples/myvideo/myvideo Vocabulary/ORBvoc.txt Examples/myvideo/myvideo.yaml Examples/myvideo/myvideo.mp4

运行结果:

CMakeListx.txt 

运行笔记本摄像头 测试数据

 同理 和运行自己的数据集一样,添加CMakeListx.txt 方案,和上述一样,过程也一致

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORB-SLAM2的编译运行以及TUM数据集测试 的相关文章

  • ROS和Optitrack通信

    ROS xff1a indigo Ubuntu xff1a 14 04 目的 xff1a 一台计算机通过Optitrack获得刚体 xff08 crazyflie2 0 xff09 的姿态信息并广播到同一局域网的其他计算机上 xff08 如
  • 运算放大电路(三)-加法器

    加法器 由虚短知 xff1a V 61 V 43 61 0 a 由虚断及基尔霍夫定律知 xff0c 通过R2与R1的电流之和等于通过R3的电流 xff0c 故 V1 V R1 43 V2 V R2 61 Vout V R3 b 代入a式 x
  • 一个嵌入式硬件高手的设计心得

    一 xff1a 成本节约 现象一 xff1a 这些拉高 拉低的电阻用多大的阻值关系不大 xff0c 就选个整数5K吧 点评 xff1a 市场上不存在5K的阻值 xff0c 最接近的是 4 99K xff08 精度1 xff09 xff0c
  • 跟着我从零开始入门FPGA(一周入门系列)第五

    5 同步和异步设计 前面已有铺垫 xff0c 同步就是与时钟同步 同步就是走正步 xff0c 一二一 xff0c 该迈哪个脚就迈那个脚 xff0c 跑的快的要等着跑的慢的 异步就是搞赛跑 xff0c 各显神通 xff0c 尽最大力量去跑 x
  • 硬件原理图设计规范(二)

    1 可编程逻辑器件 编号 级别 条目内容 备注 1 推荐 FPGA的LE资源利用率要保证在50 xff5e 80 之间 xff0c EPLD的MC资源的利用率要保证在50 xff5e 90 之间 对于FPGA中的锁相环 RAM 乘法器 DS
  • 嵌入式Linux应用程序开发-TCP-IP网络通信应用程序

    作为全世界最优秀的开源操作系统 xff0c Linux内部已经集成了强大的网络协议栈 xff0c 并向应用层提供丰富的系统调用 xff0c 开发者可以基于通用的系统调用接口 xff0c 使用Linux内核提供的网络功能 如果要分析Linux
  • STM32“死机“(实用调试技巧)

    2 硬件环境导致 34 死机 34 1 供电电源电压不在合适范围 单片机都需要有一个能够稳定运行的电压工作范围 xff0c 如果低于或者高于正常工作电压范围其单片机并不一定会立马无法工作 也有可能会立马死机 xff0c 而是工作一段时间在某
  • TI的ADS8320使用说明

    在调试程序的过程中遇到一个奇怪的现象 xff0c 使用ADS8320的16位AD采样温度数据 xff0c 在实际使用过程中遇到问题 xff0c 记录如下 xff1a 初始化 ADS8320 拉低片选 读取16位数据 拉高片选 使用STM32
  • [C++] 模板函数声明与实现的分离

    在使用模板时 xff0c 一般要求定义与实现在一起 xff0c 那么为了程序的统一与美观 xff0c 若想在仅在头文件中定义 xff0c 在源文件中实现 xff0c 例如 xff1a span class token comment tem
  • Android List 排序

    Android List lt Point gt 排序 1 按照x来排序 1 1升序 List points xff1b Collections sort points new Comparator 64 Override public i
  • Android反射机制

    Android反射机制实例 创建一个测试类 Person public class Person private String name 61 34 张三 34 private int age 61 15 private String de
  • 将json字符串转换为自定义对象

    将json字符串转换为自定义对象 将json转自定义对象或者List String json 61 34 34 name 34 cece 34 Gson gson 61 new Gson Person person1 61 gson fro
  • 启动一个没有注册的Activity

    废话不多说 xff0c 直接上代码 xff0c 如有不明白的可以私信留言 xff0c 一起进步 在Application 中调用即可 AndroidManifest 中已经有注册过的activity class App extends Ap
  • 将List<Object>集合(汉字、字母、数字)按照拼音来排序

    目录 将List xff1c Object xff1e 集合按照拼音来排序 1 需求 2 使用系统自带的compareTo可以排序汉字 xff0c 如果其中混入了字母 xff08 纯字母 xff09 xff0c 会直接排在汉字之前 xff0
  • 手写findviewbyid和使用注解给变量赋值

    手写findviewbyid和使用注解给变量赋值 使用到注解和反射 注解本身没有什么含义 xff0c 只有配合反射和插桩技术时才能体现价值 我们平时要初始化view都需要调用findviewbyid xff0c 那我们可不可以省去这一步呢
  • Android Studio 内无法直接运行 main 方法

    Android Studio 内无法直接运行 main 方法 在 idea 下的 gradle xml 下 GradleProjectSettings 结点增加以下代码 span class token operator lt span o
  • Android 获取文件类型

    根据文件头获取文件类型 我这里只列举了4种 xff0c 其他种类只需要替换掉对应的判断即可 span class token operator span span class token operator span span class t
  • Cygwin的安装使用,及其软件包apt-cyg的配置使用,以及apt-cyg错误“/usr/bin/apt-cyg: line 25: $‘\r‘: command not found”解决

    首先官网下载Cygwin的安装包 xff0c 然后双击开始安装 xff0c 如下选择 xff1a 接下来的安装地址你就随意了 xff0c 一直下一步到 xff0c 镜像地址的选择 xff0c 选了国内的快一些 xff0c 我这里就选了阿里
  • 大疆无人机4G/5G图传直播编码器

    M76是专为HDMI高清视频4G直播的需求 xff0c 为移动执法视频监控和远程直播开发的便携性的HDMI高清4G直播编码设备 系统采用LINUX系统和海思HiS3516 xff0c 支持H 264 H 265视频压缩技术 xff0c 支持
  • 51单片机上传数据到手机APP

    前言 xff1a 最近在指导朋友毕设时发现的一个比较简单实用的功能 实现功能 xff1a 将温度数据上传到手机APP 所需材料 xff1a 1 51单片机 2 WIFI模块 xff1a ESP8266 01S 3 温度传感器 xff1a D

随机推荐

  • ubuntu 14.04中firefox安装Adobe flash player

    1 下载adobe flash player 插件 下载地址为 http get adobe com cn flashplayer no redirect 我们选择 tar gz 的包 2 將下载好的包解压 xff0c 得到如下的文件 xf
  • 解决ubuntu 14.04 “E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)”的问题

    各位亲们在执行sudo apt get update时可能会出现如下的出错信息 xff1a E 无法获得锁 var lib apt lists lock open 11 资源暂时不可用 E 无法对目录 var lib apt lists 加
  • system settings里面的东西基本都没了

    open terminal then unity control center
  • 解决U盘中文件全部变成快捷方式的问题

    1 文件夹选项 gt 工具 xff0c 去掉勾选 隐藏受保护的操作系统文件 34 xff0c 这个时候你就可以看到原来你的文件啦 2 然后将这些文件复制到电脑里面 xff08 如 d 盘 xff09 3 格式化你的 U 盘 4 将你的文件的
  • unbuntu 14.04 中安装 codeblocs

    许多同学喜欢用codeblocks来编写程序 xff0c 那么怎么在ubuntu下安装codeblocks呢 xff1f 这里给出小编自己的安装方法 1 组件安装 在终端依次输入 xff1a sudo apt get install bui
  • ubuntu 下运行程序报错 对‘std::cout’未定义的引用

    在编译c 43 43 程序时运行gcc o fileio fileio cpp报错 xff0c 错误提示为 xff1a tmp ccinWfZ2 o xff1a 在函数 main 中 xff1a fileio cpp text 43 0x2
  • Ubuntu下Python3与Python2相互切换

    python2切换python3 设置Python2及Python3优先级 sudo update span class token operator span alternatives span class token operator
  • 超声波传感器(CH101&ch201) - Ⅱ

    文章目录 1 前言 2 目前官方发布的Horn有以下几种 3 超声波TOF传感器 VS 红外线传感器 4 开发评估套件 1 前言 上一篇简单的引入了CH101 CH201 这两种传感器 这种传感器使用的时候除了需要芯片外 还需要一个声学的
  • 了解 Spark中的master、worker和Driver、Executor

    master和worker是物理节点 xff0c 是在不同环境部署模式下和资源相关的两大内容 Driver和executor是进程 xff0c 是在spark应用中和计算相关的两大内容 1 master和worker节点 master节点常
  • 对Spark中一些基础概念的了解

    1 Driver xff1a 运行应用程序的main函数 xff0c 并创建SparkContext进程 初始化SparkContext是为了准备Spark应用程序的运行环境 xff0c 在Spark中由SparkContext负责与集群进
  • Spark学习总结

    第1章 Spark 概述 1 1 Spark是什么 Spark 是一种基于内存的快速 通用 可扩展的大数据分析计算引擎 主要用于数据计算 xff0c 经常被认为是Hadoop框架的升级版 1 2 Spark 和Hadoop的缘分 组成 Ha
  • RTMP 推送H265的实现(推流端、服务器、播放端)ffmpeg 播放H265

    众所周知的原因原生的RTMP只支持H264 并不支持H265的传输 xff0c 之前的项目基于海思3531DV200平台的多路输入 多路输出 基于FFMpeg 拉RTSP的流 然后通过海思硬件解码然后在编码成较小的分辨率 通过RTMP推流到
  • Visio画UML类图

    用Visio画UML类图 1 首先创建一个类图 接下来我们要做一下准备工作 xff0c 因为我们这里用了PSDK中的POINT类型 xff0c 在种数据类型在visio数据类型中找不到 xff0c 所以我们先得追加这个数据类型 为了便于管理
  • 二维数组的输入、输出、转置

    这里我将在二维数组中的一些基本操作进行一次整理 xff1a 编码思路 xff1a 1 inputTwoArry 输入函数 用于二维数组的初始化 xff08 也就是赋值 xff09 实现 xff1a 给函数中传入要初始化数组的地址 xff0c
  • 输入一句话,找出其中最长的单词,并输出

    理解题意 xff1a 1 先输入一句话 2 在这句话中找到最长的那个单词并输出显示 这个题是我们老师上课的时候给我们留的作业 因为刚好学过了二维数组所以果断采用二维数组来解题 个人觉得 xff0c 这个逻辑思路其实相较一维数组来解会更简单一
  • C语言:将学生信息存储到文件中

    描述 xff1a 从键盘输入两个学生的有关数据 xff0c 然后把它们转存到磁盘文件上去 基础知识点 xff1a 1 定义结构体变量 xff0c 存储复杂一点的变量 xff08 对象 xff09 2 用到了C语言中对文件的处理 3 排序 文
  • Maven的安装、配置以及在Eclipse中安装maven插件

    一 需要准备的东西 xff08 原文链接 xff09 1 首先确保安装了JDK xff0c 并且成功配置了JDK的环境变量 2 已安装Eclipse 3 Maven程序包 二 maven下载与安装 1 前往https maven apach
  • ros多机通信配置

    ros多机通信配置 xff0c 以两台计算机为例 xff0c 主机hostname为master从机hostname为slaver 1 在主机和从机 etc hosts内添加ip和hostname 例如两台计算机ip和hostname分别为
  • RS422接线方法

  • ORB-SLAM2的编译运行以及TUM数据集测试

    近段时间一直在学习高翔博士的 视觉SLAM十四讲 xff0c 学了以后发现自己欠缺的东西实在太多 xff0c 好多都需要深入系统的学习 ORB SLAM2是一套完整的SLAM方案 xff0c 提供了单目 xff0c 双目和RGB D三种接口