二十余年来,同时定位与建图(Simultaneous Localization And Mapping,SLAM)在移动机器人技术社区中一直是一个非常受欢迎的话题。SLAM有很多应用,例如空间探索和自动驾驶等。近几年来,在汽车制造商的参与下,对智能汽车的关注进一步推动了SLAM的研究工作。
全球导航卫星系统(Global Navigation Satellite System,GNSS)可用来解决定位问题,但并不充分,即使使用定位完美的基站,经典GNSS解决方案的精度有所提高,可用性也仍然是一个问题。这是因为卫星信号受到难以预测的大气条件的影响。此外,基础设施可能会阻止信号的直接接收,并产生多径干扰或非视距接收,这会对所提供的位置产生灾难性的影响。同时,这种信号衰减很难检测,通常会导致其不完整性,并难以恢复。这些问题,在高层建筑区域或者密集城市地区更为常见。而在开阔的道路上,GNSS通常会表现较好。
自动驾驶定位的另一种经典方法是利用道路基础设施(如道路标记或道路检测设备)来引导车辆驶入车道。高级驾驶辅助系统(Advanced Driving Assistance System,ADAS)已在商用汽车中集成了车道标记检测算法。尽管这种方法主要限制了车辆的横向位置,但是对于容易识别道路的环境(如高速公路)已经足够。然而,在复杂的环境(主要是城市的交叉路口、弯曲的道路等)中,其还不能提供足够的道路信息来进行车辆定位。此外,汽车沿纵向轴线行驶所需的位置精度更加重要,通常需要冗余的定位信息,以构建安全的系统,并确保汽车在行进中的行为一致。因此,自动驾驶应考虑不同的定位方式。
通常,车辆定位是执行任何其他感知或规划任务的基本功能。预测道路上的其他障碍物,并选择最合适的操纵方法,需要准确了解车辆自身的位置,以及在随后的几秒钟内它将如何演变。为此,SLAM框架提供了答案,同时仍然保持足够的通用性,可使用任何传感器技术,同时估计车辆位置和地图定位。当把自动驾驶作为一个整体考虑时,地图非常重要,因为它提供了决策所需的第一层感知。
通常,将SLAM问题视为真正实现自动驾驶机器人的关键问题之一。因此,SLAM技术也是自动驾驶汽车的核心技术。然而,很多问题使得SLAM算法无法让车辆在非常不同的条件下行驶数百公里。处理自动驾驶汽车的SLAM,主要面临如下两个主要问题:
定位会随时间漂移。
地图不一定能满足所有驾驶条件。
第一个问题在SLAM社区中众所周知,随着汽车行进距离的增加,SLAM算法给出的定位估计会使汽车偏离真实的轨迹;没有先验知识,甚至不能确保几公里内的正确定位。第二个问题,无论条件如何,都需要具有足以完成定位任务的地图。为了在不同的季节、不同的天气或交通条件下都能定位车辆,目前在建图方面引起了很多关注,研究人员提出了很多解决方案来处理这两个问题。例如,通过选择独特的信息来构建地图,以便在后续工作中重用,或者利用新的通信系统来共享和增强由其他道路使用者构建的地图等。
自动驾驶SLAM的评估标准
虽然可以通过专用的探索方案被成功地应用于室内移动机器人中,但是对于自动驾驶的大规模环境而言,还是不够的。这意味着必须依靠先前的知识(全局或局部信息),或者能够不断地改进所构建的地图,直至达到足够准确为止(如闭环)。因此,在自动驾驶汽车中建图至关重要,并且在如何构建或使用紧凑、可靠的地图方面提出了重要的挑战。
目前,已经确定了如下6个指标来衡量SLAM算法。通常,只有达到这些指标,才能实现自动驾驶。
精度:即车辆定位的精度。无论是在世界坐标系中,还是相对于现有地图而言,在理想情况下,精度应始终低于阈值(通常在10cm以内)。当然,在前进方向上,纵向定位可能不太准确,但这不会产生严重后果。
可扩展性:即车辆处理大规模自动驾驶的能力。在固定的时间和内存容量下,SLAM算法应能正常工作,这意味着需要使用地图管理器来加载地图数据。另外,所构建的或者所使用的地图必须很小,以便很容易地将此方法推广到长距离行驶中。
可用性:是指SLAM算法若能准确、及时地提供定位所需的精度,则可将其用于自动驾驶中。换言之,无须通过算法,即可构建环境地图,这意味着该方法能利用现有的地图资源(或者更广泛地整合全局地图信息)。
故障恢复:是指在大型地图中定位车辆的能力。最初,车辆不知道自己在何处,并且大多数时间需要专门的过程来大致了解其在地图中的位置。这也是从故障(被绑架的机器人问题)中进行恢复的一种方法。
可更新性:是指SLAM算法能识别地图和当前观测值之间的变化。SLAM算法应具有更新策略,能集成这些不断变化的地图。长期的自动驾驶,需要地图更新的自动化机制。
动态性:是指SLAM算法如何处理动态环境和变化,包括可能影响定位估计的动态障碍物,它应考虑可能随季节而变化的天气条件(如树木掉叶子等)。须知,长期SLAM的挑战之一,是寻找足够有区别的特征或方法来应对这些变化。
自动驾驶中的SLAM
从上面论述的在自动驾驶中对SLAM算法的要求可见,必须构建更好的地图,因此,在度量和拓扑级别都需要有环境表示和识别。为了更详细地了解如何将SLAM应用于自动驾驶中,可以将目前的研究工作大致分为如下3类。
回环检测,用于识别先前映射的地图位置,这是SLAM的重要组成部分,因为它可以校正地图,并使地图具有一致性。此算法通常用于在其环境中重新定位车辆,从而帮助进行故障恢复。
在先前构建的地图中进行定位。从理论上讲,每一种SLAM方法都可以重用其建立的地图,这里重点关注如何长期重复利用已构建的地图。
着重于利用现有地图的定位方法。对于每一种方法都会进行简要的介绍,并说明如何满足先前提及的指标,以及简要讨论所面临的挑战。
本文节选自《自动驾驶算法与芯片设计》一书,更多精彩内容欢迎阅读本书!
这本书详细介绍自动驾驶算法、软件和芯片设计各个环节
凝聚作者10余年高通、华为、谷歌的理论和实战经验
每个章节都能挖掘出潜在的自动驾驶产品和服务