本文希望探讨 ORB SLAM2 跟踪的三种模式的相关细节,相比于很多对于ORB2流程详尽的介绍,我想分享的是对于这三种流程,自己产生的由浅入深的疑问,和寻找到的答案。
ORB SLAM2中的跟踪模式包括以下三种:
- TrackReferenceKeyFrame 利用参考帧跟踪
- TrackWithMotionModel 利用运动模型跟踪
-
Relocalization() 重定位跟踪
关于这三种模式,我首先能想到的问题就是
1. 分别在什么场景下会使用这三种模式,而这样安排优先级的理由是什么?
2. 在什么条件下,这些跟踪模式容易失效?
3. 这几种跟踪模式的运算量有多大?
4. 进行跟踪后,哪些变量会改变?
5. Tracking线程会生成关键帧,哪些关键帧作为关键帧被输出
问题1: 在什么场景下,哪种跟踪模式会被调用?
下面这张图解释的比较清楚。
可以看到的是,在没有任何先验信息的时候,比如初始化,或者跟丢的时候,重定位可以给出位姿的估计。
而当具有了一定先验信息,比如跟踪状态正常(什么情况下跟踪状态正常?),但是速度为空,或者刚重定位的时候,则会调用参考关键帧跟踪。(什么时候速度为空?)如果失败,系统将重置。