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

动态环境下的slam问题如何解决?

摘要: 太巧了,正好是我近期在研究的方向,作为一名SLAM工程师,必须来答一波。先回答题主的问题,后边再谈我对动态环境SLAM问题的理解...

太巧了,正好是我近期在研究的方向,作为一名SLAM工程师,必须来答一波。先回答题主的问题,后边再谈我对动态环境SLAM问题的理解。【长文预警】

SLAM配准时,需要将动态物体剔除掉,否则影响配准精度。需要做路径规划和决策的话,就需要对动态目标进行跟踪,起码,你的路径要尽可能避开动态目标的前进路线。同2,跟踪是为了规划和决策。

好,下面谈我对动态环境SLAM问题的理解 。

理解「动态环境SLAM问题」,首先要弄明白:动态环境给SLAM带来了什么不利问题,以至于我们需要去“解决”它?

我将带来的不利问题分为以下两个层面。

一. 首先是前端配准层面。无论哪种点云配准方式(点到点/点到特征/点到栅格/NDT),都是基于静态假设的,理论上动态点一定会影响配准的精度,实际中如果动态点比例过高的话,会造成轨迹精度下降,甚至不排除跑飞的可能。在这个层面,只能通过实时的方式在配准之前或配准过程中,识别并干掉动态点。至于怎么识别?传统方式比如在配准迭代过程中剔除距离过远的点,当前更流行的方式则是基于deep-learning直接从点云中检测出动态物体。推荐2篇 2021 年的最新论文,分别作为传统方法和deep-learning方法的“引子”,供有需要的读者自行研究。

第1篇:IROS-2021 的“RF-LIO: Removal-First Tightly-coupled Lidar Inertial dometry in High Dynamic Environments ”,这项工作基于lio-sam框架开发,前端LIO负责粗配准(提供初值),后端中进行scan-to-submap精配准,在精配准迭代过程中,不断基于初值和多分辨率深度图检测submap中的动态点并移除,最终实现基于“静态submap”的精配准。

第2篇:大名鼎鼎的「苏黎世联邦理工ASL实验室」发表在 ICRA-2021 的一篇文章“Dynamic Object Aware LiDAR SLAM based on Automatic Generation of Training Data ”。作者基于deep-learning(3D-MiniNet网络)进行实时3D动态物体检测,滤除动态物体后的点云被喂给LOAM,进行常规的激光SLAM。


二. 其次是建图层面。假设我们认为动态物体对配准的干扰有限,不太影响轨迹精度,但我们还是无法忍受最终生成的地图中充斥着大量动态物体的“鬼影”(如下图所示),这会对后期基于地图的定位、或者基于地图的可行域规划(路径规划)产生不利的影响。

动态环境下的“鬼影”

在机器人实际落地中,动态物体对配准造成严重干扰的情况不太多见(个人观点),但造成“鬼影”进而影响后续作业的情况则非常多见!

因此,如何消除动态环境对SLAM建图造成的动态干扰,是我近期同样比较关注的方向。鉴于如何消除对前端配准的影响我们已经列举过对策了,下面的篇幅将重点讨论一下,滤除SLAM地图中的动态物体(鬼影),有哪些方法?

我们正式开始~

其实还有第三个层面的影响,那就是动态环境下的定位问题,并且这是一个无论在机器人还是自动驾驶,都非常贴近工程实际,非常有价值的问题。不过题主问的是SLAM,这里就不展开了。
一. 思考框架

首先分享一下我的思考框架。

我将环境中的所有物体依据“动态程度”的不同,分为四类:

高动态物体:实时移动的物体,如行人、车辆、跑动的宠物...低动态物体:短暂停留的物体,如站在路边短暂交谈的人...半静态物体:在一个SLAM周期中不动,但是并非永远不动的物体,如停车场的车辆、堆放的物料、临时工棚、临时围墙、商场中临时搭建的舞台...静态物体:永远不动的物体,如建筑物、马路、路沿、交通信号灯杆...

除了静态物体外的其它三类物体,都有不同程度上的动态属性,应对策略也各不相同:

针对高动态物体:在线实时过滤针对低动态物体:一次SLAM过程结束后,后处理方式过滤针对半静态物体:全生命周期建图(life-long SLAM, or long-term SLAM)
(以上三种方式向上兼容)

这三种应对方式,无论哪种,都有比较多的论文发表过!现选择性摘录如下,希望对读者有所启发。

二. 在线实时过滤

动态过滤一定需要参考帧来比对出动态点,为了实现实时性,参考帧不会太多,比如下边的2篇论文,分别是前后各取一帧,以及取近期的若干帧构成submap。

Mapless Online Detection of Dynamic Objects in 3D Lidar, 16th Conference on Computer and Robot Vision (CRV), 2019. 这篇论文思路非常简洁,在query scan前后各取一帧作为参考帧,前边的参考帧用于比对点到点距离,距离过大的点认定为潜在动态点;潜在动态点再放到后边参考帧中做验证,如果被后边参考帧的激光光束穿过,则确认为动态点。被确认的动态点在query scan中作为种子点进行聚类生长,得到动态聚类。题目中的 mapless,是指不用构建局部地图或子图,只需两个参考帧即可。论文效果图如下。RF-LIO: Removal-First Tightly-coupled Lidar Inertial dometry in High Dynamic Environments, IROS-2021, 西安交通大学. 这篇文章正式上文中介绍过的,其思路是在query scan附近实时构建一个submap,通过range image的方式对比query scan和submap的点云分布,来提取出submap中的动态点。算法 overview 如下图所示。涉及动态过滤部分我已用红框标出。三. 后处理方式动态过滤

