ORB-SLAM2解读

  • Post author:
  • Post category:其他


以下皆以单目为主

(一)输入

  • 图像+时间戳(用于传感器融合)
  • 相机内参:zoom不可改变,否则影响焦距和成像:内参跟图像大小有关(图像缩放,内参也要相应功缩放)
  • 特征检测描述子类型,及对应描述子DBOW词袋(这里是ORB特征)

(二)数据结构


1、Fmera:

将获取的图像数据连同当前相机参数封装成



,之后主要对帧进行操作:


2、其他:


3、关系图:

(三)Tracking线程


功能:

确定每帧位姿;确定关键帧给Local Mapping


分模块:

初始化、跟踪、重定位、确定关键帧


1、初始化:

目的:每两帧2D-2D计算的位姿尺度不是统一的,需要确定较为准确的3D点,通过3D-2D获得统一尺度的位姿。

自动初始化方法:分出两个线程同时计算单应矩阵约束与基础矩阵约束,根据两种约束关系计算累计误差,由累计误差比值确定特定环境下最终选择哪一约束。


2、跟踪:

获得当前帧与MapPoint的匹配关系,一般跟踪方法:帧与帧;帧与地图。

  • 帧与帧(以下二选一):

跟最近关键帧匹配(利用词袋来辅助匹配)

根据假设运动模型估计当前帧位姿,将上一帧map point投影到当前帧来匹配

  • 帧与局部地图(必须进行):

(1)ORB-SLAM局部地图组成:

(2)MapPoint投影到当前帧经过以下过滤后,再寻找匹配:

MapPoint必须能投到当前帧上(超出边界就排除);

MapPoint在相机坐标系下深度得是正;

MapPoint在深度范围内(每个MapPoint都会计算最大最小深度)

当前视图与MapPoint平均视图方向夹角小于60(防止视角变化导致的误匹配)。


3、重定位:

  • 对关键帧序列查找找到共视帧作为后选帧;
  • 对每一关键帧DBow匹配,当匹配数超过15,EPnp计算当前帧位姿;
  • 5次RANSAC迭代,优化位姿;
  • 优化后匹配特征数若小于50,则通过候选帧MapPoint投影到当前帧寻找匹配,然后再次优化帧,直到匹配大于50则重定位成功。


4、确定新关键帧:

当两帧间隔较大,匹配到的MapPoint较少,局部优化空闲时需要添加关键帧。

(四)Local Mapping线程


功能:

局部地图维护与优化


分模块:

关键帧添加、新Map Point创建与融合、局部优化、差Map point与重叠关键帧剔除


1、关键帧添加:

确定新关键帧后,需维护Covisibility Graph,spanning tree,Map并计算该帧词袋匹配,为三角化作准备;


2、新Map Point创建:

  • 找到共视邻接关键帧(共视点数设为20);
  • 对邻接关键帧遍历,通过与当前关键帧极线上搜索并匹配;
  • 匹配后三角化计算3D点;
  • 配置MapPoint相关属性(平均视向,观测距离,最佳描述子等);
  • 检查新建MapPoint与之前MapPoint是否有交集:找到当前帧的邻接帧的邻接帧(二级邻接帧),将当前关键帧MapPoint投影到两级邻接帧上,判读同一特征下是否有多个MapPoint值,若是就选观测最多的那个;否则将新MapPoint加入每一帧上。
  • 更新了MapPoint后对Covisibility Graph和Spanning Tree更新。


3、局部BA优化:

根据Civisibility Graph确定局部关键帧并设为图节点,并将局部关键帧上的MapPoint设为图节点;图边观测值为MapPoint对应特征坐标,考虑一个像素误差*尺度作为信息矩阵;去除不好的边多次优化。


4、MapPoint和关键帧剔除:

MapPoint被观测次数少;关键帧上的MapPoint在局部关键帧中被至少3个其他关键帧观测90%以上都剔除。

(五)Loop Closing线程


功能:

克服位姿计算误差引起的尺度漂移,进而导致的轨迹误差进一步扩大


分模块:

回环检测、相似变换、闭环融合、优化Essential Graph


1、回环候选帧检测

:根据Covisibility Graph确定局部关键帧;在关键帧序列找相似度与局部关键帧相似度一样的作为候选帧;对每个候选帧检测时间一致性(当前帧前后几帧都与候选帧相似)


2、计算sim3:

当前帧与候选帧匹配后再Map point匹配,然后RANSAC计算sim3,然后互投影各自Map point寻找匹配,优化sim3 ,然后将闭环帧和其相邻帧的Map point用sim3投影到当前帧,寻找更多匹配,若匹配数大于40则计算成功。


3、闭环融合

:将当前帧对应Mappoint换成对应闭环上及其相邻帧的;重建covisibility graph;


4、优化Essential Graph:

所有关键帧作为顶点,估计量为其sim3,闭环帧不做优化;对于当前帧集合与闭环帧集合添加闭合边(观测值为两帧间的相似变化);对每个关键帧找到spanning tree中的父节点帧,添加边;边添加完后进行位姿图优化。


5、全局BA:

所有关键帧与mappoint一起作为顶点进行全局优化。



版权声明:本文为ljtx200888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。