当前位置: 首页 > news >正文

【论文阅读】ART-SLAM: Accurate Real-Time 6DoF LiDAR SLAM

一、系统概述

模块化是这篇论文强调的一个突出特点,根据论文给出的图示,ARTSLAM框架分为了可选模块和必选模块,下图中灰色的代表必选模块,而彩色的则代表可选模块,橙色的原始点云代表的是输入,也属于必选模块,可以根据设备的性能以及传感器的类型进行补充。
在这里插入图片描述
论文认为这种模块化的方式有三个好处,首先数据是从模块发送往其它模块的,在发送之前都会在模块中存储旧数据,所以一定程度上能够防止内容的丢失,其次这种模块化的框架能够方便新的模块整合进入现有的框架,最后多个模块之间可以并行运行,从而提高程序的时间效率。根据论文里面的描述,这种模块化的实现方法应该是用ROS的节点机制,个人感觉,模块化这个特点属于编程思想而不是一种能够放在论文里面的改进点,就好比有人把ORBSLAM的内容用ROS重新写了一遍,然后说这是他的改进,不可否认这确实是一种改进,但只能算是实际应用层面的改进,本质上还是ORBSLAM的内容,所以个人认为这个模块化就是在凑工作量。

二、预过滤模块

原始的点云数据根据框架的流程,首先进入的就是pre-filter模块,在这个模块中,主要的任务就是降低点云的体积并一定程度上消除其中的噪声数据。降低点云的体积是出于计算开销的考量,如果不对点云做下采样,采用ICP那样的整帧的点云配准方法的开销是很大的,论文这里采用的是另一篇论文中的下采样的方法,并在其基础上做了改进,ARTSLAM借鉴的论文是A portable 3d lidar-based system
for long-term and wide-area people behavior measurement
,在他的基础上,将点云划分为八个扇形区域,每两个扇形区域成一组,在每个组内进行下采样,从而得到一个体积较小的点云。

三、跟踪器

跟踪器模块我们可以直接认为就是计算位姿变化的模块,ARTSLAM采用的是基于关键帧的全局扫描的计算方法。全局扫描的方法论文用的表述方法是scan-to-scan,类似的方法有ICP/GICP/VGICP/NDT,个人感觉就是利用整帧点云或者说下采样后的整帧点云,所有的输入都会纳入到位姿计算中,这样计算出来的结果必然准确,但是计算开销很大,与这种方法相反的是LOAM,LOAM采用划分边点和面点的方法,配准的过程只使用这些点,所以计算开销小了很多,但是相应地准确度也会受影响,这本身是一个取舍的问题,时间开销和效果只能二选一。
而基于关键帧的方法,则强调的是每次计算位姿变化时,两帧的选择。在ARTSLAM中,每个关键帧都保存了点云信息、位姿信息、时间戳、累积距离等内容,如果传感器情况允许,还可以保留加速度、旋转角等内容。关键帧的选择论文给出了三个条件,只要满足其中一个就可以认为是一个新的关键帧。
在这里插入图片描述
这三个条件分别从距离、旋转和时间上对关键帧做了限制,距离上一个关键帧过远、旋转过大或者时间间隔太大,都会新建一个关键帧。
而论文中所谓的基于关键帧的方法,指的就是每次计算位姿时,使用的点云一个是当前帧的点云,而另一个则是上一个关键帧的点云。一般来说无论是激光SLAM还是视觉SLAM,计算位姿时使用的大多数是相邻的两帧,因为这两帧的偏差不大,计算的收敛速度可能会快一些,在ARTSLAM中换成了上一个关键帧和当前帧,论文作者认为这样做可以减小累积误差,仔细考虑一下确实是这样,如果按照原来的计算方法,第十帧的误差会是前面十次计算的误差的累积,而换用这种方法,每一帧的误差都只有一帧的量,而且误差不会累计,相对地计算的误差也会大一些,并且对关键帧的选择策略也有一定的要求,个人感觉采用这种方法必须要让关键帧的数量多一些,不然帧与关键帧之间的差距一旦过大,虽然不会让累积误差增大,但会让当前帧计算出来的位姿误差偏大。除此之外,为了加速位姿的计算过程,可以采用其它传感器的平均值或者采用恒速模型来提供一个初值,从而加速收敛。

四、预跟踪器

这个模块属于一个可选模块,放在跟踪器模块之前,根据论文的描述,对于一些低端设备而言,点云体积过大会导致计算的时间开销过大,所以一个比较靠谱的初值能够起到一个很好的辅助效果。因此在ARTSLAM中增加了这一个模块,简单来说就是对同一对点云,做不同规模的下采样,重复计算多次位姿,利用这些低体积点云计算出来的结果给跟踪器模块提供一个初值,从而加速计算过程,如果计算结果足够准确甚至可以短路跟踪器模块。

