GSLAM——一个通用的SLAM架构和基准

news2024/12/25 15:47:26

GSLAM: A General SLAM Framework and Benchmark

开源地址

摘要: SLAM技术最近取得了许多成功,并吸引了高科技公司的关注。然而,如何同一现有或新兴算法的界面,一级有效地进行关于速度、稳健性和可移植性的基准测试仍然是问题。本文,提出了一个名为GSLAM的新型SLAM平台,它不仅提供评估功能,还为研究人员提供了快速开发自己的SLAM系统的有用工具。GSLAM的核心贡献是一个通用的、跨平台的、完全开源的SLAM接口,旨在处理输入数据集、SLAM实现、可视化和应用程序的统一框架中的交互。通过这个平台,用户可以以插件形式实现自己的功能,以提高SLAM的性能,并进一步将SLAM的应用推向实际应用。

主要贡献:

  1. 本文提出了一个通用的、跨平台的、完全开源的SLAM平台,旨在用于研究和商业用途,超越了以往的基准测试系统。SLAM接口由多个轻量级、无依赖的头文件组成,这使得在统一框架中以插件形式与不同数据集、SLAM算法和应用进行交互变得容易。此外,还提供了JavaScript和Python,以支持基于Web和深度学习的SLAM应用。
  2. 提出的GSLAM平台中,引入了三个经过优化的模块作为实用工具类,包括Estimator、Optimizer和Vocabulary。Estimator旨在提供一组封闭形式的求解器,涵盖所有情况,具有强大的样本一致性(RANSAC);Optimizer旨在提供流行的非线性SLM问题的统一接口;Vocabulary旨在提供高效且可移植的词袋实现,用于多线程和SIMD优化的地点识别。
  3. 受益于上述接口,该工作在一个统一的框架中实现并评估了现有数据集、SLAM实现和可视化应用的插件,未来出现的基准测试或应用也可以轻松地进行进一步集成。

通用框架:
该框架被设计为与各种不同类型的SLAM实现兼容,包括但不限于单目、双目、RGBD和多摄像头视觉惯性里程计与多传感器融合。现代深度学习平台和开发人员更喜欢使用Python进行编码,因此GSLAM提供了Python绑定,开发人员能够使用Python实现SLAM,并使用GSLAM调用它,或者使用Python调用基于C++的SLAM实现。此外,还支持JavaScript用于基于Web的用途。
在这里插入图片描述

  1. 处理SLAM实现的输入。运行SLAM时,需要传感器数据和一些参数。对于GSLAM,使用Svar类进行参数配置和命令处理。所有SLAM实现所需的传感器数据都由Dataset实现提供,并使用Messenger进行传输。GSLAM实现了几个流行的视觉SLAM数据集,用于可以自由实现自己的数据集插件。
  2. SLAM实现。GSLAM将每个实现视为插件库。开发人员可以非常容易地基于GSLAM接口和实用类设计一个SLAM实现。开发人员还可以使用接口包装实现,而无需引入额外的依赖。用户可以专注于核心算法的开发,而无需关心SLAM实现外部需要处理的输入和输出。
  3. 可视化部分或使用SLAM结果的应用。在SLAM实现处理输入帧后,用户可能希望展示或利用结果。为了通用性,SLAM结果应以标准格式发布。默认情况下,GSLAM使用Qt进行可视化,但用户可以自由实现自定义的可视化工具,并添加应用插件,如评估应用程序。

基础接口: SLAM接口通常使用的一些数据结构包括参数设置/读取、图像格式、姿态变换、相机模型和地图数据结构。具体内容可以阅读原文

