ORB_SLAM软件包的安装及简单测试

2024-05-25 12:18

本文主要是介绍ORB_SLAM软件包的安装及简单测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

本博客是根据参考网站翻译而来的,但原网站有些地方似乎存在少量瑕疵,本人针对具体的实施环境对于某些步骤略有修改。此外,鉴于个人英语水平有限,翻译有不足的地方望各位指正。


安装环境

  • 操作系统:Ubuntu 14.04 LTS
  • ROS版本:ROS Indigo Igloo(the full Desktop version)

先决条件

  • Boost

需要使用 Boost 库启动 SLAM 系统的各种线程。

 sudo apt-get install libboost-all-dev
  • 1

提示:安装时可能会有以下信息显示,表明已经安装了 Boost 库,

 正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成       libboost-all-dev 已经是最新的版本了。
  • 1
  • 2
  • 3
  • 4
  • ROS

需要使用 ROS 来接收来自相机或者记录序列(ros包,说白了就是一系列拍摄的图片)的图像,以及用于可视化(rvizimage_view 查看地图和图片帧)。原作者已经测试了 ORB_SLAMUbuntu 12.04+ROS Fuerte(Groovy、Hydro)以及 Ubuntu14.04+ROS Indigo 环境下的可用性。使用 ROS Indigo 版本需要移除 manifest.xml 文件(ORB_SLAM 目录下的一个文件)中的 opencv2 依赖项

  • OpenCV

需要使用 OpenCV 来处理图像特征。ROS Indigo 或者之前的版本已经预装在了 ROS 的发行版本上,如果是更新的版本,需要自行安装。ROS Indigo 自带的 OpenCV 版本为2.4.8,可通过以下命令来查看,

pkg-config --modversion opencv
  • 1
  • g2o

