ORB-SLAM2初步(跟踪模块)

一、跟踪模块简介

  在ORB-SLAM或其他SLAM系统中,跟踪的主要任务是根据相机或视频输入的图像帧实时输出相机位姿。在ORB-SLAM中,跟踪模块的主要任务是实时输出相机位姿和筛选关键帧,完成一个没有经过优化或者说全局优化的视觉里程计。通常根据相机的不同采用的方法也不相同,如单目除了需要进行初始化外通常根据特征匹配结果使用PnP算法求解相机位姿。

二、跟踪模块分析

  如图 是ORB-SLAM跟踪模块的技术流程图

  其流程为首先获取第一张彩色图像,然后转为灰度图,提取ORB特征,通常第一帧会构建为关键帧;

  然后进入跟踪过程(以单目为例),如果没有初始化则会进入自动初始化模块:定义参考帧和当前帧,提取ORB特征,进行特征匹配,然后分别计算单应矩阵和基础矩阵(双线程),使用H,F的判别模型判断在当前环境下使用哪个模型进行位姿求解,最后使用对应的求解方法求解H或F矩阵获取相机初始位姿,并使用三角测量计算匹配特征点的深度信息,获得3D点;

  ORB-SLAM中关于跟踪状态有两种选择(1)只进行跟踪不建图(2)同时跟踪和建图,这里以(2)为例。初始化之后ORB-SLAM有三种跟踪模型可供选择,首先假设相机恒速(即Rt和上一帧相同),然后计算匹配点数(如果匹配足够多则认为跟踪成功),如果匹配点数目较少,说明恒速模型失效,则选择参考帧模型(即特征匹配,PnP求解),如果参考帧模型同样不能进行跟踪,说明两帧键没有相关性,这时需要进行重定位,即和已经产生的关键帧中进行匹配(看看是否到了之前已经到过的地方)确定相机位姿,如果重定位仍然不能成功,则说明跟踪彻底丢失,要么等待相机回转,要不进行重置;

  假如通过一种模型完成了初始相机的位姿估计,则进一步跟踪局部地图,即和当前帧相关联的地图点做联合优化,获得一个较为准确的相机位姿;

  输出相机位姿说明跟踪过程已经完成,下面就是根据一定的判定条件判断当前帧是否可以作为关键帧输出,判定关键帧的条件一般为距上一关键帧过去了多少帧,和上一关键帧之间的匹配点的数量等。

三、跟踪模块总结

  从上面的流程可以看出,如果想进一步提升跟踪的速度,第一是从ORB特征的提取和建立描述符入手,第二是从局部地图跟踪入手,而相机初始位姿估计可能优化的余地不是很大。

后面想根据代码具体谈一谈跟踪过程的实现方式。

时间: 2024-11-22 17:57:57

ORB-SLAM2初步(跟踪模块)的相关文章

ORB SLAM2在Ubuntu 16.04上的运行配置

安装依赖 安装OpenGL 1. 安装opengl Library$sudo apt-get install libgl1-mesa-dev2. 安装opengl utility$sudo apt-get install libglu1-mesa-dev3. 安装opengl utility toolkit$sudo apt-get install freeglut3-dev 安装GLEW $sudo apt-get install libglew-dev 安装boost $sudo apt-g

cgitb--CGI跟踪模块(简化异常调试)

通过启动cgitb模块,可以在web浏览器窗口查看详细的编码异常信息,而不必不停地跳转到web服务器的日志屏幕查看,更方便的定位问题: 异常解决后需关闭CGI跟踪. 在CGI脚本最前面增加如下两行,启动python的CGI跟踪技术: import cgitb cgitb.enable()

平台建设-用户反馈跟踪模块

目标:在产品灰度或者发布后,能快速收集用户反馈信息,跟踪问题.并做每个迭代的反馈跟进,反思和追踪问题原因,如何避免等问题. 途径:爬虫获取bbs的反馈信息 以浏览器为例子: 1.技术分析,获取用户反馈爬虫用的是Jsoup,看下列关键代码: 把a标签包含所需关键字的反馈加入反馈列表,获取a标签的text和href.具体爬虫要自己看看html结构 Document doc = Jsoup.connect(url).post(); Elements ss=doc.getElementsByTag("a

EOS -- 一种灵巧的系统运行跟踪模块

EOS到底是什么词的缩写,我猜应该是Error of System.最早接触它,是在UT那会.不过那会它是被设计成一个很大的数组,也没有被包含调用函数和行号,又或是时间,只是些计数.编码时,加减一个EOS还是有点小麻烦,除了调用点外,大概需要修改多个点,比如先要定义,然后打印函数里的名字翻译等.开始的时候还行,但错误码多了后,更新就有点麻烦,只好又设计了个脚本来自动生成定义和打印函数.但终究还是不算方便,开发人员有时候更愿意用Trace来打印.当然,EOS不是万能的,有时候用Trace真比EOS

psutil一个基于python的跨平台系统信息跟踪模块

受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在python下,我们可以利用它来监视.检测和限制系统资源的使用.它提供了类似于一套控制台的指令功能,像是ps.netstat.ifconfig等等.当前这个模块支持的系统有windows/osx/linux/FreeBSD/Sun Solaris.32.64位均支持.python环境为2.6-3.5. 这里我

ORB SLAM2运行中出现(ORB-SLAM2: Current Frame:14370): GLib-GIO-CRITICAL...的n问题

在Ubuntu16.04上安装ORBSLAM2,参考文档:http://www.cnblogs.com/wongyi/p/8596084.html 执行代码: ./Examples/Monocular/mono_tum  Vocabulary/ORBvoc.txt  Examples/Monocular/TUM1.yaml  ../rgbd_dataset_freiburg1_xyz 然后它就正常执行了,但是不明白为什么中间输出的信息中含有大量的以下代码:(我是已经安装了OpenGL并且按照ht

Ubuntu14.04 使用本地摄像头跑ORB SLAM2

前面的准备: Ubuntu14.04安装 ROS 安装步骤和问题总结 Ubuntu14.04+ROS 启动本地摄像头 STEP1:第一个终端 roscore STEP2:第二个终端运行usb_cam roslaunch usb_cam usb_cam-test.launch STEP3: rosrun ORB_SLAM2 Mono /home/zc/Desktop/ORBvoc.txt  /home/zc/Desktop/Asus.yaml 我把 ./Vocabulary/ORBvoc.txt

maven结合的初步项目模块构建

我们通过自己的学习其实能够了解到maven是依赖管理和项目构建的工具 所谓的依赖管理就是我们再也不用人为的引入jar包了,那么正常情况下一个小项目里jar包所占的空间远比自己所写的代码的空间多,使用maven这是第一个很方便的点,我们最后只需要再pom.xml中引入对应的jar包的版本即可 而项目构建这个其实对于晓得项目来说我感觉没啥用,是浪费时间的一件事,但是一旦我们的项目的级别大到不是一两个人能够主宰的那种情况的话,那么maven的模块化其实是应对任务分配非常有用的一个工具了,拿普通的一个j

Netfilter之连接跟踪实现机制初步分析

Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNTRACK),顾名思义,就是跟踪并且记录连接状态.Linux为每一个经过网络堆栈的数据包,生成一个新的连接记录项(Connection entry).此后,所有属于此连接的数据包都被唯一地分配给这个连接,并标识连接的状态.连接跟踪是防火墙模块的状态检测的基础,同时也是地址转换中实现SNAT和DNAT的