SLAM实现工具:

  • Estimator
    纯几何计算仍然是一个需要强大和准确的实时解决方案的基本问题。传统的视觉SLAM算法或现代的视觉惯性解决方案都依赖与几何视觉算法来进行初始化、重定位和回环闭合。OpenCV提供了多个几何算法,Kneip提供了一个用于几何视觉的工具箱OpenGV,该工具箱仅限于相机姿态计算。GSLAM的Estimator旨在提供一系列包括所有情况的封闭形式解算器,并使用了鲁棒的随机采样一致性方法(RANSAC)。
    在这里插入图片描述
    表2列出了Estimator支持的算法。根据给定的观测数据,它们被分成三类。2D-2D匹配用于估计极线或单应约束,并且可以从中分解相对姿态。2D-3D对应于估计单目或多摄像头系统的中心或非中心绝对位姿,这是著名的PnP问题。还支持3D几何函数,如平面拟合,以及估算两个点云的SIM变换。大多数算法都依赖与开源线性代数库Eigen,它是一个仅包含头文件的库,并且适用于大多数平台。

  • Optimizer
    非线性优化是现代几何SLAM系统的核心部分。由于Hessian矩阵的高纬度和稀疏性,图结构被用来建模SLAM的复杂估计问题。提出了几种框架,包括Ceres、G2O和GTSAM,用于解决一般的图优化问题。这些框架在不同的SLAM系统中广泛使用。ORB-SLAM、SVO使用G2O进行BA和位姿图优化。OKVIS、VINS使用Ceres进行带IMU因素的图优化,滑动窗口用于控制计算复杂性。Forster等人提出了一种基于SVO的视觉初始化方法,并使用GTSAM实现后端。
    GSLAM的Optimizer旨在为大多数非线性SLAM问题提供一个统一的接口,如PnP求解器,BA,姿态图优化。基于Ceres库实现了这些问题的通用插件。对于特定问题,如BA,还可以提供一些更高效的实现,如PBA和ICE-BA作为插件。使用优化器工具,开发人员可以使用统一的接口访问不同的实现,特别是用于基于深度学习的SLAM系统。

  • Vocabulary
    地点识别是SLAM系统中最重要的部分之一,用于重新定位和回环检测。词袋(BoW)方法在SLAM系统中广泛使用,因为它高效且性能出色。FabMap提出了一种基于外观的地点识别的概率方法,该方法用于RSLAM、LSD-SLAM等系统。由于它使用了像SIFT和SURF这样的浮点描述子,DBoW2为训练和检测构建了一个词汇树,支持二进制和浮点描述子。Refael提出了DBoW2的两个改进版本,DBoW3和FBoW,它们简化了接口并加快了训练和加载速度。之后,ORB-SLAM采用了ORB描述子,并使用DBoW2进行回环检测、重定位和快速匹配。随后,一系列SLAM系统,如ORB-SLAM2、VINS-Mono和LDSO,使用DBoW3进行回环检测。它已经成为实现SLAM系统地点识别的最流行工具。
    受上述工作的启发,GSLAM对DBoW3词汇进行了仅包含头文件的实现,具有以下特点:
    (1)去除了对OpenCV的依赖,所有函数都在一个仅依赖C++11的头文件中实现。
    (2)结合DBoW2/3和FBoW的优点,具有极快的速度和易于使用。提供了类似于DBoW3的接口,并使用SSE和AVX指令加速了二进制和浮点描述子。
    (3)改进了内存使用和加速了加载、保存或训练词汇以及从图像特征到BoW向量转换的速度。
    在这里插入图片描述
    表3展示了四个词袋库的比较。在实验中,每个父节点有10个子节点,ORB特征检测使用ORB-SLAM,SIFT检测使用SiftGPU。实现结果中使用了ORB词汇,分别有4级和6级,以及一个SIFT词汇。FBoW和GSLAM都使用多线程进行词汇训练。GSLAM的实现在几乎所有项目中的表现都优于其他实现,包括加载和保存词汇、训练新词汇、将描述符列表转换为用于地点识别的BoW向量和用于快速特征匹配的特征向量。此外GSLAM实现使用更少的内存,并分配了更少的动态内存块,因为DBoW2需要大量内存的主要原因是碎片问题。

