从零入门激光SLAM(二十一)——FAST-LIO2论文解析

FAST-LIO2: Fast Direct LiDAR-Inertial Odometry

论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9697912

代码:https://github.com/hku-mars/FAST_LIO

一、文章概述

1.问题导向

基于视觉传感器的高分辨率和高精度的实时密集测绘仍然是一个巨大的挑战,同时受到光照和运动模糊的影响。新兴激光雷达显著降低了成本、尺寸、重量和功率,有可能使现有的和新兴的机器人应用程序大范围受益。但目前LIDAR-SLAM存在如下挑战。

  1. LIDAR每秒产生数十万的点甚至更多,在有限的机载计算资源上,需要LiDAR里程计方法具有较高的计算效率。
  2. 特征提取模块的性能很容易受到环境的影响。
  3. 点云在运动过程中会产生显着的运动失真,影响里程计和绘图的性能
  4. 地图需要支持有效的对应搜索查询,同时实时更新并纳入新的测量结果。维护这样的地图是一项非常具有挑战性的任务。

 2.目标

构建一个快速、健壮、通用的激光雷达惯性里程计

3.摘要

这篇文章介绍了FAST-LIO2:一个快速、健壮、通用的激光雷达惯性里程计框架。FAST-LIO2建立在高效紧耦合迭代卡尔曼滤波器的基础上,具有两个关键的新颖性,可以实现快速、稳健和准确的LiDAR导航(和测绘)。第一种是直接将原始点配准到地图上(并随后更新地图,即映射),而不提取特征。这使得能够利用环境中的细微特征,从而提高了准确性。取消了手工设计的特征提取模块,也使其自然地适应不同扫描模式的新兴LiDAR;第二个主要创新是通过增量kD树数据结构-增量k-d树(IKD-Tree)来维护地图,该结构支持增量更新(即插入和删除点)和动态重新平衡。与现有的动态数据结构(八叉树、R∗-tree和纳米k-d树)相比,它在获得更好的整体性能的同时,自然地支持对树的下采样。我们对来自各种开放的LiDAR数据集的19个序列进行了详尽的基准比较。与其他激光雷达惯性导航系统相比,FAST-LIO2具有更高的精度和更低的运算量。我们还在小视场固体激光雷达上进行了各种真实世界的实验。总体而言,FAST-LIO2在计算效率(例如,大型室外环境中高达100赫兹的里程计和测绘)、稳健性(例如,在旋转高达1000度/S的杂乱室内环境中的可靠姿势估计)、通用性(即,可同时适用于多行旋转和固态LiDAR、无人机(UAV)和手持平台以及基于Inteland ARM的处理器)方面具有优势,同时仍获得了比现有方法更高的精度。我们实现的系统FASTLIO2和数据结构IKD-Tree都是在Github上开源的。

4.贡献

  1. 开发了一种增量k-d树数据结构,增量k-d树(ikd-Tree),以有效地表示大型密集点云图。
  2. 由于ikdTree计算效率的提高,我们直接将原始点注册到地图上,从而实现更准确、更可靠的扫描配准。
  3. 将前两个改变集成到FAST-LIO2上,新系统被称为FAST-LIO2,并在Github2上开源以造福社区。
  4. 进行了各种实验来评估所开发的 ikd-Tree、直接点配准和整个系统的有效性。

二、方法解析

2.1 系统pipeline

FAST-LIO2的系统架构如上图所示。连续采样的LiDAR原始点首先在10ms和100ms之间的时间段内累积(一般将20ms作为一个周期),累积的点云称为Scan。新Scan中累计的点云会和地图点进行匹配以实现状态估计,该局部地图通过一个紧耦合的迭代卡尔曼滤波器实现(流程图的红色部分)。局部地图中的地图点由ikd-Tree(蓝色大虚线块)维护。如果当前LiDAR的FoV跨越地图边界,则从ikd-Tree中删除距离LiDAR姿态最远的地图区域的历史点。因此,ikd-Tree跟踪具有一定长度(本文称为“地图大小”)的大立方体区域内的所有地图点,并在状态估计模块中用于计算残差。优化后的姿态最终将新扫描中的点注册到全局帧中,并以里程计的频率插入到ikd-Tree中实现将它们合并到地图中,这个过程即建图。

2.2 紧耦合迭代卡尔曼滤波

FAST-LIO2的论文中简要地解释了过滤器的基本公式和工作流程,如果读者需要了解更多,请读者参阅原论文并且结合FAST-LIO了解更多细节。

2.2.1 IMU预测步

1.IMU运动学模型

2.IMU离散运动学模型

其中函数f、状态x、输入u和噪声w,定义如下

2.2.2 观测模型

1.点云残差计算

