LiDAR SLAM 闭环——BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM

news2025/1/6 20:24:07

先说总结

现算法已经开源,代码链接:

GitHub - YungeCui/BoW3D: [RA-L] BoW3D: Bag of Words for Real-Time Loop Closing in 3D LiDAR SLAM.

背景 

        SLAM(同时定位与地图构建)是一种让机器人在构建环境地图的同时,定位自己位置的算法。然而,因为传感器误差的存在,机器人的移动和旋转估计会有误差,会引发所谓的漂移问题,导致地图失真。这就需要引入回环检测,即判断机器人是否返回到了之前探索过的地方,这样可以纠正因误差累积引起的地图和位置偏差,增加地图精度和鲁棒性,对于SLAM的全局一致性至关重要。

原文链接:

[2208.07473] BoW3D: Bag of Words for Real-Time Loop Closing in 3D LiDAR SLAM (arxiv.org)

1. 摘要

      回环是用于自主移动的系统的同时定位和映射(SLAM)的基本部分。在视觉SLAM领域,词袋(Bag of Words,BoW)在闭环方面取得了巨大的成功。用于环路搜索的BoW特征也可以用于随后的6-DoF环路校正。然而,对于3D LiDAR SLAM,现有技术的方法可能无法真实的有效地识别环,并且通常不能校正完整的6-DoF环姿态。为了解决这个限制,我们提出了一种新的词袋实时循环关闭3D激光雷达SLAM,称为BoW 3D。我们的方法不仅有效地认识到重访的循环的地方,但也纠正了完整的6自由度循环的姿态实时。BoW 3D基于3D LiDAR特征LinK 3D构建词袋,该特征高效、姿态不变,可用于精确的点对点匹配。此外,我们将我们提出的方法嵌入到三维激光雷达里程计系统,以评估闭环性能。我们在公共数据集上测试了我们的方法,并将其与其他最先进的算法进行了比较。BoW 3D在大多数场景下在F1 max和扩展精度得分方面表现出更好的性能。值得注意的是,BoW 3D在配备英特尔酷睿i7@2.2 GHz处理器的笔记本电脑上执行时,平均需要48 ms来识别和纠正KITTI 00上的环路(包括4K+ 64射线LiDAR扫描)。我们在这里发布方法的实现:https://github.com/YungeCui/BoW3D。

2. 主要内容

2.1 LinK3D特征

        在这项工作中,提出的BoW 3D基于LinK 3D [10]功能。LinK 3D由三个部分组成:关键点提取、描述符生成和特征匹配。如图2所示,LinK 3D描述符的核心思想是使用邻域信息来表示当前关键点,其灵感来自2D图像特征SIFT [24]和ORB [25]。LinK 3D描述符由180维向量表示。描述符的每个维度对应于扇区区域。第一维度对应于最接近的关键点所在的扇区区域,而其他维度对应于以逆时针顺序排列的区域。LinK 3D是轻量级的,平均需要32 ms从64射线激光束收集的点云中提取特征,当在配备英特尔酷睿i7@2.2 GHz处理器的笔记本电脑上执行时。我们将BoW 3D嵌入到循环关闭线程中,该线程关闭循环并获得全局一致的SLAM结果。应用于快速3D配准。有关LinK 3D的更多详细信息,请参阅其原始论文[10]。

图 2. 我们的 LinK3D 核心理念以及基于我们的 LinK3D 对两次激光雷达扫描的匹配结果。绿色线条表示有效的匹配。当前关键点的描述符是由其邻近关键点表示的。描述符的每个维度对应一个扇区区域。第一维对应当前关键点最近的关键点所在的扇区区域,其他的则按逆时针顺序对应到各区域。如果一个扇区区域内有关键点,就搜索该扇区区域内最近的关键点,并用它来表示描述符的对应维度。

2.2 词袋模型

        在2D图像领域,单词袋(BoW)[4]用于通过检索2D特征(如SIFT [24],ORB [25]等)来识别重访地点。特别是,二进制ORB特征的BoW数据库已成功地应用于实时位置识别任务。BoW在从训练图像数据集提取的一组描述符上的离线步骤中创建了一个树结构的视觉词汇表。当处理新图像时,词汇表将图像的提取特征转换为低维向量,包含术语频率和逆文档频率(tf-idf)[9]分数。tf-idf分数通过以下公式计算:

tf\text{-i}df=\frac{n_{wi}}{n_{i}}log\frac{N}{n_{w}}

        其中nwi表示图像Ii中单词w的数量,ni表示Ii中单词的总数,N是迄今为止看到的图像的总数,并且nw表示包含单词w的图像的数量。idf的思想是,一个词在所有图像中出现的次数越少,最终得分就越高,这表明这个词有更高的辨别力。tf-idf得分越高,图像中单词的频率越高。如果单词的得分足够高,则计算该单词与数据库中的单词之间的相似度。如果在数据库中存在相似的词,则使用倒排索引来搜索对应的图像。