SLAM评估基准:

  • Dataset
    运行SLAM系统通常需要传感器数据流和相应的配置。为了让开发人员专注于核心SLAM插件的开发,GSLAM提供了一个标准的数据集接口,开发人员不需要关心SLAM的输入。通过不同的数据集插件,提供了在线传感器输入和离线数据,正确地插件会根据给定的数据集路径后缀动态加载。数据集的实现应该提供所有请求的传感器流以及相关配置,因此不需要为不同的数据集进行额外设置。所有不同的传感器流通过Messenger发布,使用标准的主题名称和数据格式。
    GSLAM已经实现了几个流行的视觉SLAM数据集插件,如表4所示。用户也可以非常容易地基于仅包含头文件的GSLAM核心来实现一个数据集插件,并将其发布为插件并与应用程序一起进行编译。
    在这里插入图片描述

  • SLAM Implementations
    在这里插入图片描述
    图2展示了一些使用内置Qt可视化器运行的开源SLAM和SfM插件的屏幕截图。该框架支持不同体系结构的SLAM系统,包括直接法、半直接法、基于特征的方法,甚至SfM方法。DSO实现需要发布结果,例如点云、相机姿势、轨迹和姿态图,以便像基于ROS的实现一样进行可视化。用户可以使用统一的框架访问不同的SLAM插件,根据C++、Python和Node-JS接口开发基于SLAM的应用程序非常方便。由于许多研究人员在开发中使用ROS,GSLAM还提供了ROS可视化插件,以无缝传输ROS定义的消息,并使开发人员可以利用Rviz进行显示或继续开发其他基于ROS的应用程序。

  • Evaluation
    由于大多数现有的基准只提供数据集,或者没有groundtruth供用户自行进行评估,GSLAM提供了一个内置插件和一些脚本工具,用于计算性能和精度评估。
    计算性能评估包括内存使用、分配内存块数量、CPU使用率以及统计每帧所用的时间,如图3所示。结果表明,SVO使用的内存和CPU资源最少,并获得了最快的速度。而且由于SVO只是一个视觉里程计,在实现内部只维护了一个本地地图,所以成本保持稳定。DSO分配的内存块数较少,但消耗了100MB以上的内存,且增长较慢。DSO的一个问题是当帧数低于500时,处理时间会急剧增加,此外,关键帧的处理时间甚至更长。ORB-SLAM使用了最多的CPU资源,计算时间稳定,但内存使用快速增加,并且它分配和释放了大量的内存块,因为其BA使用了G2O库,没有使用增量优化方法。
    在这里插入图片描述
    图4展示了里程计轨迹的评估结果。如图所示,SVO速度较快,但漂移较大,而ORBSLAM在绝对姿态误差(APE)方面达到了最高的精度。由于综合评估是一个可插拔的插件应用程序,可以重新实施更多的评估指标,例如点云的精度。
    在这里插入图片描述

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

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

相关文章

芯片干货 | 同步内置MOS升压恒压5V/2A芯片FP6276B,输入限流可调

芯片概述 FP6276B是一个具有PWM/PSM控制的电流模式增压直流-直流转换器。它的PWM电路内置40mΩ高侧开关和40mΩ低侧开关使该调节器高高效。内部补偿网络还将外部组件计数最小化到只有6个。一个内部的0.6V电压被连接到误差放大器的非反相输入作为精度参考电压。内置的软启动功能…

Llama 3.2 智能代理开发教程

构建研究代理可能很复杂,但使用 LangChain 和 Ollama,它会变得更加简单和模块化。 在本教程中,我们将向你展示如何基于Llama 3.2创建一个研究代理,该代理可以路由查询、执行网络搜索并使用工作流和 LLM 的组合生成详细响应。最后…

我的书第三次重印啦,做一波活动,参与可抽现金红包~

大家好,我是拭心,好久不见。 四月份我的《Android 性能优化入门与实战》顺利出版,在朋友们帮忙宣传下,初印的两三千册很快卖完,四月份第二次重印,五个月后,又迎来了第三次重印。 这样的销量算不…

如何解决Lenovo笔记本电脑很快就自动休眠,自动锁屏,需要密码登录的问题

前段时间电脑经常会很快就锁屏了,只要离开电脑1分钟不到,就自动锁屏,然后就要输入密码登录,太烦了,后来百度和谷歌了不少帖子和方案,给的建议都是调整电源选项之类的参数。 尝试了各种修改参数&#xff0c…

栈和队列--DS

1. 栈(Stack) 1.1 栈的定义 **栈是一种特殊的线性表,其只允许在固定的一端(栈顶)进行元素插入和删除元素操作。**进行数据插入和删除操作的一段称为栈顶,另一端则称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)原则。 1.2 栈的核心操…

Android 无Bug版 多语言设计方案!

出海业务为什么要做多语言? 1.市场扩大与本地化需求: 通过支持多种语言,出海项目可以触及更广泛的国际用户群体,进而扩大其市场份额。 本地化是吸引国际用户的重要策略之一,而语言本地化是其中的核心。使用用户的母语…

E37.【C语言】动态内存管理练习题

目录 1. 答案速查 分析 源代码分析 反汇编代码分析(底层) 2. 答案速查 分析 3. 答案速查 分析 VS逐步调试 1. 求下列代码的执行结果 #include <stdio.h> char* GetMemory(void) {char p[] "hello world";return p; }void Test(void) {char* str…

软件测试学习笔记丨allure学习指南

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32336 安装与下载 需要下载本地文件&#xff0c;并且添加到环境变量里 windows&#xff1a;下载&#xff0c;解压&#xff0c;并配置环境变量 mac&#xff1a;brew install allure 环境变量…

