ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BAD SLAM 解析

2022-02-20 23:05:42  阅读:239  来源: 互联网

标签:关键帧 BA 面元 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

​ 遍历所有的关键帧,所有建立好关联的面元,进行几何误差,光度误差优化。

​ 这两个误差项前面都有一个偏置 σ D − 1 \sigma_D^{-1} σD−1​和 σ p − 1 \sigma_p^{-1} σp−1​ ,对于第一个偏置,作者认为对于一个标定好的相机,不确定性只会出现在深度方向上,所以建立一个模型消除深度上的不确定性。第二个的不确定性在于反射,光照变化。

几何误差

image-20220219192714283

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

光度误差

image-20220219194235355

​ 这里I()不是直接用亮度值,而是用的亮度的梯度图的信息(对亮度变换更加鲁棒)。这里用两个点来做,这两个点是在以面元中心 p s p_s ps​为圆心的圆上,而且 s 1 − p s s_1-p_s s1​−ps​和 s 2 − p s s_2-p_s s2​−ps​正交。

算法流程

创建面元

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

面元与像素点进行关联

​ 把面元的中心坐标投影到关键帧上,首先投影点要在这个关键帧中,

  1. 投影点具有深度测量;

  2. 深度测量值和面元的深度足够近似;

  3. 深度图的方向和面元的法向量足够近似;

    符合上述条件,那么就建立像素到面元的关联。

​ 面元的属性都是由创建它的那个像素计算而成。计算面元的中心 p s p_s ps​,法向量 n s n_s ns​,半径 r s r_s rs​,描述子 d s d_s ds​。

外点过滤

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

面元的法向量更新

​ 平均所有与该面元关联的像素点的法向量,随后进行归一化。

面元的中心位置和描述子优化

	在更新完面元的法向量后,对面元的中心位置,描述子通过(1)式进行优化。这里还限制面元的中心的优化方向,只允许沿着面元的法向量方向进行优化,所以优化式子为$p_s+t \cdot n_s$,只有一个优化量$t$。

​ 描述子更新方法呢????

面元融合

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

关键帧的位姿优化

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

相机内参优化

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

image-20220219203631287

面元清理和更新半径

​ 与上面的外点过滤方法类似,将面元投影到每个关键帧,计算这个面元在关键帧集出现的次数。

​ 与法向量更新方法类似,与面元关联的所有像素点,都计算出一个半径,该面元半径更新为最小的半径。

前端

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

预处理

​ 使用双边滤波,对深度图过滤。

里程计

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

回环检测

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

基准数据集

动因

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

创建基准数据集

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

标签:关键帧,BA,面元,BAD,SLAM,深度,解析,优化,像素点
来源: https://blog.csdn.net/qq_43216438/article/details/123037555

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有