词频TF定义
一个特征在一幅图里面的数量较多,那么这个特征对于这个图像来说就有较高的权重。

\mathrm{TF}=\frac{numberofwordwinimageI}{numberofallwordsinimageI}

逆向文本频率定义(IDF)

\mathrm{IDF}=\log\frac{numberofallimages}{numberofimagescontainingwordw}

如果一个特征在很多图像中出现,那么这个特征的区分度就比较低;相反,如果一个特征在较少的图像中出现,则有较大的区分度

\mathrm{TF-IDF=TF*IDF}

逆向索引主要记录某个单词在哪些图像中出现,以及这些单词的权重。

3. 方法

        在本节中,我们将介绍基于BoW 3D的闭环系统。为了在实践中验证BoW 3D的性能,将闭环系统嵌入到最先进的A-LOAM 6 [14]中。如图所示1。提出的系统主要由三部分组成。它首先提取原始点云中的LinK 3D特征。然后,它使用A-LOAM估计机器人的位姿。第三部分使用所提出的BoW 3D来检测环路闭合并校正环路姿势。如果检测到并优化了循环,则循环关闭将向映射算法给予反馈并更新局部映射,这为后续步骤提供了更准确的估计。

图1.我们系统的工作流程主要由三个模块组成:(i)特征提取; (ii) A-LOAM测程和绘图;(iii)闭环。我们将BoW 3D嵌入到循环关闭线程中,该线程关闭循环并获得全局一致的SLAM结果。

3.1 BoW3D Algorithm

        在本节中,我们介绍所提出的BoW 3D算法。如第III-A节中所介绍的,LinK 3D描述符的每个维度表示对应区域中的特定关键点,这使得LinK 3D描述符具有很强的区分性。内存中数据库的结构如图所示3中,哈希表用于在单词单词出现的位置之间建立一对一的映射。哈希表的计算成本理论上为O(1),这使得它适合于高效的检索。如图所示3、BoW 3D词汇表中的单词由两部分构成:一是LinK 3D的非零维数;另一个是词所在的对应维度。地点(点云框架)也由两部分组成:一个是帧Id;另一个是帧中的描述符ID。

图3. BoW3D的数据结构(本身就是个哈希表啊)哈希表用于检索。BoW3D的单词由描述符中的非零值(Dim-value)和相应的维度(Dim-ID)组成。每个单词对应一个地点集,在其中出现了该单词。地点也由两部分组成,一部分是帧ID,另一部分是帧中的描述符ID。

1)检索算法:对于LinK3D描述符的单词,我们检索单词并计数每个位置(点云帧)出现的频率。如果最高的一个大于频率阈值Thf,则该地点被认为是候选地点。此外,为了快速检索,使用逆文档频率(idf)来避免检索出现在多个地方的单词。更具体地说,由于这些词出现的频率明显高于其他词,因此它们的区分度较低,降低了检索效率。因此,我们定义了一个类似于idf的比率因子来衡量当前集合中的位置数与所有集合中的平均值之间的差异。我们用它来确定在计算位置数时是否应该保留当前单词的位置集。该比率定义如下:

ratio=N_{set}/(\frac{N}{n_{w}})

        其中Nset是当前集合中的位置的数量。N/nw表示一个位置集合的数量平均值,nw是词汇表中的单词数量,N是到目前为止看到的位置的总数。如果位置集合的比率大于阈值Thr,则该位置集合将不被用于计数。检索算法如算法1所示。

 2) 回环校正:回环校正用于为后端的姿态图优化提供约束。首先基于LinK3D的匹配结果计算循环的观测约束,然后使用RANSAC [12]来去除mismatches。我们遵循[13Least-squares fitting of
two 3-d point sets]中的方法来计算循环姿态Tlc,其是loop frame回环帧 l 与当前帧 c 之间的估计。

        给定当前帧的点集{S }c和循环帧的匹配点集{S }l,我们通过最小化以下成本函数来计算循环:

r_{l,c}(\boldsymbol{R}_{l,c},\boldsymbol{t}_{l,c})=\frac{1}{2}\sum_{i=1}^{n}\|s_{l}^{i}-\left(\boldsymbol{R}_{l,c}s_{c}^{i}+\boldsymbol{t}_{l,c}\right)\|^{2}

        其中$s_l^i \in\{S\}_l$$\boldsymbol{s}_c^i \in\{S\}_c$是对应的匹配点。\boldsymbol{R}_{l,c}t_{l,c}分别T_{l,c}是变换的旋转和平移。T_{l,c}定义如下:

