ORB-SLAM2 系列文章:
ORBSLAM(一)理解全文的前奏篇章
本篇主要介绍:
(1)ORB-SLAM2系统架构图
(2)三大线程 执行步骤
(3)图解线程细节
(4)引入下篇问题点
(1)系统架构图
一句话总结:
以关键帧为血脉,贯穿整个SLAM系统
(2)三大线程
跟踪线程:
(1)ORB特征提取
8层金字塔提取fast角点,划分网格保证特征点提取的均匀性;
(2)通过前一帧图像估计相机的初始位姿
匀速模型预测当前相机的位置,搜索上一帧图像中的特征点在地图中对应的点云与当前帧图像匹配进行当前帧相机位姿的优化;
(3)通过全局重定位来初始化位姿
运动模式失效的情况下,则计算当前帧图像的词袋向量,利用词典选取若干备选关键帧,对备选关键帧依次执行PNP算法计算当前帧位姿,直到找到一个姿态能覆盖足够多的有效点;
(4)跟踪局部地图
初始位姿确定后,将当前帧和局部地图之间找到更多匹配点对,来优化当前的姿态;
(5)新关键帧的判断标准
决定当前帧是否是关键帧,插入局部地图线程的运行。
局部地图构建线程:
(1)关键帧插入
添加一个关键帧节点,检查与该节点有共同点云的其他关键帧,用边线连接。计算该关键帧的词袋,三角化法生成新的地图点云;
(2)地图点云筛选
三角化后的点云满足在跟踪线程中超过四分之一的图像找到改点,并且被三个关键帧观测到,则认为是有戏点云,被地图保留;
(3)新地图点云创建
三角化实现;
(4)局部BA
对当前处理的关键帧,与关键帧相连的其他关键帧,以及这些关键帧观测到的点云进行优化,所有被标记为无效的数据都会丢弃;
(5)局部关键帧筛选
局部地图检测冗余关键帧,当关键帧的90%的点都可以被其他至少三个关键帧同时观测到,则删除,这样减少了BA优化的复杂度。
闭环检测线程:
(1)候选关键帧
检测图像识别库,丢掉分值低于Smin的关键帧,所有与改关键帧相连的帧都会丢掉;
(2)计算相似变换
计算当前帧与回环帧之间的相似变换,以获得累积误差;
(3)回环融合
融合重复的地图点云,通过相似变化矫正当前帧的位姿,进行回环两端的对齐;
(4)Essential Graph优化
回环闭合的误差分散到图像中,有效的进行回环。
(3)图解线程细节
(4)下篇问题
主要讲解:ORBexteractor
1. ORBexteractor 中如何实现均匀化提取特特征点,与OpenCV中的 orb有什么区别?
2.具体讲讲什么是四叉树?如何实现的?
3.构建图像金字塔的原因及原理是?代码中用了什么track?
4.计算特征描述子主方向用了什么技巧进行加速?具体讲解下原理?
欢迎下方留言补充问题~