【简单总结】SLAM 算法的 Benchmark 及相关数据集的结果对比

news2024/11/25 16:38:40

前言与参考

主要是copy一下总结,方便自己后续找方案特定使用,所有的出处均在标题处和原链接跳转,此处仅做各个benchmark收集使用,如果有原作者觉得侵权,请联系我 将全力配合相关内容和链接删除

如果网友有其他更新的结果推荐,可在评论区留言 我将继续加入;因为年年出结果 肯定会使得一些算法不再sate-of-art,可以点击目录跳转当年最新的 这样比较快

最后本人不是SLAM专业赛道选手,所有的方案特点总结也都以各链接作者和网友讨论为主,如有不同看法 请点击去相关issue和链接一起讨论~ peace and love!

2020 SLAM Comparison

GITHUB原链接:https://github.com/Tompson11/SLAM_comparison

这是我看到的第一个SLAM方案对比,基本把2020之前的方案及特点都讲清楚了,但是2020年后也出现了很多很多优秀的SLAM方案~~

松耦合是指:可以不要IMU/其他的,紧耦合方案:需要所有传感器在线

以下为摘取原文,请点击原链接查看更为详细的内容


方案及特点

本次我共测试了github上开源的8种方案,按照特点可分为

特点方案
纯LidarA-LOAM(港科大版本的LOAM),hdl_graph_slam,BLAM
Lidar与IMU松耦合LeGo-LOAM,SC-LeGo-LOAM(在LeGo-LOAM上使用了一种新的回环检测方法)
Lidar与IMU紧耦合LINS,LIO-SAM,LIOM

总结

  1. 各种方案的优缺点如下:
方案优点不足
ALOAM1. 在几何特征丰富时比较稳定1. 后期内存会出现爆炸,计算效率下降
2. 在几何特征较少时会产生明显漂移
LeGo-LOAM1. 在地面点丰富时比较稳定
2. 轻量级
1. 在地面点缺乏时很容易崩溃
2. 得到的地图比较稀疏
LINS1. 轻量级1. z方向漂移明显
2. 得到的地图比较稀疏
3. 目前的版本要求Lidar与IMU体坐标系的xy平面平行,不接受自己提供的外參
LIO-SAM1. 存在回环检测,能较好地闭合回环
2. 稳定性强
3. Demo看起来比较舒服
1. 在几何特征丰富的情况下可能不如ALOAM
LIOM1. 存在重力加速度的校正和IMU初始状态估计1. 稳定性不好,有时性能好,有时又不行,可能与其初始化环节的性能有关
2. 内存占用大,时间性能较差
  1. 在进行IMU校正后,融合高频IMU确实能够提升SLAM性能,尤其是在几何特征缺乏或者剧烈运动的情况下。
  2. LIO-SAM在定位和建图方面做的都不错,比较建议使用。

2021年有网友的issue链接讨论的也很有意思,希望大家也不要错过,反正我第一次看到的时候 挺快乐的 吸取前人大佬们经验 hhhh:https://github.com/Tompson11/SLAM_comparison/issues/1

@Gatsby23: 感谢作者做出了如此丰富的对比试验,完全让我没想到的是LINS能达到这么好的效果。因为看LINS的代码和论文,Lidar和IMU的紧耦合结果仅仅作为初值送入Mapping Module,Mapping Module本身还需要再做一次Scan-to-Map的ICP,所以我自己尝试过在不同初值下的Scan-to-Map的结果,发现得到结果差距不大,但没想到实际效果中LINS的结果如此的好。不过可能也有两方面的原因:一方面是在LINS的代码中有通过重力方向来校正Roll和Pitch的过程。这个可能对车体运动本身有较好的校正效果。二是在一些激烈运动中,需要较好的初值才能收敛,这是我做实验不足和没有想到的地方。
但我更推荐作者去尝试现在新出的两种算法:F-LOAM和Fast-LIO。特别是FAST-LIO是基于当前帧与地图的观测来做更新,理论上能取得更好的效果。

@chengwei0427:紧耦合的效果会比松耦合效果要好(约束更多,同样对传感器要求也更高),这个也必将符合预期;
lego_loam表现虽然让人诧异,但也符合其工作原理(scan-to-scan效果很差,这也是不如aloam的地方);

