ORB-SLAM2关键点总结

1.ORB-SLAM2的总体框架是怎样的

ORB-SLAM2一共有三个线程,分别是Tracking、Local Mapping、Loop Closing线程,,其中Tracking负责完成关键点提取,并进行帧间匹配,同时初步选取关键帧;Local Mapping线程主要进行关键点筛选和地图点剔除,同时回环进行一个局部优化;Loop Closing线程主要进行检测。

2.ORB-SLAM2怎样进行初始化

ORB-SLAM2在进行跟踪前需要先完成初始化,初始化包括相机初始帧位姿,新建地图,新建关键帧等,ORB-SLAM2一共提供三种接口,分别为单目,双目,RGBD,其中单目初始化最为复杂,具体步骤如下:

(1)寻找匹配点:对前两帧图像提取ORB特征关键点,进行特征匹配,如果匹配点个数小于100认为匹配失败;

(2)由匹配点恢复位姿:利用八点法同时计算基础矩阵和本质矩阵,通过计算评分比选择合适的结果来作为初始位姿

(3)创建初始地图:根据前两帧位姿,利用三角法恢复三维地图点,创建初始如图,将这两帧都设为关键帧,并完成关键帧与关键帧,关键帧与地图点的关联,对上述两个关键帧和地图点进行一次全局BA,并选择地图点深度的中位数作为单位尺度1来进行地图的尺寸初始化 

其中,单目初始化深度是根据三角化完成的,因此只有纯旋转是不够的,还需要进行平移。

双目和RGBD初始化不同的是,初始化不需要三角化来恢复深度,而是通过计算左右目的差别得到深度和采取特定的传感器,因此只需要一个关键帧图像,不具有上面(3)中关键帧间关联和全局BA的操作

3.ORB-SLAM2是如何进行Tracking的

Tracking的目的是兼顾计算速度和鲁棒性使得当前帧中的特征点可以跟踪匹配到上一帧,在ORB-SLAM2中一共使用了三种模型,分别是(1)运动模型;(2)关键帧模型;(3)重定位模型

(1)运动模型:假设相机运动是匀速的,根据上一帧的速度和位姿估计当前帧的位姿,然后进行跟踪匹配,也就是把地图点再投影到当前帧进行匹配,然后就可以根据BA来进行优化了,相当于经典的PnP。如果帧与帧之间都采用暴力匹配的话,运行速度会受到很大限制,因此作者采用跟踪匹配加速了匹配过程(就是将上一帧的特征点投影到下一帧中,然后在投影点的附近区域进行搜索)

(2)关键帧模型:和上一个关键帧匹配,采用BOW进行匹配加速

(3)重定位模型:和所有关键帧匹配,采用BOW进行匹配加速

这几个模型的使用规则是,(1)不好则使用(2),(2)不好则使用(3)        ·

在完成上述三个模型的匹配后,程序还会将局部地图点投影到当前帧中实现一个匹配,目的是对局部地图和局部关键帧进行更新(用于优化,以提升速度)

4.ORB_SLAM2如何选取关键帧

关键帧的选取标准是:

(1)距离上一次重定位至少距离20帧

(2)局部建图线程空闲,或者距离上一次加入关键帧过去了20帧,防止图像重叠度太高,并且局部建图线程有空闲处理新的关键帧。如果需要关键帧插入,而Local Mapping建图线程忙,则发送信号到Local Mapping建图线程,停止局部地图优化,使得新的关键帧可以被及时处理

(3)当前跟踪至少50个点,确保了跟踪定位的精确度

(4)当前帧跟踪到Local Map中参考帧的地图点数量少于90%,确保关键帧之间有明显的视觉变化

这里只是判断是否需要将当前帧加入到关键帧,并没有真正加入到全局地图,因为Tracking线程的主要作用就是局部定位,而处理地图中的关键帧、地图点,以及如何加入、如何删除的工作是在Local Mapping线程进行的

5.ORB-SLAM2中有哪些(非线性/后端)优化的相关操作

