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

介绍

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


文章目录

  • 介绍
  • 1.背景介绍
  • 2.关键内容
    • 2.1 跟踪
    • 2.2 重定位
    • 2.3 建图
    • 2.4总体流程
  • 3.文章贡献


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,tmW,这被认为是正确的姿势。我们保持 T C , t − m W T^W_{ C,t-m} TC,tmW的平移部分不变,并对旋转进行“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. 本文开发了一个重新定位模块,用于在定位失败的情况下纠正系统的轨迹,从而提高系统的鲁棒性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/420529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Patch 35586779: WLS PATCH SET UPDATE 10.3.6.0.231017

以上补丁请自行去oracle官网下载,需要技术支持的请联系:https://item.taobao.com/item.htm?spm2013.1.w4023-17257245948.4.19611db9bzrKBx&id608692494369

软件质量保障:故障演练介绍

目录 背景:架构变化带来的问题 什么是故障演练 为什么需要故障演练 故障演练场景有哪些 不同演练类型和目标 如何对工具进行评估 功能评测项 告警评测项 观测指标评测项 总结 背景:架构变化带来的问题 随着架构越来越复杂、应用越来越多样&…

【设计模式】Template Method伪代码

1. 不好的代码 1.1 lib.cpp class Library{ public:void Step1(){//...}void Step3(){//...}void Step5(){//...} };1.2 app.cpp class Application{ public:bool Step2(){//...}void Step4(){//...} };int main() {Library lib();Application app();lib.Step1();if(app.Ste…

Python 从入门到实战12(流程控制-跳出循环语句)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了流程控制语句中的循环语句。今天继续讨…

低代码开发:业务与技术的完美融合

正文: 随着数字化转型的加速,企业对应用软件的需求日益增长。然而,传统的开发方式往往费时费力,难以满足市场的快速变化。在此背景下,低代码开发平台应运而生,它们正逐步改变我们的工作方式,让…

从头开始学Spring—06初识声明式事务

目录 1.概念 1.1编程式事务 1.2声明式事务 2.JdbcTemplate 2.1准备工作 2.1.1加入依赖 2.1.2创建jdbc.properties 2.1.3配置Spring的配置文件 2.2测试 2.2.1在测试类装配JdbcTemplate 2.2.2测试增删改功能 2.2.3查询一条数据为实体类对象 2.2.4查询多条数据为一个…

LabVIEW灵活集成与调试的方法

在LabVIEW开发中,为了构建一个既便于调试又能灵活集成到主VI中的控制VI,开发者需要采用适当的编程方式和架构。常见的选择包括模块化设计、状态机架构以及事件驱动编程。这些方法有助于简化调试过程、提高系统的稳定性,并确保代码的重用性和可…

博客常见问题

hexo g 生成静态文件 hexo s 本地预览 hexo d 同步上传到git 1、输入hexo d ,上传到git时,报错 看了下git的配置,没有问题,单机过去也能直接到我的git上 可能是传不过去,token的问题 最下面开发者设置,找到…

知网合作商AEPH出版,学生/教师均可投稿,优先录用教育社科领域,往期最快2周见刊

AEPH出版社旗下有5本学术期刊,专门出版自然科学、社会科学研究与教育领域论文的高影响力期刊,拥有正规ISSN号,出版类型涉及应用和理论方面的原创和未曾公开发表的研究论文,分配独立DOI号。AEPH作为中国知网(CNKI&#…

当你忘记很久前的 DJANGO + UWSGI 项目是怎么启动的

在后端项目代码推到云服务器后,通常需要手动重启相关服务才会更新生效。 本人生产环境中用的是UWSGI服务器,更新步骤如下: 文章目录 UWSGI服务启动方式SYSTEMCTL 命令查看查看当前运行的 UWSGI 进程其他:查看 UWSGI 日志文件 重启…

Codeforces Round 970 (Div. 3)(ABCDEF)

Codeforces Round 970 (Div. 3) A:Sakurakos Exams 签到 题意:给定1,2的数量,判断是否能用加减符号使得这些1,2计算出0 void solve() {cin>>n>>m;if(n%2)cout<<"NO\n";else{if(m%20||n)cout<<"YES\n";else cout<<"…

H5咖啡品牌官网响应式HTML网站模板源码

源码名称&#xff1a;咖啡品牌官网响应式HTML网站模板源码 源码介绍&#xff1a;一款咖啡品牌官网响应式HTML网站模板源码&#xff0c;源码含有11个页面&#xff0c;可用于咖啡品牌官网。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.51888w.com/307.html

echarts 柱状图数据集结合堆叠图

效果图&#xff1a; 1.使用echarts的数据集&#xff0c;可以动态展示多组数据统计a,b,c,d…&#xff1b; 2.其中每个数据又使用堆叠图展示详细数据&#xff0c;比如a可以分成成功和失败的次数进行堆叠&#xff0c; 3.所有数据使用不同颜色进行区分&#xff0c;而每个数据的失败…

Makefile学习总结

Makefile学习总结 目录 Makefile学习总结1. Makefile介绍2. Makefile规则3. Makefile文件里的赋值方法4. Makefile常用函数4.1 字符串替换和分析函数4.2 文件名函数4.3 其他函数 5. Makefile使用示例6、多级目录通用Makefile Demo6.1 一般通用Makefile的设计思想6.2 Demo分析 参…

可筛选的课程表设计excel表格@在线写作共享表格课程表设计模板参考

文章目录 abstract表格任务1. 时间段与课次安排2. 课程种类多样3. 教师与教室安排4. 课程颜色编码5. 课表标注 参考方案:样式预览全表添加不影响筛选列的跨列显示内容方案1方案2(pass) 针对指定老师筛选并生成课表&#x1f47a;在线表格链接(wps)要点表格说明&#x1f47a;列交…

Pow(x, n)

优质博文&#xff1a;IT-BLOG-CN 题目 实现pow(x, n) &#xff0c;即计算x的整数n次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#xff1a;x 2.100…

【spring】IDEA 新建一个spring boot 项目

参考新建项目-sprintboot 选择版本、依赖,我选了一堆 maven会重新下载一次么?

系统工程建模MBSE

################################# ############# 片段一 ############## ################################# 下图采用“V”模式显示了集成的基于模型的系统/嵌入式软件开发流程Harmony。左侧描述了自顶向下的设计流程,而右侧显示了自底而上的从单元测试到最终系统验收测试…

vue3 项目中使用git

一.vue项目创建 二.创建本地仓库并和远程仓库进行绑定 在vue3-project-git 项目文件夹下 初始化一个新的Git仓库&#xff0c;可以看到初始化成功之后就会出现一个.git文件&#xff0c;该文件包含所有必要的 Git 配置和版本控制信息。 创建远程仓库: 打开gitee ,点击右上角 ‘…

低代码用户中心:构建高效平台的新时代

一、低代码开发平台概述 低代码开发平台是一种通过图形化界面和预构建组件来简化应用开发的工具。开发者可以通过拖放组件和配置参数的方式&#xff0c;快速创建和修改应用程序&#xff0c;显著降低了编写代码的复杂度和时间成本。这种平台非常适合用来快速构建和部署企业内部…