激光雷达通常一个接一个地对点进行采样。因此,当激光雷达经历连续运动时,所得到的点在不同的坐标系下。为了纠正这种扫描中的运动,我们采用了中提出的反向传播方法对点云运动补偿。

去除该噪声可获得局部LiDAR坐标系中的真实点位置

    点云残差的计算公式如下

FAST-LIO不一样的地方是不再提取特征点,而是使用源点计算残差。

2.迭代

IMU的预测残差如下

构建了关于IMU预测过程以及基于LIDAR匹配残差的最大后验分布,求解使得误差最小时对应的系统状态。

3.更新

迭代优化直至达到阈值,计算最后一次迭代的卡尔曼增益和状态量。

4.映射

2.3 映射

2.3.1 地图管理

地图点被组织成一棵IKD-Tree,它通过以里程计合并新扫描的点云来动态增长。为了防止地图的大小脱离绑定,在IKD-Tree上只保留激光雷达当前位置周围L长度的大局部区域中的地图点。

改进:1.重建树时,使用两个线程。2.删除点时,先标记为deleted,需删除的点达到一定比例后再重建树。3.类似的,添加点时,先放到未端,不平衡的部分达到一定比例后再重建树。

2.3.2 树的结构和构建

1.构造

ikd-tree是一种二叉树,在kdtree的基础上进行改进,支持高效的插入和删除操作,与kdtree不同的是在叶子节点与内部节点均存储点。ikd-tree的构建过程:与静态kd-tree的构建过程类似,ike-tree不断根据最长维度的终点进行划分空间,直到子空间中只有一个点。ikd-tree的数据结构如下

  • Point 点的坐标强度信息
  • Leftchild/rightchild 指向其左右子节点的指针
  • Axis 用于分割空间的分割轴记录
  • deleted 当点从地图中删除时,节点不会立即从树中删除,而只是将布尔变量 deleted 设置为 true
  • treedeleted  删除以节点为根的整个子树,将 treedeleted 设置为 true
  • invalidnum 从(子)树中删除的点的数目
  • range 子树上点的范围信息

2.增量更新

ikd-Tree 上的增量更新指的是增量操作,支持 逐点操作按框操作

逐点操作在 k-d 树中插入、删除或重新插入单个点。

按框操作在给定的轴对齐长方体中插入、删除或重新插入所有点。

3.逐点插入与地图下采样

考虑到机器人的应用,ikd-tree支持同时进行点插入和地图下采样操作

4.惰性标签按框删除

在删除操作中,我们使用惰性删除策略。也就是说,这些点不会立即从树中删除,而只是通过将属性deleted(参见数据结构,第6行)设置为true来标记为“已删除”。如果以节点T为根的子树上的所有节点都已被删除,则T的属性treedeleted将被设置为true。因此,属性deleted和treedeleted被称为懒惰标签。标有“已删除”的点将在重建过程中(参见SectionV-D)从树中移除。

5.属性更新

在每次增量操作之后,需根据最新的信息并借助函数AttributeUpdate更新被访问节点的属性。该函数通过汇总两个子节点上的相应属性和自身的点信息来计算属性treesize和invalidnum。通过合并两个子节点的范围信息和其上存储的点信息来确定属性range;如果两个子节点的treedeleted都为true并且节点本身被删除,则treedeleted被设置为true。

6.Ikd-tree重平衡

ikd-Tree在每次增量操作后会主动监控平衡属性,并通过仅重建相关的子树来动态地重新平衡自身。

平衡准则由两个子准则组成:α-平衡准则和α-删除准则

假设ikd树的子树以T为根,当且仅当它满足以下条件时子树是α-平衡的:

以T为根的子树的α-删除准则是:

如果ikd-Tree的子树满足这两个标准,则该子树是平衡的。如果所有子树都是平衡的,则整个树是平衡的。违反任何一个标准都将触发重新构建过程来重新平衡该子树:α平衡标准保持着树的最大高度。α-删除准则确保子树上的无效节点被移除以减小树的大小。通过降低k-d树的高度和大小允许将来高效的增量操作和查询。

7.重建及并行重建子树

假设对于一个子树触发了重建准则(如下图所示),首先把子树展开为一个向量V,并去除其中的无效点(被lazy label标记删除的点)。然后,对向量V中的点进行重建一个更加完美的子树。为了保持较高的实时性,我们设计了一种双线程重建方法。我们提出的方法不是简单地在第二个线程中重建,而是通过操作记录器避免了两个线程中的信息丢失和内存冲突,从而始终保持knearest邻居搜索的完全准确性。