@chengwei0427:如果我没有记错,lego_loam的地面点是放到surf里,参与优化的,所以对地面的约束还是有的。lio_sam的特征提取,相比于lego,去掉了非地面点中的聚类及点数少的点簇移除,移除地面是为了保证靠近地面的点不参与corner特征提取。
bias约束,也是为了提高积分的精度,这样lio_sam中的初值会更加准确,但是imu是没有参与优化的,仅提供初值;(实际测试没有用gnss)。
所以,lio_sam和lego_loam的scan_to_map除了特征差别外,就是初值的差异了;这里,是特征的影响大,还是初值的影响更大呢?并且实际测试中,lego相比lio,迭代的次数更多,不收敛的情况也更多

@Gatsby23: 嗯嗯,多谢提醒,有些忘了Lego-LOAM。如果我没记错的话,LEGO-LOAM的优化是拆开的,所以可能欧拉角拆开来优化并不是一个好结果?我个人觉得特征保下限,初值冲上限。你可以把匹配点关系映射出来看看

@chengwei0427: 最近测试了一下LIO-Livox,觉得效果挺好的。所以就适配了一下传统旋转激光(主要是用lio-sam做的特征提取,激光里程计用LIO-Livox的去做,几乎不用怎么修改)。

用的ouster-64采集的数据,采集速度大概在0.7~1.2m/s(LIO-Livox声称支持50km/h以上的速度进行构图),但是运行一段时间就会出现轨迹漂移(激光10hz和imu数据100hz,都是ouster提供,所以已经是硬件时钟同步,imu-lidar的外参用的单位矩阵,实际上应该是有个小的平移变换的)。

现在卡在这里了,一直没找出问题在哪里?想听听你是什么看法?

可能的原因有:

①激光和imu的外参精度不够导致的。(因为没有标定,直接使用单位阵,而ouster里激光和imu应该也是接近单位阵的,这里的细微差距,对结果影响有多大,看了代码,主要是激光残差部分,如果本身接近单位阵,这里理论上应该影响也很小的);

②LIO-Livox的紧耦合,受传感器精度影响,特别是imu精度;(ouster内置100hz的imu,并且bias很大,在LIO-Livox中,是两帧的滑窗紧耦合,imu预积分结果受imu精度影响到底有多大呢?)

PS:同样的bag,也测试了lio-sam,效果蛮好的,当然,lio-sam的紧耦合,比较特别。

期待你的回复!

@Gatsby23 几个问题吧:

是我看别人说的:Ouster的世界戳不一定做到了真正硬同步,这个还是要测试看一下,可以把数据采下来后离线观察下?不行的话可以考虑加个插值来平滑下,然后去畸变(不过这个我也是纸上谈兵,具体没操作过)。
外参的问题我觉得你可以跑下FAST-LIO看下结果,看最后是不是收敛就基本上知道这个外参怎么样。我是直接跑FAST-LIO,发现收敛后的平移误差和我标定出来的差不多。
LIO-Livox有一个很重要的约束是NHC,用地面来约束角度,所以得看你们录制的数据是不是完全平行于地面?如果抖动比较大的话,也会造成比较大的影响。
最好能上最后的轨迹图来看看,如果说是跑了1KM以上飘的话,还是比较正常的

@chengwei0427: LIO-Livox是基于优化的方法,不是基于滤波的方法,跟lili-om有些相似。你可能是看的太多,又搞混了。

这里我是把LIO-Livox的特征提取部分,参考lio-sam的特征提取,修改为支持spinning激光;优化部分几乎没改,用的还是LIO-Livox的poseEstimation,所以大概率不是代码问题,而是我参数的问题,特别是lidar-imu参数。

比较诡异的是,如果我按照ouster内部的lidar-imu参数去设置fast-lio里的初值,稍微一动就会漂移;如果设置lidar-imu里旋转用单位阵,平移给一个参数,效果反而还不错。

2022 SLAM Application

原链接:https://github.com/engcang/SLAM-application

这个没有结果直接指明,而是把跑的算法都给了video和结果pcd/odom.txt

以下为摘取原文,请点击原链接查看更为详细的内容


Results:

  • video: Lego-LOAM vs LIO-SAM vs LVI-SAM
  • video2: LIO-SAM vs LVI-SAM
  • video3: LIO-SAM vs FAST-LIO2
  • video4: FAST-LIO2 vs Livox-mapping vs LOAM-Livox using Livox Mid-70 LiDAR, real-world
  • video5: FAST-LIO2 in the building with narrow stairs using Ouster OS0-128, real-world
  • video6: FAST-LIO2 in the narrow tunnels using Ouster OS0-128 on the UAV (drone)
  • video7: Faster-LIO vs FAST-LIO in the building with narrow stairs using Ouster OS0-128, real-world
  • video8: VoxelMap in the building using

