GS-SLAM论文阅读笔记--MM-Gaussian

介绍

这是一篇多模态的GS-SLAM,也已经被IROS2024录用。由于多传感器融合的GS-SLAM还是比较少的,所以应该仔细阅读一篇。


文章目录


1.背景介绍

  1. 传统的SLAM方法往往受到地图表示的限制,如点云,surfel和voxel,它们只能以固定的分辨率重建地图。这一限制阻碍了对场景复杂纹理的捕捉,并阻碍了SLAM实现合成新视点等功能.此外,户外场景由于其无界特性,带来的挑战呈现出特别的复杂性。
  2. 现存方法通常是基于RGB-D或单目相机。单目相机中深度数据的缺失会导致三维高斯分布的不准确。同时,RGB-D相机捕获的深度信息范围有限,使其在广阔的户外场景中的使用变得复杂。
  3. 我们观察到现实世界中退化的场景,如无纹理的地面和墙壁,会导致定位错误,从而可能导致地图构建失败。

2.关键内容

2.1 跟踪

由于图像中缺乏3D信息,直接求解相机的姿势可能具有挑战性或不准确。所以作者首先使用点云配准算法估计激光雷达在时刻T的姿态。具体来说,对于三维高斯地图中的每个高斯点 G i G_i Gi,作者将标记它是来自激光雷达还是密度的结果。只保留LiDAR起源点的位置属性,将其视为一个正常的点云,然后在时刻t与LiDAR点 P t L P^ L_ t PtL进行配准,以获得LiDAR的姿态 T L , t W T^W_{ L,t} TL,tW。

随后,相机的姿态被导出为 T C , t W = T L , t W . C L , C W T^W_{ C,t}=T^W_{ L,t}.C^W_{ L,C} TC,tW=TL,tW.CL,CW 。利用这个姿势,我们之前的公式从3D高斯图G中渲染RGB,深度和轮廓图像。接下来,我们通过比较渲染的RGB和深度图像与投影生成的捕获的RGB图像和深度图像之间的差异,进一步优化相机的姿态。由于图像中包含了尚未重构的部分,为了避免该部分的损失累积而影响位姿优化,我们按照splatam的方法,建立阈值 θ s θs θs。我们认为轮廓图像中超过这个阈值的区域已经被重建,因此,我们只计算这些区域内的损失。参考了splatam的策略。

我们的损失函数由颜色损失和深度损失组成,两者都利用L1范数。通过施加一个权重因子λc,我们将颜色损失和深度损失结合起来,并使用Adam优化器进行梯度下降,以确定当前帧的估计姿态。公式如下:

2.2 重定位

跟踪失败会严重影响三维高斯图的重建,为了解决这个问题,我们首先引入跟踪失败检测模块,然后通过重定位模块将不正确的姿态重置回正确的轨迹。

在跟踪失败检测中,我们评估每帧使用公式(8)计算的损失是否超过阈值 θ f a i l θfail θfail。当损耗值超过 θ f a i l θfail θfail时,MM-Gaussian系统将进入跟踪失效状态。在这种状态下,跟踪模块被认为无法继续输出正确的姿态,并停止接受新的数据。因此,地图扩展和地图更新过程也停止了。同时,重新定位模块被激活。

如上图所示,跟踪在第t帧失败。我们使用t - m帧作为恢复点来执行查找操作。通过求解PnP问题,成功估计了第t + i帧的姿态。

具体来说,在第t帧失败时,我们从之前的m帧中检索相机的姿势 T C , t − m W T^W_{ C,t-m} TC,t−mW,这被认为是正确的姿势。我们保持 T C , t − m W T^W_{ C,t-m} TC,t−mW的平移部分不变,并对旋转进行"look-around"操作,即均匀采样n次旋转,形成n个新姿态。 同时渲染n个姿态对应的RGB、深度和silhouette图像。然后,对于跟踪失败后相机捕获的每一帧 I t + i I_{t+i} It+i,我们使用SuperPoint进行特征提取,使用LightGlue进行当前帧与n张渲染的RGB图像之间的特征匹配。

我们在超过阈值 θ f e a t u r e θ_{feature} θfeature的n幅图像中选择匹配点数量最多的一张作为候选图像。利用候选的姿态,我们通过公式(7)的逆将渲染的深度图投影回3D空间,然后基于特征的对应性,使用Perspective-n-Point (PnP)计算当前帧的姿态 T C , T + i W T ^W {C, T +i} TC,T+iW。通过这个结果,我们再次渲染相应的RGB、深度和silhouette图像,并通过公式(8)评估其损失。如果损失低于阈值 θ f a i l θ{fail} θfail,则认为重新定位成功。追踪、地图扩展和地图更新模块将恢复。失败的第t帧和成功重新定位的第t+i帧之间的帧将被丢弃,以避免影响3D高斯j建图。