重建的方法参见 Algorithm 4。当违反平衡标准时,当子树的树大小小于预定值Nmax时,在主线程中重建子树;否则,在第二线程中重建子树。第二个线程上的重建算法如函数ParRebuild所示。将第二个线程中要重建的子树表示为t,将其根节点表示为T。第二个线程将锁定所有增量更新(即点插入和删除),但不锁定该子树上的查询(第12行)。然后,第二线程将子树t中包含的所有有效点复制到点数组V中(即,展平),同时保持原始子树不变,以用于重建过程中可能的查询(第13行)。展平后,原始子树被解锁,以便主线程进一步执行增量更新的请求(第14行)。这些请求将同时记录在一个名为operation logger的队列中。一旦第二个线程完成从点数组V构建新的平衡k-d树t`(第15行),记录的更新请求将由函数IncrementalUpdates在t`上再次执行(第16-18行)。

上述的并行重建设计能够保证在第二个线程中重建过程中,主线程中的建图过程仍然能够在里程计的频率进行而不被任何中断。

8.最邻近搜索

尽管与那些众所周知的k-d树库[43]-[45]中的现有实现类似,但最近搜索算法在ikd树上被彻底优化。使用[41]中详述的“边界重叠球”测试,充分利用树节点上的范围信息来加速我们的最近邻搜索。维护优先级队列q以存储迄今为止遇到的k个最近邻点以及它们到目标点的距离。当从树的根节点向下递归搜索树时,首先计算从目标点到树节点的立方体CT的最小距离dmin。如果最小距离dmin不小于q中的最大距离,则不需要处理该节点及其后代节点。此外,在FAST-LIO2(和许多其他激光雷达里程计)中,只有当邻近点在目标点周围的给定阈值内时,才会被视为内点,并因此用于状态估计,这自然为knearest邻近点的范围搜索提供了最大搜索距离[43]。在任一情况下,范围搜索通过将dmin与最大距离进行比较来删减算法,从而减少回溯量以提高时间性能。需要注意的是,我们的ikd-Tree支持并行计算架构的多线程k近邻搜索。

三、总结

本文提出了FAST-LIO2,这是一个直接和健壮的LIO框架,其速度明显快于当前最先进的LIO算法,同时在各种数据集中实现了极具竞争力的或更好的准确性。速度的提高归功于删除了特征提取模块和高效的映射。提出并验证了一种新的支持动态点插入、删除和并行重建的增量k-d树(IKD-Tree)数据结构。在开放数据集上的大量实验表明,在LiDAR里程计的KNN搜索数据结构中,所提出的IKD-Tree能够获得最好的整体性能。通过利用里程表中更多的测点,提高了测绘效率,提高了对快速运动和稀疏场景的准确性和稳健性。FAST-LIO2的另一个好处是,由于取消了特征提取,它自然能够适应不同的激光雷达,而特征提取必须根据不同的激光雷达各自的扫描模式和密度仔细设计。作为里程计,FAST-LIO2可能会漂移很远的距离。

将来,我们可以在FAST-LIO2中集成闭环检测和LiDAR束调整来纠正这种长期漂移。此外,将探索与其他传感器的融合,如GPS或照相机,以使FAST-LIO2能够在部分或完全退化的环境中工作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel 取出每组最后一行

Excel的前两列是两层的分组列,后两列是明细 ABCD1CM11112CM12123CM13134CM14145CM25156CM26167BM11218BM12229BM232310AM113111AM323212AM333313AM3434 现在要取出每小组的最后一行: ABCD1CM14142CM26163BM12224BM23235AM11316AM3434 使用 SPL XLL sp…

编译原理 期末复习笔记整理(上)

资料借鉴: 【编译原理】期末复习 零基础自学_哔哩哔哩_bilibili 编译原理笔记 第一章 引论 1.编译原理逻辑过程: 词法分析 语法分析 语义分析 中间代码生成 编译代码生成 2.词法分析 任务: 输入源程序,对…

SpringBootWeb 篇-深入了解 Mybatis 删除、新增、更新、查询的基础操作与 SQL 预编译解决 SQL 注入问题

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Mybatis 的基础操作 2.0 基础操作 - 环境准备 3.0 基础操作 - 删除操作 3.1 SQL 预编译 3.2 SQL 预编译的优势 3.3 参数占位符 4.0 基础操作 - 新增 4.1 主键返回…

不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!

大家好,我是电商糖果 视频号这两年看着抖音卖货的热度越来越高,也想挤进电商圈。 于是它模仿抖音推出了自己的电商平台——视频号小店。 只要商家入驻视频号小店,就可以在视频号售卖商品。 具体怎么操作呢,需要拍视频&#xf…

Windows下mingw32编译ffmpeg5.1.4实现rtsp拉流

由于客户要求,要在Windows下使用mingw32编译,去ffmpeg.org下载需要编译的版本,使用msys2方法进行编译,使用QT5.10的编译器,基本上把网上的方法试了个遍,编译全部库总是报错出问题 查看了ffbuild文件夹中con…

