论文阅读之《Parallel Tracking and Mapping for Small AR Workspaces》


本篇文章记录自己在阅读PTAM论文时整理的一些要点。

PTAM,是最早提出将Track和Map并行处理的一种SLAM算法,是一种基于关键帧非线性优化单目视觉SLAM算法。PTAM的贡献是具有重大意义的:

  • 首次实现跟踪与建图的并行化;
  • 首次使用非线性优化,替代传统滤波器后端方案;
  • 引入关键帧机制。

缺点:适用场景小,跟踪容易丢失。

Tracker线程

鲁棒估计相机运动。

主要任务

  • 估计相机位姿,使用Map完成追踪(初始化时使用2D-2D方法估算初始位姿,后续过程使用3D-2D方法追踪)
  • 与Map线程通信,选取添加关键帧到缓存队列,进而发送到Map
  • 构建关键帧,关键帧的选择
  • 地图初始化
  • 重定位

Tracking线程也用到关键帧,每一个新的图像帧都会在追踪过程进行之前构建一个关键帧。但,大部分关键帧都被丢弃,未被丢弃的关键帧加入到Map,这些是真正意义上的关键帧。

重要函数

  1. MakeKeyFrame_Lite:使用当前帧构建初始关键帧

  2. TrackForInitialMap地图初始化。由于刚开始没有地图,需要在双目图像帧(使用的是第一帧图像以及有足够平移的另一帧图像,保证双目模型的基线满足)中进行简单的Patch搜索。Patch搜索是在TrailTracking_Advance进行的。具体过程如下:

    • 第一帧图像构建初始关键帧(该过程检测FAST角点),调用TrailTracking_Start函数,完善关键帧结构,包括对金字塔层级所有图像中的FAST角点非极大值抑制,并使用Shi-Tomasi方法计算角点得分,选取高得分角点(作为候选关键点);
    • 根据Shi-Tomasi得分,对上述候选关键点排序,将这些候选关键点全部加入待追踪/匹配集合,并提取它们的局部Patch;
    • 正向搜索。第二帧(合适的、距离第一帧有一定距离)图像构建初始关键帧,调用TrailTracking_Advance函数,对于上一帧关键帧中的每一个$Corner_i$的$Patch_i$,在当前关键帧的FAST角点中基于SSD匹配(是块匹配),搜索最佳的角点$Corner_j$,提取$Corner_j$的局部块$Patch_j$;
    • 反向搜索(Cross Check Test?)。在上一帧关键帧中的FAST角点中搜索与$Pathc_j$匹配的最佳的角点$Corner_k$;
    • 判断$i-k<=2$,则$Corner_j$是$Corner_i$的匹配关键点;如果没找到$Corner_i$的匹配点,则将$Corner_i$删除,是从待追踪/匹配集合中删除,而不是从关键帧候选关键点集合中删除(后面三角化完成之后还会根据候选关键点集合,采用极线搜索添加三维地图点,所以这里不会删除候选关键点);
    • 如果追踪/匹配到的角点对数量>=10,则用这些匹配到的点对,调用InitFromStereo函数,求取两个关键帧的初始位姿和初始地图:
      • 使用单应矩阵求位姿,作为相机初始位姿;
      • 设置尺度,缩小为实际距离的0.1倍;
      • 使用匹配点对三角化求三维地图点(三角化参考博客),Triangulate函数得到第一视图坐标系下的坐标;
      • 全局BA优化三维地图点和相机位姿;
      • 极线搜索添加三维地图点。将地图点对应的二维坐标周围10*10区域内的候选关键点删除,使用剩下的候选关键点进行极线搜索,并三角化添加三维地图点,极线搜索是在最新的关键帧与其最近的关键帧之间进行的;
      • 统一世界坐标系。
    • 至此,TrackForInitialMap函数完成地图初始化
  3. PredictPoseWithMotionModel:减速运动模型(匀速运动模型使用比较多)预测相机位姿

    • 计算上一帧图像高斯模糊小图的雅可比矩阵
    • 采用ESM(Efficient Second-order Minimization)跟踪算法跟踪当前帧,计算当前帧图像相对于上一帧图像的旋转矩阵
  4. TrackMap:使用估算的位姿,将所有地图点投影到当前帧图像,不在当前帧图像中的地图点丢弃

    • 根据预测的相机位姿,将当前所有世界点根据小孔成像原理进行投影,投影后的像素点记为pi,并计算出对应的金字塔层级
    • 根据金字塔高层优先原则,选取一定数量世界点(通常,粗搜索选取30~60个,细搜索选取1000个左右)

Mapping

从之前观测到的视频帧中产生三维地图点特征。

主要任务:

  • 从缓存队列中提取关键帧到地图
  • Global BA
  • Local BA:只调整一部分关键帧的位姿,以及这些关键帧对应的所有地图点的位置。PTAM中调整地图中最新的5个关键帧的位姿。
  • 极线搜索添加新的地图点到地图
  • 数据关联的细化

优先级:关键帧插入>BA>数据关联细化操作。

地图 Map

  • 3D Point Features
  • Keyframes

地图点

  • 每个地图点MapPoint保存第一次观测到该地图点的关键帧索引,保存该地图点对应的特征点所在金字塔层级,以及在该层级图像中的像素坐标
  • 每个地图点对应一个观测结构Measurement,该结构中保存地图点在关键帧图像中的金字塔层级、像素坐标以及观测来源,即该地图点是如何观测到的