一共有五种,分别是局部BA优化、全局BA优化、闭环位姿优化、全局位姿优化、单帧BA优化

(1)局部BA优化:运行在Local Mapping线程,在剔除关键帧之前进行局部地图优化,当新的关键帧加入到convisibility graph时,作者在关键帧附近进行一次局部优化,优化目标是最小化重投影误差

(2)全局BA优化:用于单目初始化的CreateInitialMapMonocular函数以及闭环优化的RunGlobalBundleAdjustment函数(在闭环结束前新开一个线程,用于全剧优化)

(3)闭环位姿优化:当检测到闭环时,闭环连接的两个关键帧的位姿需要通过SIM3/SE3优化,以使得其尺度一致。优化求解两帧之间的相似变换矩阵,使得二维对应点的投影误差小

(4)全局位姿优化:这相当于《视觉SLAM十四讲》中的Pose Graph,值得注意的是如果是单目的话这里优化的是Sim3,如果是双目或者RGBD的话这里优化的SE3,残差定义为e_{ij} =LogSim3(S_{ij}S_{jw}S_{iw}^{-1} ),ORB SLAM2中优化的对象是Essential Graph,Essential Graph指的是所有的关键帧顶点,但是优化边大大减少,包括spanning tree(生成树)和共视权重θ > 100 的边,以及闭环连接边,闭环调整CorrectLoop过程中的优化。

(5)单帧BA优化:只优化当前帧pose,地图点固定,用于LocalTracking中运动模型跟踪、参考帧跟踪、地图跟踪TrackLocalMap、重定位,每进行过一次PnP投影操作将地图点投影到当前平面上之后,都会进行一次PoseOptimization位姿优化,通过BA优化重投影误差

上面几张图把问题描述得非常清楚,红色的是优化的对象,灰色的是固定的对象,通过对比就能知道各个优化方法之间的区别。

6.ORB-SLAM2维护了哪些图

(1)Covisibility Graph:共视图,是一个无向有权图,该图中每个顶点就是关键帧,如果两个关键帧有相同的地图点(即它们有共视点),就把这两个顶点连接起来,连接边的权重就是两个关键帧共享的3D点的个数。局部BA优化依赖的就是一个局部的共视图,全局BA优化依赖的就是一个全局的共视图,总之共视图在ORB-SLAM2里用的很多。

(2)Essential Graph:为了在优化阶段减小计算量,ORB-SLAM2作者提出了Essential Graph的概念,主要用它来进行全局位姿优化。它是共视图的子集,即Covisibity Graph的最小生成树(MST)。该图中顶点是关键帧,但只连接某个关键帧和与之拥有最多共享的地图点的关键帧,这样能够连接所有的顶点,但是边会减少很多。
(3)Spanning Graph:生成树,是代价最小的全联通图,Essential Graph就是基于Sanning Graph生成的。
如下图所示可以观察他们的区别:

7. ORB SLAM2中是如何对地图点进行筛选的?

在Local Mapping线程中在进行局部BA之前会先对地图点进行剔除,剔除规则如下:
(1)该地图点是坏点,直接从检查列表去掉;
(2)跟踪(匹配上)到该地图点的普通帧帧数(Increase Found)小于应该观测到该地图点的普通帧数量(25%*Increase Visible),即比值mnFound/mnVisible小于0.25,设置为坏点,并从检查列表去掉。比值低说明这样的地图点该地图点虽在视野范围内,但很少被普通帧检测到
(3)从添加该地图点的关键帧算起,当前关键帧至少是第三个添加该地图点的关键帧的条件下,看到该地图点的帧数<=2(双目和RGBD模式是帧数<=3),设置为坏点,并从检查列表去掉;因此在地图点刚建立的阶段,要求比较严格,很容易被剔除;而且单目的要求更严格,需要三帧都看到;
(4)若从添加该地图点的关键帧算起,一共有了大于三个关键帧,还存在列表中,则说明该地图点是高质量的,从检查列表中去掉。

总而言之就是太少帧看到的地图点是坏点都要剔除掉,而看得多的则是高质量点