2.3 建图

1)地图扩展: 在跟踪阶段之后,我们得到了当前帧的估计姿态。基于此姿态,我们将当前帧的LiDAR点云转换为3D高斯点云,并将其添加到地图中进行扩展。具体来说,对于 p t L p^L_t ptL中传入的N个点,我们将它们转化为N个高斯点,并使用改进的LiDAR姿态将它们添加到地图中:

添加到三维高斯图G中的高斯点G的位置µ由p在 P t W P^W_t PtW中的对应位置决定。通过将点云投影到像素平面上,我们可以使用投影像素的颜色作为高斯函数的初始颜色。之后对高斯的其他属性进行赋值。

2)地图更新:我们保持一个持续增长的关键帧序列 Q k e y Q_{key} Qkey,在一定数量的输入帧后添加一个新的帧到序列中。在建图阶段之前,我们从 Q k e y Q_{key} Qkey中选择k−2帧与当前帧和该建图阶段最新的关键帧一起进行优化。为了选择与当前帧最相关的关键帧,我们将当前帧的点云转换成世界坐标系,然后投影到每个关键帧上。选择是基于投影到像素平面上的点的数量。

在建图阶段,我们的目标是更新三维高斯的属性,而不优化相机姿势。因此,我们设置了固定的迭代次数,每次从之前选择的k帧中随机选择一帧。根据所选帧估计的相机姿态,渲染RGB图像,然后根据输入图像计算损失函数。

由于我们已经将输入LiDAR点云转换成高斯数据并添加到地图中,因此我们不再在建图阶段的损失函数中包含深度损失。相反,我们添加了SSIM损失,并继续使用Adam优化器。

在优化过程中,一些无用的高斯函数可能变得透明,或者太大。因此,根据三维高斯溅射,我们在建图阶段结束时增加一个对高斯分布的剪枝步骤,去除这些无用的高斯分布。除此之外,为了更精细地表示物体表面的细节,我们采用了致密化过程,其中包括基于梯度复制高斯函数以生成新的高斯函数。(参考的是高斯原论文的策略)

2.4总体流程

整个系统以多模态数据为输入,即LiDAR的点云和相机的图像,最终输出一个大尺度的三维高斯图G,便于无界场景下的高质量图像渲染。具体来说,激光雷达和相机都以10Hz的频率捕获点云和图像。在时刻t,得到点云pt,图像It。利用在LiDAR和相机之间使用EdgeCalib预校准的外部参数C C L,将点云投影到图像平面上,形成稀疏深度图像DGT。

MM-Gaussian算法主要包括跟踪、重新定位、地图扩展和地图更新四个部分。在跟踪阶段,使用完善的点云配准来获得初始姿态估计,随后通过将相机图像与渲染图像进行比较来改进姿态估计,以提高姿态估计的精度。此外,为了防止跟踪失败对建图造成的灾难性后果,采用了重定位模块将错误位置重置到正确轨迹上,增强了MM-Gaussian处理各种场景的鲁棒性。在建图阶段,激光雷达的点云被处理成三维高斯点并合并到地图中。随后,使用维护的图像关键帧序列来优化地图中3D高斯点的属性,从而实现更好的渲染。

3.文章贡献

  1. 本文介绍了一种基于三维高斯的多传感器融合SLAM方法,该方法利用了激光雷达和相机的数据。我们的系统能够在无边界场景和室外场景增量地构建三维高斯图,还可以实时渲染高质量的图像。
  2. 本文开发了一个重新定位模块,用于在定位失败的情况下纠正系统的轨迹,从而提高系统的鲁棒性。
相关推荐
何大春13 分钟前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
dr李四维37 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
Komorebi.py4 小时前
【Linux】-学习笔记05
linux·笔记·学习
亦枫Leonlew4 小时前
微积分复习笔记 Calculus Volume 1 - 6.5 Physical Applications
笔记·数学·微积分
冰帝海岸9 小时前
01-spring security认证笔记
java·笔记·spring
小二·10 小时前
java基础面试题笔记(基础篇)
java·笔记·python
wusong99913 小时前
mongoDB回顾笔记(一)
数据库·笔记·mongodb
猫爪笔记13 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
Resurgence0313 小时前
【计组笔记】习题
笔记
pq113_614 小时前
ftdi_sio应用学习笔记 3 - GPIO
笔记·学习·ftdi_sio