后处理方式由于不需要(太)顾虑实时性,因此可以将整个SLAM周期内的所有帧作为参考信息,来识别动态点。相比于实时方式,后处理方式更追求动态点云滤除的准确性充分性,应杀尽杀,且不漏杀,不错杀。

以后处理方式为前提,常见的动态物体过滤方法可以分为典型的三类segmentation-based, ray-casting based, 和 visibility-based,对此,在我的文章 动态环境SLAM专题(一) | ICRA2021:ERASOR — 解决动态环境下SLAM建图“鬼影”问题 中有详细的论述。下边取3篇代表作,作为不同方法的例子。

The Peopleremover — Removing Dynamic Objects From 3-D Point Cloud Data by Traversing a Voxel Occupancy Grid, IEEE Robotics and Automation Letters(RA-L), 2018. 这篇文章提出了一种基于栅格实现动态过滤的方法(ray casting-based),也即基于栅格被击中和被穿过的情况来判定栅格是否为动态。作者提出了一系列trick来避免此类方法的通病,如耗时过大,误杀/漏杀等,对基于栅格的方法具有普遍借鉴意义。我对这篇论文有详细的讲解,详见动态环境SLAM专题(二) | RAL-2018:The peopleremover – 基于栅格的动态物体过滤算法。Remove, then Revert: Static Point cloud Map Construction using Multiresolution Range Images, IROS-2020. 这篇文章是视点可见法visibility-based)的应用「上文中提到的 RF-LIO 和本篇很相似」,其基本思路是,把一个query scan投影为深度图,然后在同一视点把query scan附近的submap 也投影为一个深度图,比对两个深度图上同一位置的像素深度,如果后者深度更浅,则该像素位置对应submap上的点为动态点(前方的点把后方的点遮挡了,则前方的点为动态点)。这篇文章以此为基本原理,做了诸多改进,并用更粗糙分辨率的深度图对比来恢复被误杀的静态点。本文为基于视点可见性(或基于深度图)的方法提供了参考。本文的详细讲解 动态环境SLAM专题(三) | IROS2020:Remove, then Revert - 基于多分辨率深度图的动态物体移除方法。ERASOR: Egocentric Ratio of Pseudo Occupancy-based Dynamic Object Removal for Static 3D Point Cloud Map Building, ICRA-2021. 这篇论文是我最早发知乎文章进行解读的,虽不属于三类方法,但仍有借鉴性。其基本思路是,把query scan和query scan附近的submap按照相同的位置划分为一个个扇区状的bin(格子),然后对比query scan的格子和submap的格子,根据格子内点云分布的差异,剔除掉submap格子中的动态点,详见 动态环境SLAM专题(一) | ICRA2021:ERASOR — 解决动态环境下SLAM建图“鬼影”问题。四. life-long建图

life-long mapping的核心问题,其实远不止动态/半静态物体过滤。动态/半静态物体过滤只是life-long过程中不同session之间地图融合的一部分,而地图融合只是life-long mapping的一部分。尽管如此,我们还是可以大致看一下,life-long mapping中,动态/半静态物体过滤是怎么做的。这里分享2篇文章,后续有时间更新更多的,比如最近高仙机器人发表的“A General Framework for Lifelong Localization and Mapping in Changing Environment”。

LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping, IROS-2021. 这篇论文和前边的Remove, then Revert是同一作者,因此地图融合与非静态物体过滤部分也基本以Remove, then Revert为基础,只不过施加的对象变成了两个session的地图之间,不再赘述。Long-term 3D map maintenance in dynamic environments, ICRA-2014. 这是一篇「苏黎世联邦理工ASL实验室」发表在2014年的工作。文中提出,地图融合部分的核心在于如何处理不同session地图之间不一样的部分,也即动态/半静态物体。处理方法基于视点可见法visibility-based),只不过不是以深度图的形式,而是直接将map点云转换到query scan坐标系下,如果map中的点被query scan中的点的光路穿过,则对应map点为动态/半静态点。考虑到仅凭一次穿过就要confirm一个动态点难免太过武断,论文提出参考更多的信息来判定一个map点是否为动态,比如点的法向量、两点间距离、上一个周期的类别等,这些信息通过贝叶斯概率融合在一起,决定一个点的类别。下边是论文在停车场场景的life-long mapping实验。五. 结语

这里以Q&A的形式,分享一下自己的思考,作为结语。

Q1: 这么多已发表论文中,有完美的方法吗?

没有!在我测试过的少数开源方案中,只要用了自己的数据集,就很少能达到论文展示的效果。一种方法即使在理论上是完备的,实际中受限于雷达线束密集程度,轨迹误差等因素,也不可能达到理想的效果。何况,也没有理论上完备的....

Q2: 既然分成了“实时处理/后处理/life-long处理”三个层面,它们的技术思想可以相通吗?

完全可以相通。分成三个层面只是一种思考方式,实际上,三个层面不分家,本质上都是通过帧间的比对,提取出动态点。比如,segmentation-based, ray-casting based 和 visibility-based 这三种思路,如果参考帧少一点就都可以做成实时或近实时的;再比如,life-long mapping里边,地图更新部分,完全可以用这三种思路去做。

Q3: 我该如何解决我遇到的动态环境SLAM问题?

这个就难了,我作为一名初级工程师,对这个问题的实际经验还很少。在这里只能分享一下自己的愚见,那就是,多读论文多思考,多测试开源代码,多沟通交流,根据自己的场景,取百家之长,打磨出自己的方案。

[end]

写在最后的话:写文章不易,想写好更需要花费精力,如果觉得不错,欢迎点赞关注!

发表评论