2022 HKUST DATASET

IROS2022论文:FusionPortable: A Multi-Sensor Campus-Scene Dataset for Evaluation of Localization and Mapping Accuracy on Diverse Platforms

硕士所在组,虽然没参与 但是也学到了很多;这篇正在建立更多的数据集 并扩展为期刊中,请通过此网页链接了解哦~ https://ram-lab.com/file/site/multi-sensor-dataset/

以下为在此数据集上测试的定位结果,直接从IROS2022论文中截取:

2022 NTU DATASET

IJRR 2021: NTU VIRAL: A Visual-Inertial-Ranging-Lidar dataset, from an aerial vehicle viewpoint

之所以写2022是因为作者还在持续维护这个数据集,同时加入各个算法在此数据集上的使用与评估

悄悄话:博士组里第一作者天明大哥过来博后,上课的时候用的他们的数据集,所以就熟悉了一下 并且发现天明大哥写的scripts真好用;

2022/12/21 从网页截取的数据集适配的方法:

MethodRepositoryCredit
Open-VINS https://github.com/brytsknguyen/open_vinsForked from https://github.com/rpng/open_vins
VINS-Fusionhttps://github.com/brytsknguyen/VINS-FusionForked from https://github.com/HKUST-Aerial-Robotics/VINS-Fusion
VINS-Monohttps://github.com/brytsknguyen/VINS-MonoForked from https://github.com/HKUST-Aerial-Robotics/VINS-Mono
M-LOAMhttps://github.com/brytsknguyen/M-LOAMForked from https://github.com/gogojjh/M-LOAM
LIO-SAMhttps://github.com/brytsknguyen/LIO-SAMForked from https://github.com/TixiaoShan/LIO-SAM
A-LOAMhttps://github.com/brytsknguyen/A-LOAMForked from https://github.com/HKUST-Aerial-Robotics/A-LOAM
FAST_LIOhttps://github.com/Kin-Zhang/FAST_LIOKindly provided by Kin-Zhang @ KTH RPL

这是2021IJRR论文里的结果table:

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

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

相关文章

代码随想录刷题day51 309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费

代码随想录刷题day51 309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费 股票买卖,前两天的有点忘了正好也复习一下。 309.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 - 力扣(Leetcode) 不是很好优…

Java---SpringBoot---SpringBoot

SpringBoot1,SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.4 进行测试1.1.2 对比1.1.3 官网构建工程1.1.3.1 进入SpringBoot官网1.1.3.2 选择依赖1.1.3.3 生成工程1.1.4 SpringBoot工程快…

尚医通-预约下单中rabbitmq的使用

需求描述 在挂号界面选择完需要挂号的医生和排版后,添加就诊人,确认挂号 附上业务流程图 技术分析 我们今天主要来看看这块 mq 的运用,也是一个思考,我还是挑着重要的来讲,这里讲讲我们这里怎么使用 mq 的 这里会用…

关于λ-optimal的初始化解算法在(元)启发式中的应用

关于λ-optimal算法在启发式中初始化解的应用TSP问题介绍λ-optimal定理与定义算法描述与伪代码算法的优化参考文献这里讨论组合优化中初始解的生成问题。组合优化问题,很多情况下,解的生成是随机的或者是采用某种直观上满足题意的初始化方法&#xff0c…

12月1日(第三天)

