基于激光雷达的SLAM算法对比分析_kartoslam论文-程序员宅基地

基于激光雷达的SLAM算法对比分析

下面将Karto,Hector,Gmapping,Cartographer等几种开源算法通过列表的形式进行了对比:

Hector Gmapping Karto cartographer
scan-matching(Gaussian-Newton equation) +传感器的要求高 mapping采用的是RBPF的方法 KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系统解耦作为解. artographer是Google的实时室内建图项目,传感器安装在背包上面,可以生成分辨率为5cm的2D格网地图
要求: 高更新频率小测量噪声的激光扫描仪.不需要里程计,使空中无人机与地面小车在不平坦区域运行存在运用的可能性 粒子滤波的方法一般需要大量的粒子来获取好的结果,但这必会引入计算的复杂度;粒子是一个依据过程的观测逐渐更新权重与收敛的过程,这种重采样的过程必然会代入粒子耗散问题(depletion problem), 大权重粒子显著,小权重粒子会消失(有可能正确的粒子模拟可能在中间的阶段表现权重小而消失). 图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新. 获得的每一帧laser scan数据,利用scan match在最佳估计位置处插入子图(submap)中,且scan matching只跟当前submap有关。在生成一个submap后,会进行一次局部的回环(loop close),利用分支定位和预先计算的网格,所有submap完成后,会进行全局的回环。
利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示,和占据网格的概率.
为避免局部最小而非全局最优的出现,地图采用多分辨率的形式.
自适应重采样技术引入减少了粒子耗散问题 , 计算粒子分布的时候不单单仅依靠机器人的运动(里程计),同时将当前观测考虑进去, 减少了机器人位置在粒子滤波步骤中的不确定性 KartoSLAM的ROS版本,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关.landmark越多,内存需求越大,然而图优化方式相比其他方法在大环境下制图优势更大.在某些情况下KartoSLAM更有效,因为他仅包含点的图(robot pose),求得位置后再求map. submap的构造是一个重复迭代配准scan和submap的过程。利用配准估算出pose对scan进行刚体变换,插入到submap中。
连续的scan用来构造submap,这里submap以概率格网的形式表现。每一个scan,在插入格网(submap)时,每一个grid有hits和miss两种情况。离scan终点最近的grid为hits,在scan原点和终点之间相交的grid为miss。之前未观察的grid分配一个概率,已观察的grid进行概率更新。
论文 Efficient Sparse Pose Adjustment for 2D mapping

citations

cartographer与karto的都是2D激光SLAM算法,而且不是基于概率估计的SLAM框架

  1. 两者采取的都是图优化框架

采取的优化库不一致, karto采取的是spa(karto_slam)或g2o(nav2d), cartographer采取的是google的ceres构建problem优化。 karto的前端与后端采取的是单线程进行,cartographer按paper说明,采取的是4线程后端优化,还在进一步确定。

  1. 运动预测部分:tracker

karto利用的是odom进行初始位置的预测, cartographer部分利用imu构建预测模型,scanmatcher与odom(可选)构建观测模型,采取UKF进行运动预测, cartographer带有tracker的说法。

  1. scanMatcher 部分

3.1 karto 采取的的是real-time correlative scan matcher(三维窗口遍历寻优)的方式进行的。 采取的是双分辨率的低分辨率和高分辨率的两次搜索。

3.2 cartoGrapher也是采取的双搜索的方式进行的, 先用一次real-time correlative scan matcher(三维窗口遍历寻优),再构建优化等式,利用ceres优化求解。(栅格概率, T的偏差,R的偏差)

  1. submap的说明

4.1 karto没有submap的概念,全部以keyScan的形式存储在sensorManager。 无地图缓存,但每次计算地图有计算消耗。采取的是scan-map的匹配方式,每次keyScan进入主动的依据pose的距离窗口生成localMap进行匹配。 local 与 gloal的loop closure依据graph的结构和sensorManage顺序存储分配的ID信息,选择候选scans,生成localMap,进行匹配,依据score进一步确定闭环。

4.2 . cartographer采用了submap的概念, 依据一定数量的scan初始一个submap, 依据窗口大小, 插入newScan,更新submap. 有子图缓存,会占用内存。

  1. Loop-Closure

5.1 karto 主要依据pose 和 distance信息创建localMap,scanMatcher(real-time correlative scan matcher)确定。

  1. 依据当前的Vertex, 从Graph中找到与之相邻的所有vertex(一定距离范围内).
  2. 采取广度优先搜索的方式,将相邻(next)与相连(adjacentVertices)添加进nearLinkedScans.
  3. 从sensorManager中取从前到后,依据id序号挑选与当前在一定距离范围内,且不在nearLinkedScans中的candidateScans, 当数量达到一定size,返回。
    4)loopScanMatcher进行scanTomap的匹配,当匹配response 和covariance达到一定要求认为闭环检测到。得到调整的correct pose.
    5)Add link to loop : 调整边(全局闭环)
  4. 触发correctPose: spa优化

