经典文献阅读之--SLAMesh(网格化激光SLAM)

news2024/7/4 15:46:48

0. 简介

最近激光SLAM的新工作真的是越来越多了,而大多数当前的激光SLAM系统都是在点云中构建地图,即使在人眼看来是稠密的,但当放大时,点云是稀疏的。稠密地图对于机器人应用至关重要,例如基于地图的导航。由于内存成本低,近年来,网格已成为一种有吸引力的稠密建图模型。《Real-time LiDAR Simultaneous Localization and Meshing》提出了第一个仅使用CPU的实时LiDAR SLAM系统,该系统可以同时构建网格地图并针对网格地图执行定位。采用高斯过程重构的直接网格化策略实现了网格地图的快速构建、配准和更新。具体的开源代码也已经在Github上了。

1. 主要贡献

本文贡献如下:

  1. 我们提出了一种基于GP重建和顶点连接的网格划分策略,该策略允许快速构建、查询和更新网格地图

  2. 我们设计了一种点到网格的配准方法。结合约束组合和多线程实现,我们确保了网格地图定位和建图的效率和准确性。

  3. 我们在网格地图上开发了一个稠密、实时、可扩展的开源LiDAR SLAM系统,并通过实验证明了其优势。

在这里插入图片描述

2. 方法概述

本文的动机是在LiDAR SLAM系统中构建、利用和维护一个网格地图。图2展示了一个总体概述。该系统主要由三个组件组成:网格化、配准和网格管理。首先,每个新的LiDAR扫描都使用常速度模型的初始猜测将其转换为世界坐标系{ W W W}下的 S r a w S^{raw} Sraw。以下操作也在{ W W W}中执行。然后,将点分配到体素单元中。GP在每个单元内重建局部表面并获得顶点 v i v_i vi,这些顶点相互连接形成网格。在配准组件中,设计了一种点对网格的配准方法,将重建的当前扫描与构建的网格地图 M M M对齐。最后,网格地图进行迭代更新。

在这里插入图片描述

图2. 我们SLAMesh的一般图示。系统分为三个部分:网格化、配准和网格管理。(a)原始点云被转换到世界坐标系{ W W W},进行下采样,并分配到体素单元格中;(b)高斯过程模型(浅紫色)对每个单元格的局部表面进行建模,以获得均匀分布的顶点。顶点的颜色表示它们的不确定性(较暖表示较高),随着其与原始点的距离的增加而增加;©我们通过直接连接相邻顶点来建立网格(浅蓝色);(d)点对网格配准将重建的当前扫描(红点)对齐到网格地图。基于顶点位置的快速匹配是可行的。法线从周围的网格平滑。GPed扫描表示经过高斯过程重建后的扫描。最后,我们只需要调整顶点的1-D预测和它们的不确定性,以维护网格地图。

3. 网格化策略

如前所述,构建和更新网格是耗时的。为了解决这个问题,我们采用了一种重建和连接策略,以便后面的流程可以在实时运行。如图2所示,GP从体素内部的嘈杂和稀疏点云中恢复局部表面。然后,顶点是表面的插值结果。三维顶点的两个坐标均匀分布(称为位置),而另一个坐标(称为预测)具有连续的值域。位置作为索引,以实现快速查询,预测的值域连续,以避免离散化导致的精度损失。

在这里描述了GP过程(更详细的GP描述可以在 [ 16 ] [ 17 ] [16][17] [16][17]中找到)。粗体小写字母表示向量,大写字母表示矩阵。GP的输入是原始点云 S k r a w = { p i = ( x i , y i , z i , σ i n 2 ) , i = 1 , . . . . , n i } S^{raw}_k= \{ p_i = (x_i , y_i , z_i , σ^2_{in}), i = 1, ...., n_i\} Skraw={pi=(xi,yi,zi,σin2),i=1,....,ni}的子集,包含 n i n_i ni个点,其中 k k k表示当前扫描中的第 k k k个单元格 C k C_k Ck σ i n 2 σ^2_{in} σin2是输入噪声的各向同性方差。输出是一个包含 n j n_j nj个带有不确定性 σ j 2 σ^2_j σj2的顶点 L k z L^z_k Lkz,其中 { v j = ( x j , y j , z j , σ j 2 ), j = 1 , … , n j } \{v_j =(x_j,y_j,z_j,σ^2_j),j = 1,…,n_j\} {vj=xjyjzjσj2),j=1nj}。上标 z z z表示GP预测坐标 z z z f ~ = { z j , j = 1 , … , n j } \tilde{f} = \{z_j,j = 1,…,n_j\} f~={zjj=1nj},当坐标可以是 x x x y y y z z z中的任何一个时,该上标被省略。我们将输入和输出点集的位置表示为 i i i j j j。给定输入观测 f f f,预测$\tilde{f} 也遵循高斯分布。 也遵循高斯分布。 也遵循高斯分布。\tilde{f} $的期望值是:

在这里插入图片描述

预测的不确定性指的是其方差。

在这里插入图片描述

k j j k_{jj} kjj k i j k_{ij} kij k i i k_{ii} kii分别表示位置核函数的不同组合

在这里插入图片描述

其中 k ( i , j ) k (i, j) k(i,j)是一个比例值, κ κ κ是一个常数(我们算法中 κ = 1 κ=1 κ=1)。这个指数核函数可以表示2D流形中的局部光滑曲面。因此,当建模一个复杂的结构时,一个单元格可以包含更多具有不同高斯过程函数的网格层(如果所有坐标都进行了插值,最多可以有3层)[17]。

在某个阈值 σ m a t c h 2 σ^2_{match} σmatch2下,具有不确定性 σ j 2 σ^2_j σj2 的顶点是足够准确或有效的。三角网格面是通过连接相邻或对角线顶点在位置的2D空间中建立的。如果所有顶点都有效,则网格面有效。与Delaunay三角化类似,在2D空间中建立边缘,我们的方法可以防止薄片网格面。

4. 点对网格配准(重点)

如前所述,我们同时进行定位和网格化,以便网格化可以从定位中受益。为此,一个直观的想法是将顶点视为点或从面中提取点,然后使用传统的点云配准进行姿态估计。然而,这个想法忽略了网格面的法线信息。Puma [3] 表明点对网格的误差可以提高精度。与Puma中的射线投射数据关联不同,我们的SLAMesh是基于位置建立对应关系的。

在这里插入图片描述

图3。数据关联可以在预测坐标(绿色单元格)旁边的单元格之间建立。随着配准趋于收敛,查询长度 b b b可以减小。从(a)到©, b b b从2减小到0

对于重建的当前扫描 S g p S^{gp} Sgp中的顶点 v p v_p vp,我们首先查询位于相同或相邻单元格中的子网格层(参见图3),然后找到共享相同位置的顶点 v q v_q vq(参见图2(d))。在网格中沿边查找 n q n_q nq个相邻顶点是快速的。包含 v q v_q vq的那些面的法线被平均以获得平滑的法线 n ˉ \bar{n} nˉ,以防表面不光滑。建立 v p v_p vp和包含 v q v_q vq的有效面之间的数据关联:

在这里插入图片描述

其中 ∣ ∣ ⋅ ∣ ∣ ||·|| ∣∣∣∣是2-范数。我们将一个单元格中的对应数量表示为 n q n_q nq,重叠单元格的数量为 K K K。点 v p ′ v'_p vp和应用变换 T ∈ S E 3 T∈SE3 TSE3(包括旋转 R R R和平移 t t t)后的点到网格的残差。

在这里插入图片描述

其中上标 T T T表示矩阵转置。最优相对变换 T T T是在优化问题中计算的,其中所有 K K K个重叠层 L k L_k Lk中的点到网格的残差被合并。

在这里插入图片描述

我们使用Ceres solver1中的Levenberg-Marquardt算法来解决这个非线性最小二乘问题。分析雅可比矩阵被导出以加速解决过程。

在这里插入图片描述

其中符号 ( ⋅ ) × (·)_× ()×表示向量的对应的反对称矩阵。网格可能包含许多面,因此优化问题可能非常大。我们在优化之前通过平均将每个层内的残差合并为一个,以加快优化过程。

将数据存储在体素单元中会在边界上引起数据关联的不连续性。如果我们只在重叠单元上执行配准,当车辆移动速度很快时,配准的收敛区会太窄。因此,我们允许交叉单元重叠,通过查询每个层的预测轴旁边的单元来实现,如图3所示。当配准趋于收敛时,查询的长度会减小。

5. 网格管理和多线程

…详情请参照古月居

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC 可以如何突破设计灵感的界限?

这些日子学的那些 AIGC生图本领,这回用上啦!阿里云携手国民服装品牌森马推出 AIGC T 恤设计大赛,无论您是开发者、设计师、还是AI绘画爱好者,都可以使用阿里云函数计算快速部署 Stable Diffusion,以“宇宙漫游”为主题…

J1元器件的功能与应用 | 百能云芯

在现代科技和电子领域中,元器件是构建各种电子设备的基石。其中,J1元器件作为一个备受关注的焦点,在电子工程师和科技爱好者中引发了浓厚的兴趣。百能云芯将带您深入了解J1元器件在电子世界中的作用。 J1元器件是一种通用的连接器&#xff0c…

飞腾PSPA可信启动--1 非对称加密