1688代采系统-反向海淘系统详细介绍

Onebound凡邦1688代采系统-反向海淘系统是一种专为海外买家及跨境电商提供一站式采购解决方案的平台。其核心功能和服务旨在解决跨境采购中的语言、货币等常见问题&#xff0c;并优化采购流程&#xff0c;提高采购效率。以下是对该系统的详细介绍。 一、核心功能 商品采集与展…

==与equals比较

在JVM中&#xff0c;内存分为堆内存跟栈内存。他们二者的区别是&#xff1a; 当我们创建一个对象&#xff08;new Object&#xff09;时&#xff0c;就会调用对象的构造函数来开辟空间&#xff0c;将对象数据存储到堆内存中&#xff0c;与此同时在栈内存中生成对应的引用&#…

【AI绘画】如何选择AI绘画工具?Midjourney VS Stable Diffusion?

前言 文章目录 &#x1f4af;如何选择合适的AI绘画工具 个人需求选择比较工具特点社区和资源 &#x1f4af; Midjourney VS Stable Diffusion&#xff1a;深度对比与剖析 使用费用对比使用便捷性与系统兼容性对比开源与闭源对比图片质量对比上手难易对比学习资源对比作品版权…

猎头是这样看简历的?

猎头在看简历时&#xff0c;会遵循一系列高效而系统的步骤&#xff0c;以确保筛选出最适合客户需求的候选人。以下是对猎头如何看简历的详细分析&#xff0c;内容虽无法精确控制在3000字以内&#xff0c;但将尽量精简并涵盖关键信息&#xff1a; 一、初步浏览与筛选 1.基本信…

FLIR AX8 download.php 任意文件读取复现

0x01 产品描述&#xff1a; FLIR-AX8是美国菲力尔公司&#xff08;Teledyne FLIR&#xff09;旗下的一款工业红外热像仪AX8&#xff0c;英文名为Teledyne FLIR AX8 thermal sensor cameras。菲力尔公司专注于设计、开发、生产、营销和推广用于增强态势感知力的专业技术&#xf…

栈与队列面试题(Java数据结构)

前言&#xff1a; 这里举两个典型的例子&#xff0c;实际上该类型的面试题是不确定的&#xff01; 用栈实现队列&#xff1a; 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;双栈 思路 将一个栈当作输入栈&#xff0c;用于压入 push 传入的数…

传统少数民族物品检测系统源码分享

传统少数民族物品检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

【C语言】分支和循环(3)

&#x1f600;个人主页: 起名字真南 &#x1f601;个人专栏 目录 1 for 循环1.1 语法形式1.2 执行流程图1.3 for循环的实践 2 do-while循环2.1 语法形式2.2 执行流程图2.3 do-while循环的实践 3 break 和 continue 语句4 goto语句 1 for 循环 1.1 语法形式 for循环是三种循环…

【Centos】系统安装虚拟系统管理器创建虚拟机

在windows服务器里使用vmware等工具轻松建立虚拟服务器&#xff0c;可以安装各种操作系统。 在Centos系统中默认安装菜单的系统工具中没有找到这个管理器的启动菜单&#xff0c;默认没有安装。 想使用KVM虚拟系统创建虚拟机如何操作呢&#xff1f;最简单就是下面这些命令&…

ViT(Vision Transformer详解)

Transformer作为前沿的深度学习框架&#xff0c;带有多模态的特性&#xff0c;对于不同类型的输入数据&#xff0c;不管是文本还是图像均可进行处理&#xff0c;而ViT则是对于Transformer中的视觉方面&#xff08;也就是输入数据为图像&#xff09;的衍生物&#xff08;因Trans…

从基础到精通:构建并微调大型语言模型以实现分类任务

本章内容 介绍不同的大型语言模型&#xff08;LLM&#xff09;微调方法准备用于文本分类的数据集修改预训练LLM以便进行微调微调LLM以识别垃圾信息评估微调后的LLM分类器的准确性使用微调后的LLM对新数据进行分类 到目前为止&#xff0c;我们已经编写了LLM的架构、对其进行了…

小程序和h5深度分析

你写过小程序/H5&#xff0c;那你知道他们的区别在哪里吗&#xff1f; 为什么说小程序的性能通常优于 H5? 小程序能访问到 DOM 对象吗&#xff1f; 小程序的原理是什么&#xff1f; 小程序和 H5 都是轻量级的、可直接在移动设备上运行的应用&#xff0c;但它们之间存在一些关…