5.2 cartogapher 类似((real-time correlative scan matcher)),引入了branch and bound的方式, 加快了闭环的查找。

依据多分辨率多层的树型结构,单枝生长的方式(branch),及时剪枝操作(bound),深度优先搜索(DFS)确定闭环。 (Intra-submap Inter-submap )

添加相应的闭环约束。构建优化问题,利用ceres优化。

参考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/RNG_uzi_/article/details/104039180

智能推荐

[CountDownLatch] 1.实现等待TcpServer启动完毕后再发射事件 2.使用CompletableFuture代替CountDownLatch将阻塞封装到内部-程序员宅基地

文章浏览阅读284次。也不能说:直接就启动一个线程,不然没办法发射出“服务器启动”这个事件。有时候,我们希望NettyServer启动时不能说卡主主线程。这时就可以使用此类执行完毕后,通知下主线程。总结:可以看出来,是单独的线程启动,但是可以控制住顺序了。

java8两个list中发数据比较_Java8 Stream对两个 List 遍历匹配数据的优化处理操作-程序员宅基地

文章浏览阅读1.2w次。使用场景,有两个List>集合,第一个集合的所有元素都是需要保留的。第一个集合的值为:{name=张三丰1, id=1}{name=张三丰2, id=2}{name=张三丰3, id=3}{name=张三丰4, id=4}{name=张三丰5, id=5}{name=张三丰6, id=6}{name=张三丰7, id=7}{name=张三丰8, id=8}第二个集合的值为:{grade=61..._list stream 比较

五子棋游戏JS实现-程序员宅基地

文章浏览阅读846次。使用HTML5和JS实现五子棋游戏

Androidstudio的gradle过大内存溢出解决-程序员宅基地

文章浏览阅读5.3k次。首先贴出问题:解决思路如下图:

多模态系列-综述MM-LLMs: Recent Advances in MultiModal Large Language Models-程序员宅基地

文章浏览阅读1.1k次,点赞21次,收藏30次。在过去的一年中,多模态大型语言模型(MM-LLMs)取得了实质性的进展,通过高效的训练策略,增强了现成的语言模型,以支持多模态输入或输出。由此产生的模型不仅保留了语言模型的固有推理和决策能力,还赋予了多样化的多模态任务。在本文中,我们提供了一份旨在促进进一步研究多模态大型语言模型的综合调查。首先,我们概述了模型架构和训练流程的一般设计公式。随后,我们介绍了一个包含122个多模态大型语言模型的分类体系,每个模型都具有其特定的公式。

一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL_开源数据库-程序员宅基地

文章浏览阅读3.9w次,点赞115次,收藏184次。一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL。_开源数据库

随便推点

Pandas Dataframe合并连接Join和merge 参数讲解-程序员宅基地

文章浏览阅读638次,点赞28次,收藏14次。但是如果是连接多个键的名字都不同的时候,(比如df1.key1 == df2.key2 , df1.key3 == df2.key4) 那么则最好先通过rename的函数对Dataframe进行改名,之后再merge。当使用cross的时候不需要指定on啥,因为会把左右连接的所有的可能都返回,并不在乎谁和谁相等。这个是merge中的参数,当设置为True的时候,意思是使用索引进行连接。其中merge是需要给键值的。join默认的是使用索引的值。how表示的是连接的方式,一般包含下面的参数,默认是左连接。

【Oracle数据库】存储过程有几种循环方式?_oracle存储过程for loop循环-程序员宅基地

文章浏览阅读1.1k次,点赞17次,收藏9次。在所有的编程语言中,循环都是一个非常重要的语法,掌握循环,是程序员必不可少的能力。在Oracle中,常用的有四种循环,loop循环,while循环,for循环和goto循环_oracle存储过程for loop循环

java/php/node.js/python会议报名系统【2024年毕设】-程序员宅基地

文章浏览阅读676次,点赞18次,收藏23次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。

GD32系列总结 - VScode + keil开发环境搭建_gd32f405 vscode-程序员宅基地

文章浏览阅读3.1k次,点赞7次,收藏47次。GD32系列总结 - VScode + keil开发环境搭建写在前面Keil Assistant插件安装与使用遇见的问题include波浪线警告中文备注乱码last line of file ends without a newline常用插件Chinese (Simplified) Language Pack for Visual Studio CodeBracket Pair ColorizerTabnine AI Code Completion写在前面来了新公司之后,由于这次遇见的单片机是GD32_gd32f405 vscode

Reason: No converter found capable of converting from type [java.lang.String] to type_no converter found capable of type to datasource-程序员宅基地

文章浏览阅读6k次。问题Failed to bind properties under ‘spring.datasource.type’ to java.lang.Class<javax.sql.DataSource>:Error starting ApplicationContext. To display the conditions report re-run your application ..._no converter found capable of type to datasource

图解PCB板元器件焊接流程-程序员宅基地

文章浏览阅读2.6k次。以下内容来源于网络,如有侵权,请联系作者删除。