1.Removert
简单来说2020年的REMOVERT是针对动态环境下的建图进行优化的一篇很好的作品。
针对的主要问题:若是采用点云特征进行匹配的话,动态障碍物在预处理阶段也会被剔除。那么,另一个方面,动态障碍物对点云地图的构建的影响在于会在最终生成的地图中产生“鬼影”,而若简单使用在第一种情况中提到的特征点云构建地图的话,会错误地滤除掉很多实际需要的物体信息,具体的影响可见以下图示:
REMOVERT目的是在承受了动态障碍物的干扰下,SLAM过程结束后生成的点云地图是一个近乎全由静态点云构成的地图。
REMOVERT算法的大致流程是会首先保守地保留确定的静态点(也就是会有很多FN的情况),再通过一次次的迭代将query-to-map的搜索窗口扩大来恢复被误杀掉的静态点,其中query-to-map的搜索窗口隐式补偿了激光雷达运动或配准错误。一言以蔽之,正如算法的名称一样:在第一阶段先疯狂地Remove掉所有可能的动态点,就算杀错了也不管较粗,到了第二阶段,通过一次次地放大query-to-map的搜索窗口来恢复在第一阶段中被过度杀掉的静态点。
不过最最重要的部分是,REMOVERT 算法是一个离线处理的方法,这导致该算法的实际工程价值并不是那么的高,不过不能否认其开拓性思想带来的收益。
2.DynamicFilter
而在2022年的一篇顶刊杂志中,DynamicFilter这篇文章对上述方法进行了一定的改进优化,并成功实现了online版本。唯一不足的是,现在还并未开源团队的源码。
其对前端部分进行了一定的优化,作者依旧采用 reverting 阶段来恢复错误检测的静态点,即:反复执行基于可见性的移除,但将动态子图( M D M_D MD)作为输入,从而不断从动态子图( M D M_D MD)中恢复静态点。然而,这种还原方法仍然可能存在可见性问题。
因此文章中根据去除的动态点与全局坐标下的静态子图之间的设定距离来恢复静态点。对于动态地图中的每个动态点,首先在静态地图中搜索它的最近点。然后,使用主成分分析( PCA ) 来计算最近点集的特征向量。类似地,对于这组最近点和动态点本身的并集也可以计算另一个特征向量。最后,通过比较这两个特征向量之间的法向距离,可以得到加入动态点后的分布变化。如果变化足够小,我们将动态点( M D M_D MD)还原为静态 M S M_S MS。定性结果如图3所示。需要注意的是,还原过程不依赖于任何模型/平面假设,因此与模型无关。
到此,就是文章的前端部分,相当于把removert改成了online版本,和一些小改进,remove+removert。
3.主要改进
其实DynamicFilter在前端部分基本是一样的思路,只不过为了做成实时的采用了子图,简要概括如下:首先,将每一帧点云 B P i _BP_i BPi和未处理的submap W M _WM WM投影到局部坐标系中的像平面上。然后,分别计算它们的range images B I P _BI^P BIP 和 B I M _BI^M BIM 。通过比较这两幅range images的差异,可以检测出动态点 M ^ D i \hat{M}_{D_i} M^Di子图。对子地图中的所有帧进行处理后,处理后点大致分为两类:只包含静态点的静态子图( M S M_S MS)和只包含动态点的动态子地图( M D M_D MD)。
以及引入了PCA的方法对之前的处理结果进行二次优化。