四舍五入 Math.round()整形 字符串输出字符串,加字符则输出整形if else if,是互斥关系,同时满足条件,只会被执行前面那个,if if,是并列的关系,条件满足都会执行ORACLE中的操作(来自…

使用SpringBoot将图片上传至阿里云OSS

一. 对象存储OSS 1. 什么是OSS? 官方的解释是这样的:阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。 官网…

我开发的开源项目,让.NET7中的EFCore更轻松地使用强类型Id

在领域驱动设计(DDD)中,有一个非常重要的概念:“强类型Id”。使用强类型Id来做标识属性的类型会比用int、Guid等通用类型能带来更多的好处。比如有一个根据根据Id删除用户的方法的签名如下: void RemoveById(long id)…

【毕业设计】9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

毕业设计】基于STM32无刷直流电机控制器的设计仿真与实现(原理图源码仿真工程论文PPT参考英文文献) 文章目录毕业设计】基于STM32无刷直流电机控制器的设计仿真与实现(原理图源码仿真工程论文PPT参考英文文献)任务书设计说明书摘要…

能迪科技智能控制系统对中央空调进行精准、单独调控医院案例

案例背景​ 梅州市妇女儿童医院新院区(以下简称“新院区”)是省、市重点项目工程,建设地点位于江南新城客都大道北侧,一期项目总投资4.8亿元,占地面积50亩,总建筑面积87000平方米,按照三级妇幼保…

blender cycles引擎

文章目录简介属性一 Scene采样二 光程最多反弹次数钳制焦散快速GI近似三 体积步进速率四 曲线简介 1 cycles与EV的区别在于cy是传统渲染引擎,效果好,速度慢,ev是实时引擎,速度快,效果差 2 切换渲染引擎,属…

基于51单片机智能IC卡水表控制系统(仿真+源程序+全套资料)

资料编号:200 功能介绍: 采用51单片机作为主控CPU,使用按键进行模拟冲卡(模拟缴费冲卡),通过按键来控制当前是否使用自来水,并且LCD1602实时显示当前自来水可用量剩余多少,当自来水…

GhMYB7促进棉纤维中次生壁纤维素的积累

文章信息 题目:GhMYB7 promotes secondary wall cellulose deposition in cotton fibres by regulating GhCesA gene expression through three distinct cis-elements 刊名:New Phytologist 作者:Junfeng Huang,Wenliang Xu e…

图文详解Linux基础经典教程(10)——阿里云安装开发工具

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 之前,我们已经介绍在本地CentOS上安装JDK、Tomcat、MySQL等开发工具。接下来,我们介绍在阿里云安装这些开发工具。 购买阿里云 请在阿里云 h…

自然语言处理NLP——ERNIE-M:基于回译机制的“预训练-微调”多语言模型

目录 系列文章目录 一、背景介绍 1.多语言任务 1.1 多语言任务定义 1.2 多语言任务难题 2.多语言模型 2.1 多语言模型定义与原理 2.2 多语言模型困难 3.论文简介 3.1 背景与开发动机 3.2 论文梗概 3.3 论文贡献与成就 二、相关工作 1.预训练方法 1.1 预训练方法…

Postman之Newman命令行运行脚本生成HTML报告

目录 一、Newman的下载安装 二、Newman生成Html报告 三、执行脚本准备 3.1.导出项目集脚本 3.2.导出环境变量 3.3.导出全局变量 3.4.data数据驱动文件 3.5.文件存储 四、Newman运行命令简介 4.1.运行命令:newman run 4.2.常用参数: 4.3.执行…

【SSM框架】依赖注入

🍓个人主页:个人主页 🍒系列专栏:SSM框架 目录 1.依赖注入之setter注入 2.依赖注入之构造器注入 3.特殊值处理 4.为类类型属性赋值 5.为数组类型属性赋值 1.依赖注入之setter注入 ①创建学生类Student package com.atguigu.s…

09【SpringMVC的Json支持】

文章目录三、Json的支持3.1 响应json3.1.1 ResponseBody3.1.2 JsonIgnore3.1.3 JsonFormat3.1.4 ResponseEntity3.1.5 作用在类上3.1.6 RestController3.2 请求Json3.2.1 RequestBody3.2.2 HttpEntity3.2.3 封装Json数据三、Json的支持 SpringMVC支持自动将JSON转换成Java对象…

ubuntu更换清华源

进入:清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择你的ubuntu版本 vi /etc/apt/sources.list 如果执行apt update 报镜像源证书错误 (1)将/etc/apt/sources.list中的https改为http, 然后执行apt update; &#…

Linux进程状态

目录 一、普适操作系统的进程状态 1.什么是进程状态 2.三种重要的进程状态 (1)运行状态 (2)阻塞状态 (3)挂起状态 二、Linux源代码中的进程状态 三、Linux进程状态 1.运行状态 2.睡眠状态&#x…

AI加速(九): 深度理解吞吐量和延时

前文回顾: AI加速(二)| 计算机存储和计算的分离 AI加速(三)| 每条指令都是流水线的工人 AI加速(四)| 衣柜般的分层存储设计 AI加速(五)| 一个例子看懂流水——从指令到…