8. ORB SLAM2中是如何对关键帧进行剔除的?

候选的关键帧是LocalMapping中当前处理的关键帧的共视关键帧,不包括第一帧关键帧与当前关键帧。如果一个关键帧检测到的90%的地图点,在其他不少于三个具有相同或更精确尺度的关键帧里面都被检测到,就认定该关键帧冗余(该关键帧的存在提供的地图点观测信息有限),并剔除。

9. ORB SLAM2中Loop Closing的具体实现流程是怎样的?

首先是通过回环检测(Bow得分)和共视关系检查从所有关键帧中筛选出一组和当前帧有可能形成闭环的候选帧,然后利用相似求解器Sim3Solver求解出候选帧与当前帧之间的相似变换(注意这里是单目相似变换,而双目或者RGBD是刚体变换),利用相似变换找出更多的匹配地图点,然后进行闭环位姿优化(对应5中的回答),如果优化结果较好的话就不再判断其他候选帧。然后就是闭环矫正,通过就出来的相似变换对当前帧进行位姿调整并且传播到当前帧相连的关键帧,回环两侧的关键帧完成对齐,然后利用调整过的位姿更新这些相连关键帧对应的地图点,同时在Covisibility Graph里面增加闭环边,然后进行Essential Graph的优化(即全局位姿优化),当前帧与闭环匹配帧之间的边不进行优化,最后再来一个全局BA优化即完成了Loop Closing的全部流程。

10.什么是Sim3优化

Sim3优化是单目特有的优化方式,因为单目尺度具有不确定性,对于空间点坐标有如下相似变换:

于是我们建立了一个相似变换群Sim(3)

其对应的李代数如下

相比于欧式群的李代数其多了一个σ,变成了一个七维向量,而不是六维,关联Sim(3) 和s i m ( 3 )的仍是指数映射和对数映射,指数映射为

其中

微分求导模型和扰动求导模型对其同样适用。Sim3优化其实就是Pose Graph优化,其优化目标残差是

其优化效果如下:

11.如何理解视觉重投影误差

对于单目视觉来说,3D点是通过两帧图像恢复得到的。3D点通过相机位姿重新投影到相机平面,与其对应像素点之间的像素差被称为重投影误差,也算是观察误差,投影的相机平面一般都是使用归一化平面。最终要优化的是重投影误差,理想情况下像素差是0。

12.简述PnP原理,适用的场景是什么?

答:PnP是已知n个3D点坐标和其对应的2D相机投影点坐标,求解相机位姿,其中至少需要3对点(3D-2D)可求解(平移+旋转一共6个自由度)。

其中求解方法有:DLT(直接线性变换法,至少6对点,因为旋转平移矩阵3*4个未知量),P3P(余弦定理、三角形相似),EPnP等

13.关键帧的删除

在局部建图线程,检查到当前关键帧为冗余关键帧了(里面有90%的地图点都被至少其他三帧观察到过,就会设置为冗余关键帧进行删除

14. 解释SLAM中的绑架问题

绑架问题就是重定位,是指机器人在缺少之前位置信息的情况下,如何去确定当前位姿。例如当机器人被安置在一个已经构建好地图的环境中,但是并不知道它在地图中的相对位置,或者在移动过程中,由于传感器的暂时性功能故障或相机的快速移动,都导致机器人先前的位置信息的丢失,在这种情况下如何重新确定自己的位置。
初始化绑架可以阐述为一种通常状况初始化问题,可使用蒙特卡洛估计器,即粒子滤波方法,重新分散粒子到三维位形空间里面,被里程信息和随机扰动不断更新,初始化粒子聚集到/收敛到可解释观察结果的区域。追踪丢失状态绑架,即在绑架发生之前,系统已经保存当前状态,则可以使用除视觉传感器之外的其他的传感器作为候补测量设备

参考链接:https://blog.csdn.net/weixin_46135347/article/details/120160599

https://www.cnblogs.com/linglingdog/p/15874424.html

https://blog.csdn.net/weixin_44580210/article/details/90760584

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值