T_{l,c}=\begin{bmatrix}R_{l,c}&t_{l,c}\\\\\mathbf{0}^T&1\end{bmatrix}

        我们首先根据\{S\}_{l}\{S\}_{c}计算质心s_{\boldsymbol{l}}s_{\boldsymbol{c}}。设\hat{s}_l^i\hat{s}_{c}^{i}是对应点s_{l}^{i}s_{c}^{i}的坐标,其分别去除了中心点s_{\boldsymbol{l}}s_{c}。然后我们计算矩阵:

\boldsymbol{W}=\sum_{i=1}^n\boldsymbol{\hat{s}}_l^i\boldsymbol{\hat{s}}_c^{iT}

求W的SVD分解

W=U\boldsymbol{\Sigma}\boldsymbol{V}^T

如果W是满秩的,则我们将通过下式得到Rl,c和tl,c的解:

\begin{aligned}R_{l,c}&=\boldsymbol{VU}^T,\\t_{l,c}&=s_l-R_{l,c}s_{c}.\end{aligned}

        这使我们能够校正回路姿势。此外,循环姿态还用于候选循环帧的几何验证,并且我们设置距离阈值Thdis来验证候选循环是否有效。

3)更新算法:我们提出了一个更新算法来添加新的单词和地方的数据库。为了提高更新和检索的效率,我们只向数据库中添加一定数量的特征。描述符基于其对应关键点与LiDAR中心之间的距离来选择。具体地,Specifically, only a certain number of closer  features are added to the database。类似地,当检索环时,使用一定数量的更接近的特征来检索。更新算法在算法2中示出。

 3.2 回环优化

        在校正循环姿态之后,构建循环帧的姿态图以用于后续循环优化。姿态图的顶点是要优化的全局姿态。位姿图的边(顶点之间的连接)是观察约束,其由连续帧之间的相对位姿和校正的环位姿组成。我们将帧i和j之间的残差定义为:

r_{i,j}(T_{w,i},T_{w,i})=\ln(T_{i,j}^{-1}T_{w,i}^{-1}T_{w,j})^\vee

        通过最小化以下成本函数来优化姿态图:

\min_T\left\{\sum_{(i,j)\in S}\|r_{i,j}\|^2+\sum_{(i,j)\in L}\|r_{i,j}\|^2\right\},

        其中S是所有顺序边的集合,L是所有环闭合边的集合。我们使用在图优化器g2 o [38]中实现的Levenberg-Marquadt方法来解决优化问题。在姿态优化之后,我们更新映射线程的局部地图。具体地,基于优化的全局姿态更新局部地图中的点,其更准确。这可以确保后续估计的全局一致性。

特别致谢

        中科院沈自所的崔芸阁博士,感谢您为激光SLAM回环的贡献。

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

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

相关文章

zk集群启动异常:Error contacting service. It is probably not running.

# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/aspire/product-kafka3.4/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running. 查看 是否 iptables 限制了 端口访问, 2181端口, 需要把…

浅谈企业信息化能源管理系统的设计与应用

安科瑞 华楠 摘要: 我国的经济社会不断发展,对环境和资源造成的压力也越来越大。为了促进经济和社会的协调发展,可持续发展的理念被提出,企业信息化能源管理系统应运而生。将上述管理系统应用在企业之中,可以节约能源&#xff0…

Linux下输出带背景颜色和字体颜色的文本

最近在用Go语言开发项目,在跟踪Go底层实现时发现控制台输出的文本有样式,发现linux下在控制台输出可以控制文本样式,在此做个整理。 目录 1.发现 2.命令行输出测试 3.Linux下样式文本 1.发现 以下是我的一段Go代码:test_exec…

2023年07月IDE流行度最新排名

点击查看最新IDE流行度最新排名(每月更新) 2023年07月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

那些无法避免的弯路

近日,某高校毕业生在校期间窃取学校内网数据,收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代,算法分发带来了隐私侵犯,在享受消费生活等便捷权利的同时,似乎又有不…

Pyformer: 内嵌局部机理的时序预测模型

