欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

手写VIO第六讲之前端

程序员文章站 2022-03-07 11:37:07
...

手写VIO第六讲之前端


1、SLAM的框架:

  • 前端:提取特征点,追踪相机pose,定位相机
  • 后端:提供全局优化或者滑动窗口优化(后端优化主要有两种方式:基于滤波和基于优化的方式)

2、前端的具体步骤:

  • 初始化
  • 正常追踪
  • 丢失处理

3、相机和路标的建模以及初始化

对于相机pose来说,一般以旋转矩阵R和平移矩阵T来表示

对于路标点landmark来说,可能使用的参数主要有绝对坐标xyz,逆深度p,灰度值等

4、关键帧的若干问题:

  • 需不需要选择关键帧
  • 如何选择关键帧
  • 控制关键帧数量
  • 仅在关键帧中补充特征点,还是对所有帧提取新特帧点?
  • 何时进行三角化triangulation

5、SLAM问题中前端重要还是后端重要:

前端能非常体现一个SLAM的追踪效果;

在实现中,尽管后端存在明显的理论差异,很难直观体验在最终精度上

一、前端的工作

  • 实际情况与理论假设究竟有多远,一般我们假设噪声是服从高斯分布的,实际情况下噪声是否服从高斯分布。
  • 数据决定系统的质量,实际的数据到底有多好

1、那种SLAM算法效果好,可不可以比较???

ORB_SLAM2使用Covisibility-Graph;DSO使用带边缘化的滑动窗口;Tango使用MSCKF
实验效果:ORB_SLAM2具有较好的全局精度,但无回环时DSO具有飘移较少,Tango计算量明显比较小。

2、算法的结果与数据集关系很大

具体数据集由简到难:Kitti<Euroc<TUM

KITTI:视野开阔,动态物体少、标定准确

EUROC:人工设定场景,纹理丰富,曝光方式有变化

TUM-Mono:场景多样,主要为真实场景

实际工程中更多考虑的是计算量和精度的平衡

3、前端的差异导致最终的结果比较明显

  • 追踪算法是否很容易丢失
  • 算法对干扰的鲁棒性如何(光照、遮挡、动态物体

好的前端:追踪效果好,不容易丢,计算速度快,累计误差小

4、前端(视觉里程计,VO)的定性比较

手写VIO第六讲之前端

直接法的耗时与效果主要依据提取特征点的数目多少

  • 光流法最早,最成熟,缺点业比较明显(抗干扰弱,依赖角点)
  • FAST+光流是比较实用的快速算法/GFTT+光流效果更好,也具备实时性
  • 特征匹配需要提取的特征具有旋转平移缩放不变性,SIFT/SURF是最好的一类,BRISK次之,ORB算比较差的
  • 特征匹配和光流都非常依赖于角点,实际场景中不明显的很多

二、特征点提取、匹配和光流

1、一个传统的双目光流前端

手写VIO第六讲之前端

2、特征点提取

FAST/GFTT角点提取的方式:

  • FAST:仅含亮度、不含计算的快速角点提取方式
  • GFTT:在Harris基础改进:Shi-tomasi分数,增加固定选点数

3、光流

光流可以追踪一个时刻的角点在下个时刻的图像位置

基于灰度不变假设

光流在SLAM中的作用:

  • 光流可以追踪上一帧的角点
  • 可以一直追踪该角点,直到超出图像范围或被遮挡
  • 在单目SLAM中,新提取的角点没有3D信息,可以通过追踪角点在各图像的位置,进行三角化

光流的局限性:

  • 容易受光照变化的影响
  • 只适合连续图像中的短距离追踪,不适合更长距离
  • 图像外观发生明显变化时不适用(远处的角点凑近之后就不再是角点了)
  • 对角点强依赖,对Edge类型点表现较差
  • 稀疏光流不约束各点光流的方向统一,可能出现一些outlier。

三、关键帧与三角化

3.1关键帧

1、为什么需要关键帧

  • 后端通常实时性较差,不适合处理所有关键帧
  • 如果相机停止,可能给后端留下无用的优化,甚至导致后端退化

2、如何选择关键帧

关键帧之间不必太近(退化或者三角化问题)

关键帧之间不能太远(共视点太少)

VIO中,定期选择关键帧(假设bgba在关键帧期间不变)

对于非关键帧,只执行前端算法,不参与后端优化

所以,对于非关键帧,误差会逐渐累积,直到该帧被作为关键帧插入后端,BA才会保证窗口内的一致性

3、选取关键帧的策略

在计算量允许范围内,且不引起退化时,应该尽可能多地插入关键帧

4、典型SLAM系统关键帧插入策略

  • ORB_SLAM2 :使用非常宽松的关键帧策略(大多数只要后端线程空闲就会插入关键帧),然后在后端剔除冗余的关键帧
  • DSO:利用光度误差插入关键帧(插入比较频繁),在后端计算每个关键帧的Active Landmarks,Marg对窗口贡献最低,所以DSO的关键帧窗口通常有一个很远的和两三个很近的,其它几个分布在中间。

3.2 三角化

单目SLAM中,在插入关键帧时计算路标点的三角化:

  • SLAM系统在关键帧提取新Feature(DSO,SVO),也有的方案对每个帧都提新Feature(VINS,ORB)
  • 前者节省计算量(非关键帧无需提点,节省5-10ms左右),后者效果好(在单目里需要防止三角化Landmark数量不够)

理论推导:

手写VIO第六讲之前端
手写VIO第六讲之前端
手写VIO第六讲之前端

相关标签: 手写VIO