个人感觉这个模块有些奇奇怪怪,论文使用的位姿计算方法是基于全局扫描的,所以计算一次的时间开销必然是不小的,不管采用什么程度的下采样,时间开销终归是不可忽略的,这样做对于低端设备而言可能会有负面效果。但是如果从多线程的角度来看,这个模块是和预过滤模块并行的,而下面的模块都必须要等待预过滤模块的结果,是不是可以理解为预跟踪器就是在利用预过滤模块的计算时间,这段时间等也是干等着不如做点什么,于是就引入了这个模块,将点云体积下降到足够快的程度,计算一个不靠谱的初值给后续模块,这样去理解可能合理一些。

五、地面检测

地面检测的部分主要是为了增加高度和旋转的一致性,这个模块在很多的激光SLAM里面都有体现,在ARTSLAM中,改进主要体现在整合了很多种场景的地面检测。
论文一共提出了三种场景下的计算策略。首先对于最普通的场景下,也就是对平面以及类平面的筛选,首先在一个可接受的范围内做点云的筛选,只保留近距离的点云,之后对点云的法线向量做筛选,如果明显非垂直,则直接排除,之后再利用RANSAC剔除离群点,最后用剩下的点拟合平面。
第二种场景是崎岖不平的场景,这个场景下由于地面是崎岖不平的,所以没法用RANSAC剔除离群点,论文的处理方法是根据水平距离做筛选,之后直接拟合平面。一个问题在于,这种场景和上一种场景关于距离筛选的区别,论文的表述几乎是一样的,在崎岖不平场景下多了一个horizontally,所以是不是说该场景是用点云的xy坐标做筛选,而第一类场景则是利用xyz来筛选。
最后一种场景则是斜面的情况,斜面的检测需要依赖后端的位姿图,如果两个关键帧中出现了明显的法向量方向的改变,则可以认为是检测到的是一个斜面。

六、回环检测

在ARTSLAM中,回环检测一共有四个检测。每次有新的关键帧插入,都会进行一次回环检测。如果待检测的两帧轨迹上的距离过近,则认为不构成后续回环帧对,如果位姿的相似性相似性过小,也不认为是候选回环帧对,经过这两步得到的待检测对,会通过第三步做筛选,这一步中会将点云投影到2D平面上,利用极坐标网格分布来做进一步检测。通过了这三步,还只能认为是候选对,在最后一步中户在用全局扫描的方法进行一次相似性的计算,计算出来的位姿变换才可以认为是真正的回环。

简单来说就是点云的回环检测的计算开销实际上是很大的,尤其是采用全局扫描的方法,所以ARTSLAM加了三个预筛选,利用距离、相似性以及投影,通过三次剪枝得到的候选对少了很多,从而计算的数量也会少很多,以此加速计算过程。

总的来说,这篇论文更像是一个大合集,将很多论文中使用的比较先进的方法整合到了一起,模块化其实是ROS的节点机制,高效性则是体现在多种剪枝策略,准确性则是放在了一些计算上的优化以及多场景的计算,基于关键帧的计算方法可以借鉴,但是需要对关键帧的数量做一定的限制,关键帧数量过少可能也会影响计算的结果。

相关文章:

  • redis使用zset实现数据库多字段排序的一种方式
  • Elasticsearch ES数据迁移方法及注意事项
  • OPENSQL 2022.9.1
  • Redis集群研究和实践(基于redis 3.2.5)(一)
  • 初等数论总结
  • React(9)-组件引用传递(高级应用)
  • Flink在Window上的开发环境搭建
  • elasticsearch ES新增字段并赋初始值
  • DOM--预加载和懒加载
  • HCIA网络课程第七周作业
  • Nacos2.1.1 github下载zip太慢解决方法及资源分享
  • 集群外Prometheus 集群 k8s
  • 《Python编程:从入门到实战》学习笔记 第4章 操作列表
  • Linux当中如何隐藏和查看进程
  • 【C++ Primer Plus】第6章 分支语句和逻辑运算符
  • CSS居中完全指南——构建CSS居中决策树
  • C学习-枚举(九)
  • git 常用命令
  • Git 使用集
  • go语言学习初探(一)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript学习总结——原型
  • jquery ajax学习笔记
  • leetcode-27. Remove Element
  • October CMS - 快速入门 9 Images And Galleries
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • TypeScript迭代器
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 用jquery写贪吃蛇
  • 在Unity中实现一个简单的消息管理器
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • #Z2294. 打印树的直径
  • $.ajax,axios,fetch三种ajax请求的区别
  • (0)Nginx 功能特性
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (三十五)大数据实战——Superset可视化平台搭建
  • (算法)Travel Information Center
  • (算法)前K大的和
  • ./configure,make,make install的作用(转)
  • .NET BackgroundWorker
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net FrameWork总结
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .pop ----remove 删除
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @ModelAttribute 注解
  • @RequestBody与@ResponseBody的使用
  • @Transaction注解失效的几种场景(附有示例代码)
  • [Android Pro] Notification的使用