"); //-->
在单次激光SLAM或者定位的过程中,动态障碍物(如:移动的车辆、行人等)会对SLAM或者定位造成两个方面的负面影响:点云配准 和 地图构建
针对点云配准,动态障碍物能造成最极端的情况是“当一帧激光数据中的大部分(甚至100%)点云都是从动态障碍物上返回的数据,那么该帧点云则没有能力在reference scan(或者reference map)中找到correspondent points,点云的配准就会失效,但在实际情况下,点云配准时的query scan数据中受到动态障碍物影响的点云个数是“有限的”,由此query scan中大多数的点云还是可以找到它们的correspondences,少数的异常量不会产生太大的干扰。另一方面,若是采用特征法进行点云配准,动态障碍物在预处理阶段也会被剔除,由此基于特征的配准方法受到动态障碍物的影响会更小。针对地图构建,动态障碍物对点云地图的构建的影响在于会在最终生成的地图中产生“鬼影”,而若简单使用在第一种情况中提到的特征点云构建地图的话,又会错误地滤除掉很多实际需要的物体信息,导致地图特征稀疏,难以进一步处理,具体的影响可见以下图示:
图:点云地图中由于动态障碍物产生的“鬼影”图:点云地图中由于动态障碍物产生的“鬼影”最后,一言以蔽之:(1)在点云配准层面动态障碍物过多会影响点云配准的精度和鲁棒性(导致配准出现失效),(2)在地图构建层面时动态障碍物会在地图中形成“鬼影”,影响后期地图的进一步处理(路径规划、特征提取、定位,etc)。这里也推荐「3D视觉工坊」新课程《面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)》。
2、典型场景下动态障碍物滤除的需求差异2.1、平面移动机器人中对动态障碍物滤除的需求首先,以移动机器人(AGV类)的使用场景为例,其基础使用场景是二维室内环境,所以使用的SLAM算法和机器人位姿估计器模型都是基于2D平面操作。那基于2D平面场景,SLAM中最常见、最经典的算法是gmapping、cartographer或者karto,定位中常用的算法是EKF、AMCL和ICP的组合,导航中的路径规划和运动控制就都是基于概率栅格地图(pgm)的平面规划了。由此可见,基于移动机器人(AGV)的SLAM、定位和导航都离不开概率栅格地图(pgm),而在概率栅格地图上最传统和最有效的去除动态障碍物的方法就是利用“ray casting算法”的栅格地图概率的“更新”,而“更新”的最终目的是为了在栅格地图上不留下动态障碍物的hit点(此处的更新之所以打上引号,是因为更新概率栅格的模型有很多,用引号表示泛指)。
图:失败的“动态障碍物hit点去除”(上)和成功的“失败的动态障碍物hit点去除” (下)
2.2、自动驾驶中对动态障碍物滤除的基本标准另一个会使用到SLAM和Localization的工程场景就是低速无人驾驶(或自动驾驶)领域了,不管是使用高精地图的“传统”自动驾驶方案,还是“重感知,轻地图”的自动驾驶策略,都还是或多或少地需要使用到“地图”(此处的引号代表一系列的泛指,pgm地图、点云地图、语义地图等),高精地图的各个图层中(语义图层也好,矢量图层也罢)都要求提取出精细的车道线、箭头、路标等特征并且肯定不会再包含动态障碍物的信息,定位所使用的点云图层也是要求尽可能地保证“干净”无动态障碍物点云干扰。在自动驾驶领域中的动态障碍物滤除思量上,一方面区别于AGV只针对2D的场景的操作,其需要滤除的障碍物是3D物体,另一方面除了地图上不能留有动态障碍物信息外,定位过程中的实时点云也需要尽可能地要求不受其动态障碍物的影响且其定位过程中的动态障碍物的滤除最好是在线的、实时的、高效地,以保证自动驾驶的精度和鲁棒性。
至此,不难得出一个结论:(1)AGV导航中动态障碍物去除可以使用基于栅格地图概率更新方式,本质上是ray-casting,同时滤除过程可以容忍一定程度的“延迟”(概率更新需要多次、反复进进行以达到滤除的效果),(2)自动驾驶过程中点云数据去除动态障碍物是高精度地图构建的基础任务,同时保证在线地、实时地动态障碍物滤除能在一定程度上提升定位过程中精度和保证定位的鲁棒性。
3、动态障碍物滤除算法综述3.1、为什么需要滤除“动态障碍物”信息?基于第一节中的阐述,相信大家都能体会到在SLAM和定位的工程应用中动态障碍物的过滤是一件对SLAM & Localization位姿输出精度的提升效果有限,但是能极大地提升“用户体验”的一个模块,更重要的是动态障碍物滤除模块是一个完备导航系统的重要组成成分。
3.2、如何去选择动态障碍物滤除的具体方法?基于第二节中的描述,也可以发现在不同的工程应用场景下,动态障碍物滤除的具体要求也不相同,其一,工程师需要根据具体使用的场景和后续导航模块需要的“地图”来确认动态障碍物的滤除算法,比如2D场景下可以基于2D的概率栅格地图,利用ray-casting的算法实现滤除,3D场景下需要基于3D点云地图,利用特征提取或者聚类的方式去除点云地图中的动态障碍物点云;其二,根据使用场景的不同,动态障碍物滤除的时机和时效也存在差异,例如2D场景下基于2D的概率栅格地图的“更新”方式在滤除动态障碍物信息的时候可以容忍一定程度的“延迟”,且2D定位时query scan中也不一定需要进行动态障碍物点云的过滤处理,但在3D场景下,更具体些,在自动驾驶的使用场景下,定位过程就已经需要尽可能地保证能在线实时地滤除动态障碍物信息,在3D地图的构建过程中会有更多精细的处理以保证“地图”不被动态障碍物的信息污染。
3.2.1、 实时 or 离线的动态障碍物滤除方案至此,考虑“动态障碍物滤除”算法应用的层面,动态障碍物去除算法模块的使用分为两个时机:(1)在线实时处理和(2)离线后处理。针对第一个“在线实时处理”,顾名思义就是在接收到每一帧(或者每一个batch)点云数据时,通过相邻“单位点云数据”帧间的对比以分离动态障碍物点云,然后再直接将“单位点云数据”中的动态障碍物点云滤除,针对第二个时机:离线处理,此处的“离线”指的是区分“地图构建”与“位姿估计”这两个阶段,因为在离线处理的前提是需要点云数据及其对应的全局位姿信息,故而“离线地图构建”的阶段需要在“位姿估计”阶段后进行,通常是在SLAM过程记录关键帧的位姿及其对应的点云数据,输出给到“离线地图构建”的阶段并在此阶段内对每一帧点云进行动态障碍物点云的去除。
由此,虽然在线实时的滤除方案可以保证时效性,但往往在线滤除的方法都存在动态障碍物信息滤除不够干净的问题,而离线后处理的方法虽然牺牲了实时性,但却可以获取SLAM周期内的完整的轨迹信息作为参考信息并用以来识别动态障碍物点云,以追求“极致的”动态点云滤除的准确性和充分性。
3.2.2、动态障碍物滤除方案原理分类动态障碍物滤除的算法既可以根据上文中基于时机来完成分类,也可以基于原理来进行细分,大体上主要分为三类:
(1)基于点云分割的滤除算法(segmentation-based method):基于分割的方法中当前比较主流的是基于深度学习的语义分割方法,通过前期的点云特征训练,在使用过程中直接标注出点云中的动态障碍物信息部分,在定位和建图算法中根据点云中的标注直接过滤即可,虽然滤除的内容仅限于前期训练得到的模型且容易有假阳性和假阴性的问题,但其方法胜在简单高效。另一类传统的点云分割的方法则基于聚类的模式,如快速点特征直方图 ( fast point feature histograms, FPFH )、基于确定视角下的特征分布直方图VFH(viewpoint feature histogram),用以在静态聚类中区分出动态聚类,此类方法能够改善计算成本提高实时性从而得到广泛研究,再者就是基于区域(逆)生长以分割混杂着动态和静态点云的目标,识别出动态点云目标以便于后期滤除,等。
(2)基于可见性的滤除算法(visibility-based method):该类算法中是基于一个物理前提:“光沿直线传播,如果在同一条光路上存在远、近两个点云,则近侧的点云肯定就是动态点云”,基于可见性的方法在当前的动态障碍物识别和滤除的研究中十分火热,且研究的重点除了提升算法效率外,就是研究怎么解决该方案中的局限性:“误杀问题”和“静态点不可见”的问题。其一,误杀问题包括但不限于点云自干扰、平行点差异导致的假阳性、遮挡点误判、接触点假阳性等一系列由于雷达点云的物理特性引发的误杀问题。其二,静态点不可见的问题相较于误杀问题会少见一些,但更加难以解决,例如当存在动态障碍物一直遮挡了部分或者全部的激光雷达的视线,则雷达没有机会看到这些动态障碍物后方的静态物体信息以至于动态障碍物点云永远不会被识别和滤除掉。
图:基于可见性的滤除算法的动态点云识别
图:基于栅格的滤除算法的动态点云识别
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。