本篇预测的部分参照了Apollo自动驾驶公开课詹锟的演讲内容。
预测模块是连接感知和决策规划的桥梁,结合物理世界的人类行为习惯进行适当的逻辑推理,将周围障碍物下一时刻和后续多个时刻的运动行为进行估计,给出对应可能的运动轨迹线。
詹锟老师主要从代码层面剖析Apollo2.5的预测系统。
Apollo代码架构预测部分分为3个部分,第一个是Container,作用是合理规划整合上游数据,处理历史信息;第二部分是评估、评价,是预测系统的核心,非常适用于神经网络的学习,建立合理模型,使其找到人类的历史行为轨迹,预测路线。通过第二部分的推理,系统会绘制出物体的行为轨迹,并将结果传递给决策规划层。
首先是Container, ADC trajectory可以通过路权做合理的推理,让障碍物不直接发生预测。第二是构建来自感知障碍物、定位和高精图等序列化特征。第三是本车的状态。除了上面的特征抽取以外,更重要一步是需要把地图信息进行合理的规划。
如何在复杂的物理世界中,把地图数据进行合理的刻画,这是非常重要的步骤。通过把每条Lane,拆分成小的Lane,Lane1、Lane2、Lane3,按照前后级关系,组成具体的序列,每个序列上车都可以沿着其中一个序列进行走,就是这个车的轨迹线。上图可以看到红车有可能走三条轨迹线,就是Lane1、Lane2、Lane3,根据当前的地图信息和当前的Lane的位置状态,刻画出这样具有特征表达的地图信息出来,只有物理识别信息进行合理表达,才能进行网络学习、数据驱动,这是根据地图特征信息抽取非常重要的部分。
在Apollo代码里,表达出每个特征的特性,如上图左边是关于障碍物的特征,包含了车的位置信息、速度信息、加速信息、位置方向还有它的长、宽、高等等,右边是代表它的Lane信息,把细小的Lane,组成Lane feature。这就是Container需要做的事情。
第二部是逻辑推理阶段,这也是预测直接使用神经网络的方式。就Apollo来说,对车辆进行了深度神经网络的学习。具体来讲,结构如图所示,将每个障碍物各自特征输入给LSTM的模型,每个LSTM对特征信息进行了全连接,最后输出走这一条LSTM。第一规划Lane横向行为的分类情况,选择是否走此Lane,选择Lane1还是Lane2。第二是它的动力学,速度是什么样的,就是它纵向的问题。第一是分类问题,同时结合在一个神经网络中,这是Apollo 2.5的神经网络。
前面有两种预测方式,开发者可以根据自己的特性选择自己的评价网络,只是这个结构可以根据Apollo配置。
选择某条Lane或者知道Lane上面的速度以后,可以绘制出这个物体在Lane的行为轨迹,具体怎么绘制,有以下三种方式:一个是Free move,根据障碍物的动力学模型绘制出轨迹。第二是Lane sequence,就是根据车道中心线和Kalman滤波方法绘制的轨迹。第三是Move sequence,结合里学和车道信息融合后降采样的轨迹方式。第四是Regional,根据障碍物动力学和轨迹3Sigma方差构建的区域轨迹。
数据开发者来说是非常重要的一部分,Apollo开放的数据对预测有很好的作用,基于Apollo Data,可以通过自己采集以及周围开发者共享数据进一步开发预测模型 。
Apollo Data的数据使用规范:
使用SL坐标系,车在轨道上做相对轨道的刻划,然后确定要走的车道线每一个车道的状态。通过这样的数据结构,给特定的Lane,检测它到底走没走这条线,通过这样的数据训练模型,通过数据驱动方式,可能就非常贴切的表达出人类的驾驶行为习惯,而不是通过规则算法来做。
通过动图了解一下其效果:
自行车过马路的时候,本来应该是红灯变绿灯了,然后它应该在原地等待车辆驶过,但是其选择了闯红灯,系统能很好的给出预测线,这在预测场景是非常好的应用。
在无人车加速过路口的时候,有一个被隔离带遮挡的障碍物出现了,同时其也选择在无人车之前抢过这个路口,因此此时必须要有预测提前给主车提供这样的信号,让主车能及时做反应,而不是发生更危险的情况,这就是预测在承上启下作用中,有非常好的范围。
其实在中国的这些道路场景中,预测其实还遇到了非常多困难,最大的挑战预测其实是在路口上。路口有很多种行为方式,比如一个车道既可以调头,也可以左转,也可以直行,还有各种社会车辆不按轨迹行走,这其实也是对预测有非常大的困难。如图左侧车辆并没有按照真正的轨迹走,这样的场景对主车是非常大的威胁,理论上从交规上肯定是他们的过错,但是主车一切以安全为先,所以主车必须避让。对这样的场景,预测还是有很多困难。
第二场景是博弈的问题,低速过程中往往发生博弈现象,到底是哪辆车先走,这个情况是非常常见。如图中,两辆车都在等待对方先行,一方先行后,另一方又要开始行驶,所以需要进行上下游的沟通,才能进行更好的处理。
第三个场景是切车,有一些车辆行为比较暴躁,会在非常不合理的情况下急速加塞进来,导致主车处于很不安全的状态,从规则上并没有问题,但是这种场景对于自动驾驶也是要尽量躲让,这时预测需要更好刻画出驾驶行为是不是很危险、激进。
这种典型的挑战场景,其实还有很多,整个预测的问题也分为这两部分,一个是内部挑战,一个是外部挑战,内部挑战主要是数据怎么能把所有的特征表达充分,模型是否在建立的非常合理,是不是还有更好的建模方式,这都是内部的挑战。
同时既然是承上启下的模块,对上游数据的容忍度、依赖性都需要做一些处理,上游如果感知发出了消息,系统应该怎么根据历史信息做很好的规避?做很好的容错,这也是一个挑战。同时像博弈问题,需要给下游决策做一些很好的交互,怎么提醒它先避让还是先加速过去,这也是给预测带来了非常多困难。
后续Apollo预测还是要不断迭代更新,具体来说,会在特征方面做更多的融合处理,利用历史信息,除了考虑当前的障碍物,还要考虑周围所有障碍物,对全局进行估计。另外模型的迭代,同时数据积累,把仿真和真实打通,作为系统整合,需要上下游的联系,通过多个维度,对预测模块进行整合,这是后续Apollo需要做的事情。