一起研究ORB-SLAM(二)---Tracking线程
转载自 一起研究ORB-SLAM(二)
上一篇文章我讲述就ORB-SLAM的基本流程,还记得ORB-SLAM分为哪三个主要的线程吗?在脑子里头大声的所出来吧,Tracking、LOCAL MAPPING 和 LOOP CLOSING,今天就要讲述第一个线程的所带个大家的故事。
一起研究ORB-SLAM(一)--结构和入口
小莱姆:师兄,我也想知道我是怎么样工作的,能否将的通俗一点,少点公式,多点初学者能明白的语言吧!!
今天详细的写一下关于 Tracking 线程的内容,该线程共分为五个部分,分别是对帧的初始化,相机位姿跟踪、地图局部跟踪、是否生成关键帧和生成关键帧五个部分,主要流程如下图所示的几个过程。
![](http://www.wearemonkey.com/attachment/thumb/1611/thread/18_2_1ca36c576f1069a.png)
初始化:
初始化的过程主要含有两个方法,分别是对双目或 RGBD 和单目初始化的过程,其中第一个方法 SteroInitialzation 主要是对双目和 RGBD ,而 MonocularIntialzation 是对单目进行初始化的。
相机位姿跟踪(主要是针对两个关键帧之间的优化):
该部分的代码量占了将近源代码的二分之一,所示是很重的部分 !!!
该部分主要的两个方法是对用户界面操作的时候时使用,默认是采用第一种方法,第二种方法是进行跟踪与定位。不进行地图的构建。第一种方法主要是开启建图和跟踪的工作,其中位姿跟踪的方法共分为两种,分别是分别是匀速模型跟踪和关键帧模型跟踪,分别对应的方法是 TrackWithMotionModel 和 TrackReferenceKeyFram ,下图的第一附 = 张图片是匀速模型,该模型主要默认第 K 帧的几机帧是匀速的,所以Δ R k-1 约等于 Δ R k 然后使用 g2o 进行投影优化得到一个比较稳定的值。 关键帧使用的情况是当匀速模型失败的时候,如下图第二幅所示,当参考帧是 KF 的时候, F k 默认自己的位姿和参考帧的位姿相同,从而进行优化。
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_34f4407febf8cce.png)
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_f5625134bb6c378.png)
若是图片的跟踪失败,触发重定位函数,进行帧的重定位,重定位主要使用 EPNP 方法继续求解。
步骤如下:
1. 首先通过 BOW 继续搜索,搜索到一个比较可靠关键帧,然后继续 EPNP 求解。
2. EPNP 过程:假设在世界坐标系下有 N 个 3D 点 Piw 从其中选择 4 个控制点,选择的规则是 质心 和 使用 PCA 算法在三个主方向上个选一个。
3. 使用之前的每个 3D 点找到 4 个选取值对应的 a j 点,使得
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_ab7a5c2fdbcd3a1.png)
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_39ea743b86897ba.png)
只要求出相机坐标系下的 p i c 和 c j c 即可。
根据投影模型,就可以的到下面的式子,其中λ为尺度 P 为相机的内参矩阵。
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_9863c335696b69d.png)
![](http://www.wearemonkey.com/attachment/thumb/1611/thread/18_2_3a0a886c50d79d1.png)
可以把上面的两个式子写成 MX = 0
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_eea3f44d57dd9ea.png)
然后进行特征值分解 M 矩阵!!! 其种 N 值可以选择 4 种,分别是 1 2 3 4 ORB-SLAM 中采用的是 3.
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_b0ab76cbbf6eea3.png)
在求解的过程中,可以认为四个控制点的距离是不变的,故而可以通过四个参考点进行两两组合,求出 6 个对应的距离,所以根据尺度的不变性,可以的出如下的约束。然后使用高斯牛顿法进行错误率的优化,之后得出正确的点值。
![](http://www.wearemonkey.com/attachment/1611/thread/18_2_455d168e2ee2916.png)
局部地图跟踪(附近跟自己有关的关键帧优化):
优化的是局部的,跟自己有关系的关键帧,优化
方法 1 : UpdateLocalMap()
该方法主要是找到自己有关的关键帧,形成一个集合并找到对应的关键点
方法 2 : SearchLoalPoints()
获取局部地图与当前帧的匹配
方法 3 : PoseOptimization()
优化当前的位姿
三个方法主要是为了弥补位姿跟踪过程中产生的不足。
是否生成对应的关键帧
三个关键条件: 很长时间没有插入关键帧 局部地图空闲 跟踪快要失败的时候
最后生成关键帧
主要方法是 KeyFrame( 当前关键帧,地图管理器,关键帧数据库 );
小莱姆:师兄,我终于看明白了,一些公式还是很简单的,但是还要回去补习数学知识
一起研究ORB-SLAM(二)---Tracking线程相关推荐
- ORB_SLAM2代码阅读(2)——tracking线程
ORB_SLAM2代码阅读(2)--Tracking线程 1. 说明 2. 简介 2.1 Tracking 流程 2.2 Tracking 线程的二三四 2.2.1 Tracking 线程的二种模式 ...
- ORB_SLAM2中Tracking线程
Tracking线程是ORB_SLAM2的主线程.在System.cc中,使用构造函数进行了初始化,开启了三个线程. 可执行程序->System构造函数(初始化三个线程)->处理输入的 ...
- ORB-SLAM2代码阅读笔记(五):Tracking线程3——Track函数中单目相机初始化
Table of Contents 1.特征点匹配相关理论简介 2.ORB-SLAM2中特征匹配代码分析 (1)Tracking线程中的状态机 (2)单目相机初始化函数MonocularInitial ...
- orbslam2代码详解之tracking线程——局部地图跟踪
目录 局部地图跟踪 TrackLocalMap() UpdateLocalMap() UpdateLocalKeyFrames() UpdateLocalPoints() SearchLocalPoi ...
- ORB_SLAM2中Tracking线程的三种追踪方式
1.参考关键帧追踪模式 bool Tracking::TrackReferenceKeyFrame() 对参考关键帧中的路标点进行跟踪.在Tracking线程中,每传入一帧,都会进行位姿优化. ...
- 高仙技术家|SLAM(二)——完善回环检测的视觉SLAM
高仙技术家|SLAM(二)--完善回环检测的视觉SLAM 高仙是全球较早从事自主移动技术研发与应用探索的机器人公司之一.成立至今,高仙不断打磨并完善了机器人全场景移动技术,并通过全球超过50+机型.1 ...
- LSD SLAM 的tracking部分的代码解析
首先还是放上LSD SLAM的整个代码框架,以至于读者可以清楚的知道tracking部分在整个SLAM框架中处于一个什么样的位置. LSD SLAM 的tracking部分主要做的工作 ...
- 经典算法研究系列:二、Dijkstra 算法初探
经典算法研究系列:二.Dijkstra 算法初探 July 二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...
- 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来
题目要求: 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来.(这是一道百度面试的算 ...
最新文章
- [deviceone开发]-一个很炫的手势动画示例
- 成功解决UserWarning: Update your `Conv2D` call to the Keras 2 API问题
- 4个空格和一个tab有什么区别_生姜泡水喝有什么作用?一个月之后,身体有这4个变化...
- SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)
- MapReduce中源码分析(map端的过程)
- 静态方法里面不能调用非静态属性
- Android10打断动画,Android开发(10) 动画(Animation)
- java 栈的用法_让Java程序员再次生机勃勃,还是技术的力量
- 2021年了,Transformer有可能替代CNN吗?未来有哪些研究方向?
- x265中checkMerge2Nx2N_rd0_4()分析(版本2.8)
- AQS抽象队列同步器
- 服务器被DDoS攻击,怎么破?
- 网页弹出对话框的几种代码
- 磁盘数据页的存储结构
- 从Siri到Mobile AI,华为人工智能突击苹果
- [电子设计大赛]射频宽带放大器设计报告
- 74HC1G14GV 多路复用开关 IC
- 学习记录670@项目管理之变更管理
- 设置mysql事务隔离级别
- HDMI_CECARC