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

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.rhkb.cn/news/113333.html

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

相关文章

SQL语言-01

SQL Structured Query Language 的简单介绍 SQL 中的书写规则 SQL 中的数据类型

基于SpringBoot+Vue的旅游系统

摘 要 随着旅游业的发展,越来越多的人选择旅游作为自己的出行方式。在旅游规划过程中,旅游景点选择是至关重要的环节。本文提出了一种基于协同过滤推荐算法的旅游平台系统。该系统采用前后端分离的设计,主要使用了SpringBoot、Vue等技术&…

经纬恒润荣获吉利汽车“最佳价值贡献”奖

8月18日,以“全面向新 共创共赢”为主题,吉利汽车在宁波成功举行2023年电子电器核心供应商恳谈会。经纬恒润凭借在项目合作上持续创新、高效协同等优异表现,获得“最佳价值贡献”奖项。 作为国产汽车代表性品牌之一,吉利汽车积极推…

使用errors.Wrapf()代替log.Error()

介绍不同语言的错误处理机制: Error handling patterns[1] Musings about error handling mechanisms in programming languages[2] 项目中 main调func1,func1调取func2... 这样就会出现很多的 if err ! nil { log.Printf()} , 在Kibana上查看时会搜到多条日志, 需要…

汽车制造行业,配电柜如何实施监控?

工业领域的生产过程依赖于高效、稳定的电力供应,而配电柜作为电力分配和控制的关键组件,其监控显得尤为重要。 配电柜监控通过实时监测、数据收集和远程控制,为工业企业提供了一种有效管理电能的手段,从而确保生产的连续性、安全性…

Web 开发 Django 模板

上次为大家介绍了 Django 的模型和自带的管理工具,有了这个工具就可以全自动地根据模型创建后台管理界面,以供网站管理者更方便的管理网站数据。有了网站数据,那怎么样更方便又好看的展示给用户看呢?目前流行的 Web 框架基本都采用…

ChatGPT AIGC 一个指令总结Python所有知识点

在ChatGPT中,直接输入一个指令就可以生成Python的所有知识点大纲。 非常实用的ChatGPT功能。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.…

小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)

Java语言是最为流行的面向对象编程语言之一, Java运行时环境(JRE)拥有着非常大的用户群,其安全问题十分重要。近年来,由JRE漏洞引发的JVM逃逸攻击事件不断增多,对个人计算机安全造成了极大的威胁。研究JRE安…

【C++】线程安全问题

原子类型非线程安全 #include <iostream> #include <thread>int main() {int num 0;int count 100000;std::thread thread1([&](){for(int i 0; i < count; i){num;}});std::thread thread2([&](){for(int i 0; i < count; i){num;}});std::thr…

双亲委派机制

双亲委派机制流程 当Application ClassLoader 收到一个类加载请求时&#xff0c;他首先不会自己去尝试加载这个类&#xff0c;而是将这个请求委派给父类加载器Extension ClassLoader去完成。 当Extension ClassLoader收到一个类加载请求时&#xff0c;他首先也不会自己去尝试…

目标检测笔记(十一):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)

文章目录 背景代码结果 背景 由于我们在做项目的时候可能会涉及到某个指定区域进行目标检测或者人脸识别等任务&#xff0c;所以这篇博客是为了探究如何在传统目标检测的基础上来结合特定区域进行检测&#xff0c;以OpenCV自带的包为例。 一般来说有两种方式实现区域指定&…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 高校汉服租赁网站的 设计与实现

一.项目介绍 高校汉服租赁网站分为普通用户以及管理员两类 普通用户&#xff1a; 注册、登录系统、查看汉服首页发帖公告信息、 交流论坛&#xff08;发帖、查看帖子、评论&#xff09;、 公告咨询&#xff08;查看公告以及评论&#xff09;、 汉服信息&#xff08;查…

在Windows操作系统上安装Neo4j数据库

在Windows操作系统上安装Neo4j数据库 一、在Windows操作系统上安装Neo4j数据库 一、在Windows操作系统上安装Neo4j数据库 点击 MySQL可跳转至MySQL的官方下载地址。 在VUE3项目的工程目录中&#xff0c;通过以下命令可生成node_modules文件夹。 npm install&#xff08;1&am…

docker 安装 Nginx

1、下载 docker pull nginx:latest 2、本地创建管理目录 mkdir -p /var/docker/nginx/conf mkdir -p /var/docker/nginx/log mkdir -p /var/docker/nginx/html 3、将容器中的相应文件复制到管理目录中 /usr/docker/nginx docker run --name nginx -p 80:80 -d nginxdocke…

基于Pytorch的神经网络部分自定义设计

一、基础概念&#xff08;学习笔记&#xff09; &#xff08;1&#xff09;训练误差和泛化误差[1] 本质上&#xff0c;优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标&#xff0c;后者则关注在给定有限数据量的情况下寻找合适的模型。训练误差和泛化误差通常不…

【LeetCode】290. 单词规律

这里写自定义目录标题 2023-8-30 09:34:23 290. 单词规律 2023-8-30 09:34:23 这道题目&#xff0c;我是根据 205. 同构字符串 的思路一样&#xff0c;都转化为另外一个第三方的字符串&#xff0c;在比较翻译过后的语句是不是一样的。 class Solution {public boolean wordP…

AP5192 DC-DC降压恒流LED汽车灯 LED长条灯 汽车雾灯驱动IC

AP5192是一款PWM工作模式,高效率、外围简单、 内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。最大电流1.5A。 AP5192可实现线性调光和PWM调光&#xff0c;线性调光 脚有效电压范围0.55-2.6V. AP5192 工作频率可以通过RT 外部电阻编程 来设定&…

MES在人工智能方面的应用

MES&#xff08;制造执行系统&#xff09;在人工智能方面的应用主要集中在优化制造流程、提高生产效率和质量控制等方面。以下是一些MES在人工智能领域的应用案例&#xff1a; 1. 预测性维护&#xff1a;通过收集和分析生产设备的传感器数据&#xff0c;结合机器学习算法&am…

说说构建流批一体准实时数仓

分析&回答 基于 Hive 的离线数仓往往是企业大数据生产系统中不可缺少的一环。Hive 数仓有很高的成熟度和稳定性&#xff0c;但由于它是离线的&#xff0c;延时很大。在一些对延时要求比较高的场景&#xff0c;需要另外搭建基于 Flink 的实时数仓&#xff0c;将链路延时降低…

中央仓库更新失败,IDEA报错repository is non-nexus repo, or does not indexed

某个仓库未被识别为 Nexus 仓库&#xff0c;或者没有被正确地索引。导致引入依赖一直爆红&#xff0c;找不到。只有本地仓库的依赖没报错&#xff0c;因为下载过了&#xff0c;添加新的依赖就需要到远程仓库找就爆红。 解决 去阿里云Maven官网看了一下&#xff0c;发现阿里云…