最近计划在梳理下飞腾安全平台架构PSPA,就先从可信启动开始吧。有一些基础的密码学知识,各位在研究可信固件的时候可能会有一些不解,为了便于大家理解,编了几个小故事,希望能够帮助大家理清其中的各种关系。目前可信启…

pxe网络装机

目录 PXE是什么? PXE的组件: 配置vsftpd关闭防火墙与selinux ​编辑配置tftp 准备pxelinx.0文件、引导文件、内核文件 ​编辑配置dhcp 创建default文件 创建新虚拟机等待安装(交互式安装完毕) 创建客户端验证(…

学会电子商务个性化这一招,让你的客户源源不断

在增加销售额和创建客户喜爱的品牌时,电子商务个性化是您成功的关键。但是,个性化您的在线购物体验的各个方面似乎都不是那么简单。 幸运的是,您看到了这一篇文章。在本文中,我们将探讨为什么电子商务个性化如此重要。在此过程中…

10个简单但超级有用的Python装饰器,事半功倍

装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…

Linux-安装redis6.2.1及主备复制模式(replication)

Linux-安装redis6.2.1 下载redis6.2.1资源上传至安装目录解压及编译解压修改名称编译 修改配置文件主节点从节点 启动及测试启动主节点从节点 测试 下载redis6.2.1资源 地址》https://redis.io/download/ 上传至安装目录 例:/data/replication/ 解压及编译 解…

Tomcat 日志乱码问题解决

我就是三井,一个永不放弃希望的男人。——《灌篮高手》 Tomcat 日志乱码问题解决 乱码原因:字符编码不一致 如:国内电脑一般都是GBK编码,而Tomcat日志使用的是UTF-8编码 解决方法:将对应字符编码由 UTF-8 改为 GBK 即…

K8s 持久化存储有几种方式?一文了解本地盘/CSI 外接存储/K8s 原生存储的优缺点

当今云原生环境中,Kubernetes(K8s)已成为既定的容器编排工具。随着 K8s 的普及,存储也成为 K8s 用户关注的一个重要问题:为了满足不同的场景需求,K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么…

easyCode代码插件

1、安装插件 2、连接数据库 3、修改模板 4、生成代码

怎么把pdf压缩的小一点?

怎么把pdf压缩的小一点?在我们日常的学习和工作中,PDF文件是一个非常常见和有用的文件格式,并且受到很多小伙伴的喜欢。有时候,一些PDF文件可能会很大,造成pdf文件较大的原因其实很明确,主要是因为pdf文件中…

Nginx笔记(安装+使用)

Nginx开源版安装、启动 版本区别 Nginx开源版 Nginx plus 商业版 openresty Tengine 安装 将.tar.gz放到linux系统下, 使用tar -zxvf减压 进入减压目录>>>命令安装指令:安装到usr/local/nginx路径下 ./configure --prefix/usr/local/nginxmake &…

西门子V20变频器外部端子功能说明

西门子V20变频器外部端子功能说明 如下图所示,为V20变频器的实物图, 如下图,为西门子V20变频器的外部端子编号和对应功能的基本说明: 具体的端子功能说明可参考以下内容: 更多关于V20变频器的信息可以参考以下链接中的内容:

测试-控制流测试

参考:ysu老师课件(测试老师和软件工程老师的结合了一下) 本文章总结了控制流测试的知识点和习题练习,没有总结如何画控制流图,很简单,跟着思路走就行,但是要注意一定要画合并结点。 目录 路径…

vue引入本地js文件时报错net::ERR_ABORTED 500 (Internal Server Error)

完整报错内容: GET http://192.168.0.000:8080/src/assets/js/websockets.js net::ERR_ABORTED 500 (Internal Server Error) 报错原因: js文件此时放在静态资源文件assets下 解决办法 应该放在public目录下 关联文章

15. 查看开源项目

15.1 parser.add_argument ① 像运行Tensorboar一样,在Terminal终端,可以命令运行.py文件。 ② 如下图所示,Terminal终端运行.py文件时,--变量 后面的值是给变量进行赋值,赋值后再在.py文件中运行。例如 ./datasets/…

msvcp140.dll重新安装的五解决方法及步骤分享(亲测可修复)

在使用电脑的过程中,大概率都会遇到这样的问题,由于找不到msvcp140.dll,无法继续执行代码“,又或者丢失msvcp100.dll,msvcp120.dll等等 我将和大家分享一个关于msvcp140.dll重新安装的解决方法及步骤。这对于经常遇到系…

spring安全代码学习

源代码地址 登录的时候调用整个代码的过程为: 1.在注入的时候,先运行两个Bean注入PasswordEncoder和AuthenticationManagerBean,然后运行configure函数 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {…

Ceph基础知识和基础架构认识

1 Ceph基础介绍 Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目…

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)

0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了,如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…