使用修改过的 g2o 版本(原始版本参看:https://github.com/RainerKuemmerle/g2o)来实现最优化。在编译 g2o 之前,必须预装 BLAS, LAPACK 以及 Eigen3 (至少3.1.0版本)。

sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev
sudo apt-get install libeigen3-dev
  • 1
  • 2
  • 3

提示:安装这3个库的时候也可能出现和安装 Boost 库类似的提示。

  • DBoW2

ORB_SLAM 包使用了 DBow2DLib 库中(参看:https://github.com/dorian3d/DBoW2)的部分内容来实现位置识别和特征匹配,不过并不需要额外的依赖项来编译 DBow2.


安装

1 明确已经安装了 ROS 以及所有的库依赖项(boost, eigen3, opencv, blas, lapack).

2 克隆下面的库,

git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM
  • 1

3 将 ORB_SLAM 软件包克隆所在的路径添加到 ROS_PACKAGE_PATH 环境变量中去。可在 .bashrc 文件的最后添加下面内容来实现,

export PATH_TO_PARENT_OF_ORB_SLAM=~
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:$PATH_TO_PARENT_OF_ORB_SLAM
  • 1
  • 2

说明:对于上述命令,本人是将 ORB_SLAM 克隆在了主目录下。原文中并没有这条命令,但缺少应该会出现问题。

4 编译 g2o. 进入到 Thirdparty/g2o 目录下,执行以下命令

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
  • 1
  • 2
  • 3
  • 4

5 编译 DBoW2. 进入 Thirdparty/DBoW2/ 目录下,执行以下命令

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
  • 1
  • 2
  • 3
  • 4

6 编译 ORB_SLAM.进入 ORB_SLAM 根目录下,执行以下命令

mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
  • 1
  • 2
  • 3
  • 4

使用

1 从终端启动 ORB_SLAM.(得预先将 roscore 启动)

先将 ORB_SLAM/Data/ORBvoc.txt.tar.gz 解压,以便更快地加载 ORBvoc.txt 文件。进入到 ORB_SLAM/Data/ 目录下,执行以下命令:

tar -xzvf ORBvoc.txt.tar.gz
  • 1

进入到 ORB_SLAM 目录下,运行以下命令:

rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.txt Data/Settings.yaml
  • 1

说明:原文中提供的指令格式为:

rosrun ORB_SLAM ORB_SLAM PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
  • 1

并强调说必须提供 ORB 词汇表文件(包中的ORB_SLAM/Data/ORBvoc.txt.tar.gz)和设置文件(包中的ORB_SLAMData/Settings.yaml)的绝对路径或者相对路径。所以,如果你并非在 ORB_SLAM 目录下的话,指令的格式会有所不同。

2 被 ORB_SLALM 节点处理后的图像帧被发布到话题 ORB_SLAM/Frame 中,可以通过使用 image_view 功能包来查看:

rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
  • 1

3 ORB_SLAM 节点处理得到的地图被发布到话题 /ORB_SLAM/Map 中,摄像机当前位姿(指的是相机拍照时所处的空间位置)和地图全局坐标原点通过 /tf 功能包分别发布到话题 /ORB_SLAM/Camera 和话题 /ORB_SLAM/World 中,通过运行 rviz 功能包来查看地图:

rosrun rviz rviz -d Data/rviz.rviz
  • 1

4 ORB_SLAM 节点会订阅话题 /camera/image_raw (需要将rosbag记录的图像序列或者摄像头捕获的原始图像发布到此话题上,以供 ORB_SLAM 节点进行处理),现在可以运行 rosbag(由一个图像序列生成) 或者摄像头节点(可以是自己写好的(可参考此人博客:http://blog.csdn.net/github_30605157/article/details/50990493 以及 http://blog.csdn.net/github_30605157/article/details/51020375)或者是安装别人写好的软件包(本人使用的是 ROS Indigo 发行版本自带的 usb_cam 软件包(这个需要根据自己的摄像头类型来决定))来驱动电脑的摄像头。如果已经有一个图像序列文件,可将它生成一个包,可使用下面这个工具来生成:https://github.com/raulmur/BagFromImages.

另一种使用方式:可以通过使用 roslaunch (注意要先将 ORB_SLAM/Data/ORBvoc.txt.tar.gz 解压)来启动 ORB_SLAM, image_view, rviz,效果完全等同于上面的一系列命令的执行。进入到 ORB_SLAM 目录下,运行以下命令:

roslaunch ExampleGroovyOrNewer.launch
  • 1

或者直接执行(对目录没有要求)以下命令:

roslaunch ORB_SLAM ExampleGroovyOrNewer.launch
  • 1

说明ROS Groovy以及更新的版本(包含Indigo)都可以用以上方法进行,ROS Fuerte运行的是 ExampleFuerte.launch文件


测试

原作者提供了一个完整的设置文件(Data/Settings.yaml后文将会进行说明)和由他们实验室获取到的一个rosbag(由一个图像记录序列例样生成).在这个测试序列中可以看见一个闭环检测和两次因视角改变而带来的重定位。

1 下载 rosbag 文件:

http://webdiis.unizar.es/~raulmur/orbslam/downloads/Example.bag.tar.gz.

可选的其他链接:

https://drive.google.com/file/d/0B8Qa2__-sGYgRmozQ21oRHhUZWM/view?usp=sharing

解压文件。

2 给例样序列启动 ORB_SLAM 节点,需要先解压词汇表文件(启动 ORB_SLAM 节点时需加载的一个文件:/Data/ORBvoc.txt.tar.gz,然后进入到 ORB_SLAM 目录下,执行以下命令:

roslaunch ExampleGroovyOrNewer.launch
  • 1

或者直执行以下命令:

roslaunch ORB_SLAM ExampleGroovyOrNewer.launch
  • 1

3 当 ORB_SLAM 词汇表被加载之后,进入到解压后的 Example.bag 所在的父目录下,运行 rosbag 功能包:

rosbag play --pause Example.bag
  • 1

说明rosbag play命令的使用请自行查找。


Settings.yaml文件说明

ORB_SLAM 软件包已经提供了相机标定的功能,它运行的时候会自动从一个 YAML 文件(ORB_SLAM中为Data/Settings.yaml)中读取相机标定的设置参数。在这个文件中我们可以找出相机标定所需的参数以及相关的描述信息。我们在使用 ORB_SLAM 软件包的时候需要将此文件中对应的参数设置成自己摄像头的的参数值。相机标定所需要的文件可由ROS wiki 上软件包集提供的 camera_calibration 软件包产生(或者其它什么方式),详细过程此处就不进行细说了,需要的朋友可自行了解。这个相机标定模型来自于 OpenCV.


测试失效模式说明

由上述提供的测试样例在绝大部分情况下在相机运动(指的应该是相机拍摄时的实时位姿)和纹理方面都可以期望达到和原作者提供的论文中提到的效果(参看:http://webdiis.unizar.es/~raulmur/MurMontielTardosTRO15.pdf)。但是这个单目 SLAM 解决方案在下面一些情况可能不奏效:

  • 在系统初始化的时候没有平移运动,或者太多的旋转。
  • 相机纯粹地以旋转运动采集环境信息。
  • 环境中纹理特征比较浅。
  • 太多运动的物体或者运动的物体太大,尤其是当它们的运动的速度很慢时。

系统能够在平面化或者非平面化的场景中进行初始化。但在平面化场景中,将取决于相机运动和平面的关系,也存在系统不进行初始化的情况,详细描述参看原作者论文:http://webdiis.unizar.es/~raulmur/MurMontielTardosTRO15.pdf
说明:对于上述所说的失效情况本人并没有遇到过,也没有进行验证,仅进行了简单的翻译。


参考网站

网址连接:https://github.com/raulmur/ORB_SLAM.git

这篇关于ORB_SLAM软件包的安装及简单测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001484

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h