网站首页 > 技术文章 正文
0. 论文信息
标题:High-Speed Stereo Visual SLAM for Low-Powered Computing Devices
作者:Ashish Kumar, Jaesik Park, Laxmidhar Behera
机构:Indian Institute of Technology (IIT)、Seoul National University (SNU)
原文链接:https://arxiv.org/abs/2410.04090
代码链接:https://github.com/ashishkumar822/Jetson-SLAM
1. 导读
我们提出了一个精确的和GPU加速的立体视觉SLAM设计,称为Jetson-SLAM。它在NVIDIA的低功耗10W Jetson-NX嵌入式计算机上显示出60FPS以上的帧处理速率,在桌面级200W GPUs上显示出200FPS以上的帧处理速率,即使在立体声配置和多尺度设置中也是如此。我们的贡献有三个方面:(1)一种有界校正技术,以防止在快速检测中将许多非角点标记为角点,提高SLAM准确性。(2)一种新的金字塔剔除和聚集(PyCA)技术,通过利用GPU设备,在高速抑制冗余特征的同时,产生鲁棒的特征。PyCA使用我们针对GPU的新的多位置每线程剔除策略(MLPT)和线程高效Warp-Allocation (TEWA)方案,使Jetson-SLAM在嵌入式设备上实现高精度和高速度。(3)Jetson-SLAM图书馆通过数据共享机制实现资源效率。我们在三个具有挑战性的数据集上的实验:KITTI、EuRoC和KAIST-VIO,以及两个高度精确的SLAM后端:Full-BA和ICE-BA表明,Jetson-SLAM是可用的最快的精确和GPU加速SLAM系统。
2. 引言
厘米级精度的局部定位系统对于复杂的机器人和自主飞行系统精确执行导航、控制和视觉伺服任务至关重要。视觉里程计(VO)可用于此目的,但它会丢弃早期的环境观测数据,缺乏全局一致性。这会导致位姿估计随时间漂移,即使智能体在同一区域内导航。
相比之下,视觉SLAM提供了无漂移的定位和建图能力,从而能够精确执行自主任务。在此背景下,立体视觉SLAM因其高度精确的度量性能和低成本的传感器需求而特别引人注目。然而,其计算密集型的前端(特征检测-提取-匹配、立体匹配)和后端(图优化、回环检测、定位和建图)会迅速耗尽低功耗设备的计算能力。此外,这些设备的有限计算能力迫使SLAM系统丢弃中间帧,从而导致帧率降低和跟踪失败。
在数据采集、控制、抓取和计算密集型的深度网络等共存模块共享计算资源的情况下,这种情况会变得更加困难。它很容易导致系统灾难性故障,例如,由于位置反馈延迟,控制系统偏离期望轨迹。因此,基于无人机的自主操纵系统在远程计算机上执行SLAM。其他工作探索了用于SLAM的网络计算,但不适合孤立的机器人系统。
尽管已有加速VO系统的努力,但SLAM仍未受到关注。例如,最近工作仅将现有VO系统的运行时在Jetson设备上进行了基准测试。在VO中,通过将图像划分为网格,并从每个网格中选择一个特征来限制特征数量是一种常用方法。
在多尺度设置中,其不可配置的2倍缩放因子会大幅降低图像分辨率,从而导致特征数量减少,并且无论尺度数量如何,每个网格中的特征都会进一步缩减到仅一个,从而在SLAM中导致特征点不足,造成跟踪失败。此外,当部署到嵌入式计算设备时,对于较小的网格,它效率不高。
ORB-SLAM2、ICE-BA是高度精确的SLAM系统。然而,其复杂的仅CPU工作量使其速度变慢并耗尽低功耗设备的计算能力。SLAMCore是CPU高效的SLAM,但它不是开源的,并且没有与深度网络一起进行基准测试。尽管存在这些限制,但高速SLAM系统是当前时代的需求,在现代自主系统中具有广阔的应用前景。
在视觉SLAM中,速度主要受前端负载的影响,该负载随图像分辨率而变化,在立体模式下(我们关注的模式)会加倍。此外,前端产生的特征数量会影响后端负载。因此,我们从零开始开发了一个GPU加速的前端,该前端利用嵌入式计算机的片上GPU,以高速产生数量足够少但影响较大的特征。然而,在此努力中,GPU核心的稀缺性成为限制可实现最大速度的瓶颈,而核心的低效使用会降低GPU吞吐量。我们通过算法和系统开发的贡献解决了这个问题,从而得出了迄今为止可用的高速、精确且资源高效的GPU加速SLAM系统,称为Jetson-SLAM。
3. 效果展示
(a)Jetson-SLAM的GPU加速且资源高效的前端-中端设计输出;(b)输出轨迹;(c)在Jetson-NX嵌入式计算机上的每秒帧数(FPS)基准测试;以及(d)在KITTI序列上的SLAM性能。
我们注意许多工作将许多非角点错误地分类为角点。这些点本质上是具有类似散粒噪声或微小斑点状外观的统计离群值。由于其高度相似的外观会使立体匹配器产生混淆,因此不能用作地图点。例如,图2a中的所有分割像素都很亮且Nb > Pmin,但它并不是一个角点。图2b展示了一个现实世界的案例。这个问题需要解决,因为前端中的错误会传播到其他SLAM组件。因此,我们旨在在检测阶段本身就丢弃这些点,因为这减少了到达立体匹配器的特征数量,从而降低了匹配时间。为此,我们提出了一种关键改进方法,称为有界校正,它不仅提高了角点质量,还显著提高了Jetson-SLAM的度量精度。
4. 主要贡献
我们的贡献包括:
a) 有界校正:防止将非角点误分类为FAST特征中的角点,并通过产生有影响的角点来提高SLAM的准确性。
b) 金字塔剔除和聚合(PyCA):通过我们的每线程多位置(MLPT)剔除和线程高效扭曲分配(TEWA)来产生高质量的多尺度特征,即使在GPU核心稀缺的情况下也能实现高速度(2000 FPS)和高计算效率。
c) Jetson-SLAM的前端-中端-后端设计:我们开发了一个新的SLAM组件,称为中端,它包含立体匹配、特征匹配、特征跟踪,并执行数据共享,以避免在SLAM组件之间复制和访问所需中间结果的CPU-GPU内存传输开销。
尽管我们在前端和系统设计上做出了贡献,但中端和后端的性能也得到了提升。这使得Jetson-SLAM在达到60FPS以上(分辨率为432×240)时既高效又准确,即使在Jetson-NX的立体模式下达到八个尺度,并且与VGG深度神经网络一起使用时也是如此。高速减少了相机旋转期间的跟踪失败(视频),并促进了仍然依赖外部定位系统的自主无人机的开发。
5. 方法
我们阐述了系统开发的贡献,即新的前端-中端Jetson-SLAM设计(图7)以及为实现信息流优化而进行的战略整合。尽管前端已有所成就,但这些贡献对于实现资源高效利用至关重要,因为当前的SLAM组件是多设备驻留的(CPU和GPU)。
微秒级高效的FAST检测:我们使用两个16位整数Bb和Bd,其中每个位表示Bresenham路径上的16个位置之一。当Bb中的Lp为亮、Bd中的Lp为暗时,对应位为'1',而'0'位则表示Lp相似。为了加速这一过程,我们构建了一个查找表,其中基于所提出的有界校正技术,所有16位组合都已预先计算为角点或非角点。我们使用圆上绝对差值(|Ic?Ip|)的总和作为角点响应。
精简的多尺度检测与提取:我们的前端专注于高速SLAM,但也可以作为仅执行检测的VO前端使用。相比之下,SLAM还需要为地图元素计算描述符,这使得SLAM比VO更慢。多尺度设置计算更为密集,且GPU核心的稀缺性阻止了多个任务的并发执行。因此,我们采用CUDA流以加快执行速度,这样当GPU释放一个尺度的计算资源时,其CPU工作开始,同时GPU被分配给另一个尺度。在提取方面,由于ORB描述符的速度和唯一性,我们选择了它,但现有实现是对每个尺度进行串行提取的。由于我们已经准备好了多尺度关键点,因此我们一次性对所有尺度进行提取。为此,我们通过CUDA流并行化高斯滤波,这对于鲁棒性至关重要。然后,ORB提取(这是一个非常耗时的步骤,会阻止内存合并)一次性在所有尺度上进行,从而实现高速多尺度检测与提取(图10d)。
中端:尽管立体视觉SLAM具有高精度,但它对Jetson类设备造成了很大的计算负担。此外,与VO不同,特征跟踪中的地图点圆锥投影也很耗时。因此,为了实现高吞吐量,我们对两者进行了并行化,它们现在构成了中端。然而,简单地这样做会导致效率低下,因为立体匹配需要描述符和图像存在于GPU内存中。由于它们也被许多SLAM组件使用,因此在资源受限的平台上创建它们的多个副本是不可取的。因此,我们设计了一种信息流,允许前端和中端之间的数据共享(图7)。它通过防止数据重复来节省内存消耗,从而避免了CPU-GPU数据传输的开销。实现这一任务在编程上很复杂,但我们通过下面讨论的同步共享内存来解决它。
同步共享内存(SSM):我们采用了同步内存原语,并在此基础上构建了同步共享内存(SSM),它封装了CPU-GPU传输以及内存分配/释放调用。由于帧之间的特征数量不断变化,立体匹配和跟踪需要可变内存。在这种情况下,SSM通过仅在请求的内存超过当前大小时才执行分配/释放调用,来减少动态内存分配/释放调用。此外,当访问CPU-GPU内存时,SSM会自动将底层数据传输到目标设备,从而降低了框架的复杂性。
6. 实验结果
7. 总结 & 未来工作
我们为低功耗计算设备提出了一种资源高效且精确的GPU加速Jetson-SLAM方法。我们提出了有界校正(Bounded Rectification),以防止在FAST角点检测过程中将非角点误分类为角点,并提出了金字塔剔除与聚合(Pyramidal Culling and Aggregation,PyCA),它能在多尺度和立体设置下以极高的速度生成高质量特征。PyCA基于我们的特征剔除(Feature Culling,FC)、金字塔特征聚合(Pyramidal Feature Aggregation,PFA)、多线程多位置剔除(Multi-Location Per-Thread,MLPT)和线程高效扭曲分配(Thread Efficient Warp Allocation,TEWA)技术。我们还设计了视觉SLAM中的中端部分,并开发了Jetson-SLAM库,该库利用同步共享内存来实现资源高效利用。Jetson-SLAM展现出了非常高的帧率,适用于包含多个子系统的现代自主机器人系统。即使在Jetson设备上的多尺度和立体设置下,Jetson-SLAM的性能也远超许多著名的SLAM流水线。
对更多实验结果和文章细节感兴趣的读者,可以阅读一下论文原文~
猜你喜欢
- 2024-10-31 如何实现鼠标绘制三角形? 鼠标三角形显示怎样才能增大
- 2024-10-31 CADCAM软件应用试题 cadcam题库
- 2024-10-31 Python pyecharts v1.x 绘制图形 python怎么绘制图形
- 2024-10-31 视觉SLAM中闭环检测算法的研究 什么是闭环测试
- 2024-10-31 |期刊分享|SLAM|不到200行C代码的CoreSLAM
- 2024-10-31 纹理贴图原理与实践【Texture Mapping】
- 2024-10-31 利用html canvas实践三角形光栅化
- 2024-10-31 wu反走样画线算法的实现 wu反走样算法绘制直线
- 2024-10-31 OpenGL绘制城堡报告加源码计算机图形学 城堡
- 2024-10-31 圆生成算法 圆的生成方式有哪三种
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)