参考https://zhuanlan.zhihu.com/p/673614739及https://zhuanlan.zhihu.com/p/673615788
具体来说,当SLAM系统在前一帧的动态物体上提取了特征点时,如果将这个特征点投影到当前帧,由于目标已经移动,这个点找到的匹配点必然是错误的,由此解算出的位姿必然也存在较大的误差。尤其是动态物体占据画面的比例很大时,SLAM系统极容易崩溃。
这一部分也是目前动态SLAM的主流方案,基本套路就是在ORB-SLAM2/3或者VINS的基础上加入YOLO。首先SLAM该怎么提特征点还怎么提,然后对于候选框内的特征点直接丢弃,这样位姿解算所使用的特征点也就没有了动态物体的影响。优点是效果还不错,尤其经过TensorRT加速的YOLO可以达到实时,对GPU显存的要求也没那么高。缺点是一方面在YOLO出现漏检时不稳定,另一方面只能识别预先定义好的物体类别,而且也没办法识别不在预定义类别范围内但真的在运动的物体,比如人手上拿着的书、正在搬运的椅子等等。
首先最经典的肯定是DS-SLAM和DynaSLAM了,这两篇文章也都来源于2018 IROS,虽然时间比较早,但是思想具有很高的借鉴意义。
论文链接:https://arxiv.org/abs/1809.08379
代码链接:https://github.com/ivipsourceco
DS-SLAM是基于ORB-SLAM2开发的,有5个并行运行的独立线程:跟踪、语义分割、局部建图、回环检测和稠密语义八叉树地图。针对动态目标(主要是人),首先使用SegNet进行语义分割,然后进行运动一致性检查,剔除动态区域上的特征点。为啥要进行运动一致性检查呢?就是为了检测上面提到的"人手上拿着的书、正在搬运的椅子"这类无法提前定义的物体。
在DS-SLAM中,运动一致性检查的具体流程是:
?缺点就是太慢了,总单帧耗时达到了59.4ms。
?
论文链接:https://arxiv.org/abs/1806.05620
代码链接:https://github.com/BertaBescos/DynaSLAM
DynaSLAM的主要思想和DS-SLAM很像。具体的流程是:
DynaSLAM中几何一致性验证的具体流程是:
效果还不错,但是缺点也是耗时太大了。?
?
论文链接:Detect-SLAM: Making Object Detection and SLAM Mutually Beneficial
代码链接:https://github.com/liadbiz/detect-slam
主要思想:
目标检测的网络并不能实时运行,所以只在关键帧中进行目标检测,然后通过特征点的传播将其结果传播到普通帧中
?
论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9318990
代码链接:https://github.com/yubaoliu/RDS-SLAM
前面说到,语义分割的主要问题在于太过耗时。而RDS-SLAM的主要贡献就是在实时性上的提升。RDS-SLAM是在ORB-SLAM3的基础上,开辟了一个独立的语义线程。这样就可以不等待语义信息进入跟踪线程,将语义分割与跟踪分离。利用移动概率将语义信息从语义线程传递到跟踪线程。利用移动概率来检测和去除跟踪中的异常值。
那么具体来说,为啥开辟一个新的语义线程就可以提高实时性呢?作者定义了语义延时来说明该部分如何保证语义分割的实时性。首先按照时间顺序分割每一帧(假设语义分割一次耗时10次采样时间,每隔两帧取一个关键帧),同时连续分割两帧。注意,作者使用了双向模型(bi-directional model),关键帧的分割不是按顺序进行的,而是分割队列的前面和后面。这里还有一个问题,就是为什么还要对前面的关键帧做分割呢?这是因为如果前几帧没有语义信息,由于跟踪线程很快,可能已经因为动态物体累计了很大的误差。因此,需要使用语义信息来把漂移拉回来。
对于速度的提升也很明显,可以在2080Ti上达到实时。
?
在动态环境中工作时,由于动态对象的干扰,传统的SLAM框架的性能很差。 通过在对象检测中利用深度学习的优势,提出了一种语义动态的动态地图定位和映射框架Dynamic-SLAM,以解决动态环境中的SLAM问题。
本文的主要三大贡献:
?
论文链接:https://arxiv.org/abs/2208.11500
代码链接:https://github.com/url-kaist/dynavins
前面的方案都是基于ORB-SLAM开发的,我们再来看几个基于VINS的。DynaVINS是2022 RAL的文章,主要贡献在于解决了临时静态对象引起的假阳性回环问题。
DynaVINS的输入为单目/双目图像和IMU,并进行特征跟踪和IMU预积分。一方面,DynaVINS设计了一个鲁棒BA来从动态对象中丢弃跟踪的特征,保留静态特征。之后使用被追踪特征的数量对关键帧进行分组,并且聚类在当前关键帧组中检测到的回环假设。最后在选择性优化中使用或拒绝具有权重的每个假设,最终获得面向动态和暂时静态对象鲁棒的轨迹。
论文链接:https://arxiv.org/abs/2304.10987
代码链接:https://github.com/HITSZ-NRSL/Dynamic-VINS
哈工大深圳的最新工作,发表在2022 RAL上。Dynamic-VINS的输入是RGBD图像和IMU,性能和YOLO-DynaSLAM类似,但是对计算资源要求更低。Dynamic-VINS结合目标检测和深度信息进行动态特征识别,达到了与语义分割相当的性能,并且将IMU应用于运动预测,进行特征跟踪和运动一致性检查。
Dynamic-VINS使用YOLOv3进行运动物体检测,然后使用深度阈值和IMU进行运动一致性检查。注意这里深度阈值的作用与普通的运动一致性检查不太一样,主要是考虑到动态对象的bounding box内还包含很多静态背景点,如果直接滤除则有点浪费,因此希望将这部分静态背景点保留。具体流程是:
IMU运动一致性检查的方法也很直接,就是将当前帧的特征点投影到IMU坐标系,再投影到世界坐标系,再根据之前关键帧的IMU投影到图像坐标系。判断两个投影点之间的距离值,如果超过一定阈值则认为是动态点,需要滤除。
?