关键帧 Keyframes

每个关键帧包括四层金字塔图像,下采样(四个像素的平均)得到的低分辨率的上层图像,每一层为一个数据结构Level,金字塔每层图像(每层Level)保存该层图像上的所有的FAST角点,它们经过Shi-Tomasi得分筛选之后,成为关键点候选Candidate,即可能会对应一个三维地图点,这些候选能够生成三维地图点的方式:

  • Patch匹配三角化得到三维地图点
  • 极线搜索三角化得到三维地图点
  • ….

构造金字塔的目的:加快匹配;提高地图点相对于相机远近变化的鲁棒性。

  • 每个关键帧中保存所有与其关联的(该关键帧观测范围内的)地图点

  • 每个关键帧中的金字塔图像中保存候选的关键点,会在后续过程中三角化生成地图点

关键帧有关的操作

  • 关键帧构建(MakeKeyFrame_Lite函数)过程/初始化,在关键帧四层金字塔,即四层图像中,进行FAST角点的检测,没有非极大值抑制(其实是在Tracking线程中进行);
  • 关键帧初始化过程使用Tracking线程估计的相机位姿和特征点的观测数据;
  • Tracking线程只测量图像帧中潜在视觉特征的一部分,Mapping线程将这些特征反投影、测量其他的特征。即与关键帧关联的地图点可能是Tracking线程得到的,可能是Mapping线程得到的;
  • Mapping线程(MakeKeyFrame_Rest函数)对FAST角点进行极大值抑制,使用Shi-Tomasi分数,确定生成地图点的候选特征点;候选特征点对应的地图点如果距离已有的观测地图点比较近,这些候选特征点将会被剔除。

关键帧加入地图的条件

  • 关键帧追踪的质量达到标准;
  • 距离上一次加入的关键帧已经超过20个图像帧;
  • 相机必须与地图中已有的最近关键点保持最小距离,需要保证三角化的基线不能过大、过小。最小距离取决于观测到的特征的平均深度值,即观测到的特征距离相机越远,关键帧之间的距离就越大。

Map初始化????

地图初始化过程需要前两帧图像,前两帧图像都设定为关键帧。随着相机的运动,新的关键帧和地图点被加入到地图中。

  • 首先在第一帧关键帧中检测1000个FAST角点,构成2D图像块;
  • 在第二帧图像中追踪上述图像块;
  • 采用五点法对极约束,求取基础矩阵,提取两帧图像之间的旋转和平移;
  • 同时使用RANSAC方法剔除异常点;
  • 使用匹配到的点对,三角化生成三维地图点,建立初始地图。

特征点三角化

基于关键帧图像,三角化获取特征点的三维坐标信息,该过程一个关键帧是无法完成的,需要两个关键帧。PTAM选择地图中已有的最近的两个关键帧进行三角化操作。使用对极搜索获取两个关键帧中的关联特征,关联过程为:

  • 对于第一个关键帧图像中的某个特征,提取其像素坐标周围的局部像素块P;
  • 在第二帧关键帧图像中的极线上搜索与P最接近的像素块,确定关联特征的位置;
  • 两个像素块的比较使用zero-mean SSD,并且只在相同的金字塔层级内进行;
  • 一旦匹配到一对特征点,则采用三角化方法求取新的地图点,并将新的地图点插入地图。

Bundle Adjustment

全局的BA能够调整所有关键帧的位姿以及所有地图点的位置。

全局BA利用了SFM问题固有的稀疏性,将三次代价矩阵分解的复杂性从$O((N+M)^3)$降低为$O(N^3)$。

有新的关键帧插入Maping线程时,会中断BA操作,保证新的关键帧可以及时插入地图中。

局部BA的复杂性也是和地图的大小有关的。

数据关联细化

BA收敛并且不再需要新的关键帧时,即相机已经处于一个建图比较理想的环境中,此时Mapping处于空闲状态,可以进行地图的优化,即数据关联的细化。

数据关联的细化主要是通过在旧的关键帧中进行新的测量来完成的,可以是测量新加入的地图点在旧的关键帧中的位置,例如,通过对极搜索新加入的特征点,对其进行的初始测量只和两个关键帧有关联,即进行对极约束的两个关键帧。但是其他的关键帧也可能会观测到该特征点;也可以是再次进行异常点测量。

该过程优先级低于BA。

参考资料

  1. 墙裂推荐:https://github.com/Ewenwan/MVision/tree/master/vSLAM/PTAM
  2. https://blog.csdn.net/ilotuo/article/category/6297333
  3. https://blog.csdn.net/u013925378/article/details/77455555
  4. https://blog.csdn.net/u011178262/article/details/79315782
  5. https://blog.csdn.net/u011178262/article/details/86729887

本文标题:论文阅读之《Parallel Tracking and Mapping for Small AR Workspaces》

文章作者:阿翔

发布时间:2019年05月20日 - 21:05

最后更新:2019年05月28日 - 21:05

原始链接:http://ttshun.com/2019/05/20/论文阅读之《Parallel Tracking and Mapping for Small AR Workspaces》/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

点击给我一些鼓励叭!
-------------本文结束感谢您的阅读-------------
0%