待续 代码粗解 在 data_lorder.py文件中,定义了几个用于处理不同数据集的类,这里只关注Dataset_ETT_hour类。Dataset_ETT_hour类用来加载、处理ETTH数据集,主要包含以下4个方法:__read_data__, def __getitem__(sel…

Mybaits-Plus学习5 代码生成器

引入代码生成器依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version> </dependency> <dependency><groupId>org.freemarker</groupId…

旅游卡app软件开发解决方案

旅游业的不断发展&#xff0c;旅游卡作为一种便捷的旅游方式越来越受到人们的青睐。旅游卡可以帮助游客节省旅游开支&#xff0c;同时也能让游客更好地规划自己的旅游行程。针对这种情况&#xff0c;开发一款旅游卡app软件是非常必要的。本文将介绍旅游卡app软件开发的解决方案…

mysql 视图

视图&#xff0c;是虚拟存在的表&#xff0c;视图中的数据在数据库中实际不存在&#xff0c;视图只保存查询SQL的逻辑&#xff0c;不保存查询结果 建表sql DROP TABLE IF EXISTS w_dict; CREATE TABLE w_dict (id int(0) NOT NULL AUTO_INCREMENT,label varchar(255) CHARACT…

rsync+intofy实时同步部署(上行、下行)

目录 一&#xff1a;rsync 远程同步 二&#xff1a;配置rsync源服务器 1、安装rsync 2、建立/etc/rsyncd.conf 配置文件 3、 为备份账户创建数据文件 4、 保证所有用户对源目录/var/www/html 都有读取权限 5、 启动 rsync 服务程序 6、关闭 rsync 服务 三&#xff1a; 发起…

华为OD机试(B卷)

华为OD机试&#xff08;B卷&#xff09; 有幸接到了华为OD的机试邀请&#xff0c;三道算法题。比较幸运的是&#xff0c;最后一题&#xff0c;也相对来说不算太难&#xff0c;没有抽到动态规划&#xff0c;还是花了大约90分钟&#xff0c;三道题都通过了&#xff0c;最终拿到了…

获得多线程的方法几种、callable接口与runnable接口的区别、callable接口使用

1、获得多线程的方法几种&#xff1f; &#xff08;1&#xff09;传统的是继承thread类和实现runnable接口&#xff0c;java5以后又有实现callable接口和java的线程池获得。 &#xff08;2&#xff09;函数式接口&#xff1a; 这是一个函数式接口&#xff0c;因此可以用作l…

【bug传奇】12个bug个个成经典,最后一个毁了一个帝国

1、世界第一个bug--万“虫”之母 1947年9月9日&#xff0c;葛丽丝霍普&#xff08;Grace Hopper&#xff09;发现了第一个电脑上的bug。当在Mark II计算机上工作时&#xff0c;整个团队都搞不清楚为什么电脑不能正常运作了。经挖掘真相为&#xff1a; 第一代的计算机是由许多庞…

Python:plt画图隐藏刻度

plt.tick_params(axisboth, whichboth, bottomFalse, leftFalse, labelbottomFalse, labelleftFalse)

软件测试流程扫盲:V/W/H模型,测试左移测试右移

一、软件测试模型 &#xff08;一&#xff09;V模型 V模型是瀑布模型的一种改进V模型标明了测试过程中的不同阶段 1.V模型每个测试阶段的测试内容 单元测试&#xff1a;类、函数 集成测试&#xff1a;接口 系统测试&#xff1a;前期测功能有没有满足需求&#xff0c;后期满…

数据可视化分析,近5年电视机全球出货量和中国产量

随着科技的不断进步&#xff0c;电视机已经不再只是用来看电视节目的设备&#xff0c;而是成为了家庭娱乐的中心&#xff0c;提供了令人难以置信的视觉体验。随着4K和8K技术的引入&#xff0c;我们能够欣赏到前所未有的清晰度和细节还原能力。无论是观看电影、体育比赛还是玩游…

哈工大计算机网课程络网络层协议详解之:Internet网络路由协议详解(RIP、OSPF)

文章目录 RIP协议RIP链路失效、恢复问题RIP路由表的处理 OSPF协议分层的OSPF主干路由器 之前我们也介绍了&#xff0c;作为我们现在广泛使用的Internet网络来说&#xff0c;采用的路由策略是层次化路由策略。 即将不同区域、组织的网络划分成一个个自治系统&#xff0c;在自治系…

Android Studio实现内容丰富的安卓志愿者平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号122 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.…

LUT查找表

目录 1、查找表原理 2、LUT查找表函数 1、查找表原理 2、LUT查找表函数 #include <iostream> #include <fstream> #include <opencv2/opencv.hpp>using namespace std; using namespace cv;int main() {//LUT查找表第一层uchar lutFirst[256];for (int i 0…

MySQL - 第14节 - MySQL使用C语言连接

1.引入库 要使用C语言连接MySQL&#xff0c;需要使用MySQL官网提供的库。 1.1.下载库文件 下载库文件&#xff1a; 首先&#xff0c;进入MySQL官网&#xff0c;选择DEVELOPER ZONE&#xff08;开发人员专区&#xff09;&#xff0c;然后点击MySQL Downloads。如下&#xff1a; …