JSP期末要点复习

一、JSP工作原理 1.客户端请求JSP页面:用户通过浏览器发送一个请求到服务器,请求一个特定的JSP页面。这个请求被服务器上的Web容器(如Apache Tomcat)接收。 2.JSP转换为Servlet:当JSP页面第一次被请求时&#xff0…

魅族应用市场驳回 安装包包含32位库,请处理32位库后再重新提交

问题出现 解决方法 打开HBuilerX找到项目的mainfest.json 取消cpu类型中armeabi-v7a的勾选。 armeabi-v7a 第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型。 arm64-v8a 第8代、64位ARM处理器(ARM64位&#x…

用《让子弹飞》的话说,网易希望自己2024年又高又硬

5月23日港股盘后,网易披露了2024年第一季度的财务报告。报告期内,公司总营收达到268.52亿人民币,同比增长7.21%。归母净利润表现强劲,达76.34亿人民币,同比增长13.02%。 结合行业大环境背景来看,尽管去年Q…

Elasticsearch之入门与安装

Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来…

六西格玛培训公司:企业成长的“超级导师”——张驰咨询

六西格玛培训公司在企业中扮演着至关重要的角色,其作用主要体现在以下几个方面: 提升企业管理能力: 六西格玛管理将数据和事实作为驱动力,帮助企业将管理从理论转化为实际行动。 通过实施六西格玛管理,企业能够显著…

学习Java的日子 Day49 函数,DOM

Day48 1.流程控制语句 if else for for-in(遍历数组时,跟Java是否一样) While do while break 语句用于跳出循环 continue 用于跳过循环中的一个迭代 2.函数 2.1 JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function funct…

信息系统项目管理师0133:工具与技术(8项目整合管理—8.8实施整体变更控制—8.8.2工具与技术)

点击查看专栏目录 文章目录 8.8.2 工具与技术8.8.2 工具与技术 专家判断实施整体变更控制过程中,应征求具备如下领域相关专业知识或接受过相关培训的个人或小组的意见,涉及领域包括:关于项目所在的行业以及项目关注的领域的技术知识;法律法规;法规与采购;配置管理;风险管…

HTTP 协议的基本格式和Fidder的简单使用

HTTP协议诞生于1996(开玩笑哈,诞生于1991年),http协议用于网页和手机app和服务器交互的场景。通过HTTP协议,客户端(例如网页浏览器或手机应用)可以向服务器发送请求,服务器则会响应这…

简单微信企业群消息推送接口

群管理 群发送接口 POST: JSONURL http://localhost:65029/m/wxapi/sendwxmsg{ "nr":"试", --消息 "at":"wxid_y0k4dv0xcav622,wxid_y0k4dv0xcav622",--群wxid "key":"F98F354F1671A2D21BC78C76B95E96EB",--群k…

振弦采集仪在岩土工程监测中的精度与可靠性评估

振弦采集仪在岩土工程监测中的精度与可靠性评估 河北稳控科技振弦采集仪是一种常用的岩土工程土体力学参数监测仪器,它主要用于测量岩土中的应力、应变和模量等力学参数。在岩土工程中,土体力学参数的精确测量对于工程设计、施工和监测都非常重要。因此…

python-编写函数判断一个三位数是否为水仙花数。

【问题描述】要求编写函数isflower(n)判断一个三位数n是否为水仙花数,如果是,则返回True,否则返回False。在主程序中要求调用该函数并输出三位数中所有的水仙花数。所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。例如…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十一)- 微服务(1)

微服务 1.认识微服务 SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下: 2. 服务拆分 需求 : 把订单信息和用户信息一起返回 从订单模块向用户模块发起远程调用 , 把查到的结果一起返回 步骤 &…

类和对象03

六、继承 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。 这个时候我们就可以考虑利用继承的技术,减少重复代码 6.1 继承的基础语法 例如我们看到很多网站中, 都有公共的头部,公共的底…

【机器学习300问】99、多通道卷积神经网络在卷积操作时有哪些注意事项?

一、多通道卷积神经网络示例 还是以图像处理为例,如果你的目标不仅是分析灰度图像特性,还打算捕捉RGB彩色图像的特征。如下图,当面对一张66像素的彩色图像时,提及的“3”实际上是指红、绿、蓝三种颜色通道,形象地说&am…

C++ 头文件优化

C 是一种灵活的语言,所以需要一种积极的方法来分析和减少编译时依赖。一种常见的达到这个目的的方法是,将依赖从头文件里转移到源代码文件里。实现这个目的的方法叫做提前声明。 简而言之,这些声明告诉编译器某个函数接受和返回哪些参数&…