BAD SLAM 解析

介绍

​ 当时BA算法被广泛的使用在特征点法的系统中,作者认为这些方法丢弃了图像的大部分信息。并且在稠密重建中,使用完整的BA是做不到实时的。在这篇文章中,作者提出了一种改进BA算法(基于Surfels模型),可以用单个GPU就可以实现实时稠密重建。还有一个贡献就是提出一种基准数据集,在这种数据集下测试,SLAM系统都能有更好的结果。

相关工作

与本文提出的系统的差异

Frame-to-model tracking

该方法的相机位姿后期不再优化,会导致误差累积。

Map deformation

并非所有可用信息都被使用。

Pose graph optimization

​ 虽然可以简化优化问题,但也只是近似BA。

Fragment-based optimization

​ 分层优化,虽然可以减少优化的变量,但也只是近似BA。

Indirect (feature-based) BA

​ 这里的ORB-SLAM2和Bundlefusion效果都很好。

Direct BA

同时优化了相机位姿和场景参数,但是需要大量的计算时间,并且使用了离线系统。

Benchmarking RGB-D SLAM

作者提供了一个基准数据集,它是一个同步全局快门,重建结果比现有数据集更好。

数据表示

​ 作者使用场景表示是surfels,且只对关键帧进行BA。

​ 关键帧作者没有作严格的筛选,每10帧,选一帧作为关键帧。

​ 作者的surfels是一个圆盘,其包含3D圆心坐标(全局坐标系),表面的法向量,圆盘半径,描述子。 作者选择surfels是因为他们能够通过BA有效的进行融合和更新。

损失函数

image-20220219192134416

遍历所有关键帧、所有关联面元,优化几何误差和光度误差。

这两个误差项前面有偏移量%5Csigma_D%5E%7B-1%7D%5Csigma_p%5E%7B-1%7D。对于第一个偏移量,作者认为对于标定后的相机,不确定性只会出现在深度方向,所以建立一个模型来消除深度。的不确定性。第二个不确定性在于反射、光照的变化。

几何误差

image-20220219192714283

​ 将面元中心3D坐标投影到第K帧关键帧的坐标系,进而投影到第K帧关键帧像素平面,在通过深度图的深度转换到K相机坐标系。点到面的icp。

光度误差

image-20220219194235355

​这里I()不是直接用亮度值,而是用的亮度的梯度图的信息(对亮度变换更加鲁棒)这里的I()采用双线性插值进行取亮度值。这里用两个点来做,这两个点是在以面元中心p_s为圆心的圆上,而且s_1-p_ss_2-p_s正交。这里亮度值相减,本质上是梯度值,与以往的不同,这里的跨度是半径。

算法流程

创建面元

​ 首先遍历所有关键帧,为每个关键帧创建surfels,将关键帧分为若干个4*4大小的网格,将所有面元投影到网格中,每个网格中至少有一个像素与一个面元关联,如果没有,则从深度图中随机选取一个深度创建一个面元s与之关联。

面元与像素点相关联

将面元的中心坐标投影到关键帧上。首先,投影点应该在这个关键帧中。

  1. 投影点有深度测量;
  2. 深度测量足够接近面元的深度;
  3. 深度图的方向与面元的法向量足够接近;
    如果满足上述条件,则建立像素到面元关联。

面元的属性是根据创建它的像素计算的。计算面元的中心p_s、法向量n_s、半径r_s、描述符d_s

外点过滤

​ 像素与面元关联,那么这个像素需要符合一定条件:将这个像素点的3D坐标投影到其它关键帧,记录有多少关键帧可以观测到这个像素点,和没有观测到的次数。如果没观测到的次数比观测到次数多,或者观测到的次数小于一定阈值,则认为这个像素点是外点,则不对这个像素点进行关联一个面元。

面元的法线向量更新

平均与面元相关的所有像素的法线向量,然后对其进行归一化。

冲浪中心位置和描述符优化

​ 在更新完面元的法向量后,对面元的中心位置,描述子通过(1)式进行优化。这里还限制面元的中心的优化方向,只允许沿着面元的法向量方向进行优化,所以优化式子为p_s%2Bt%20%5Ccdot%20n_s,只有一个优化量t
描述符更新方法呢? ? ? ?

面融合

​ 在BA的第一次迭代,开始融合具有相似属性的面元,比如法向量接近,位置接近。为了更快的找到需要融合的面元,将面元投影到所有的关键帧中,位于同一个4*4的网格中的面元进行融合。

关键帧的姿势优化

​ 对(1)式进行高斯牛顿法进行优化。

相机内参优化

​ 同样对(1)式进行高斯牛顿法进行优化,不过这次优化的是相机内参,同时,使用深度偏移模型,建立真实深度与偏移的深度联系

image-20220219203631287

冲浪清理和更新半径

与上面的离群值过滤方法类似,将面元投影到每个关键帧,并统计该面元在关键帧集中出现的次数。

与法线向量更新方法类似,所有与面元相关的像素计算一个半径,面元半径更新为最小半径。

前端

​ 本文的主要贡献是提供了一个后端稠密的BA方法。

预处理

使用双边过滤来过滤深度图。

里程表

通过上一个关键帧,估计当前帧的位姿,使用标准的直接法,包括几何误差、光度梯度误差。 【参考】

环回检测

​ 当创建一个关键帧时(每10帧),执行回环检测。使用基于二进制特征,的词袋模型,找到当前关键帧k与历史哪个关键帧m最相似。首先通过特征匹配估计关键帧的初始相对位姿,然后通过直接法对齐。同时也对齐m-1,m+1帧,如果这些对齐,都满足一定条件(变换和角度的差异),则接受这次回环。使用刚刚算出的三个相对位姿的平均相对位姿,使用位姿图优化,随后使用作者提出的BA优化。

基准数据集

动机

​ 作者认为,在流行的TUM RGB-D 数据集中,与真实世界都多多少少有偏差,因为采集数据时,RGB图和depth图的时间不同步,深度图畸变,不能准确获得对应像素点的深度,这会导致各种RGB-D SLAM系统的运行结果也会更加不准确。

创建基准数据集

​ 作者创建基准数据集使用两种方法,一种是作者采用同步装置、全局快门相机记录数据集;另一种是在原有数据集重建出3D模型后,通过数据集原始轨迹,重新渲染数据集。作者渲染出四种数据集,卷帘快门和异步的排列组合。基于全局快门同步数据集,卷帘快门数据集是通过估计卷帘快门的时间(第一行和最后一行的时间差)来模拟卷帘快门的效果,对于异步快门数据集,RGB图像的深度对应两张时间连续的深度图像之间深度图像。

版权声明:本文为博主漫漫人生路lz原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_43216438/article/details/123037555

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年2月22日 下午6:42
下一篇 2022年2月23日

相关推荐