轨迹预测一直是自动驾驶中的重点,它可以让自动驾驶汽车对未来的工作提前谋划。所谓轨迹预测,简单理解就是自动驾驶系统对道路上那些会动的对象(其他车辆、行人、自行车、摩托车等)未来一段时间内可能走什么路线、到什么位置、以什么样的速度/方向移动的一种“预测”。
图片源自:网络
比起这些对象当前在什么位置、朝哪个方向走,轨迹预测多了对未来的判断,其不仅可以确定“现在在哪里”,还要猜测“接下来可能去哪儿”、以及“可能怎么行动”。这是自动驾驶系统在感知(看到周围)之后与规划和控制(决定自己车下一步怎么走)之前的一个关键动作。
轨迹预测并不是简单识别或检测别车/行人,而是要推断未来。这一点和人类司机做判断很像,当你开车时,不只是看前面有没有车,也会判断那辆车是不是可能突然变道/加速/减速/转弯。自动驾驶所做的,是把这种判断转成算法,让机器也能提前预估可能发生的情况。
为什么自动驾驶系统需要“轨迹预测”
真实的道路情况瞬息万变,别的车可能突然变道、有人可能横穿马路、有行人或骑车人可能忽然加速或减速。想要安全驾驶,只是知道“他们现在在哪里、速度是多少”是完全不够的。如果系统只是被动反应,就容易出问题,尤其当速度较高、道路复杂的时候,没有预测,车辆就只是横冲直撞,非常危险。
轨迹预测的作用,就是让自动驾驶系统对周围交通参与者未来可能的动作有一个大致预判。这样自动驾驶系统就能在做路径规划和操控之前,考虑到这些不确定性,预留安全距离、调整速度、选择合适方案。
图片源自:网络
举个例子,当另一辆车突然变道到自动驾驶汽车的车道上,自动驾驶系统通过轨迹预测,就能判断是否要提前减速、变道避让,以避免事故发生。又或者行人可能从路边走出来,自动驾驶系统预测到可能会穿过马路,这时自动驾驶系统就会提前做好刹车或绕行准备。
也就是说,轨迹预测提升了自动驾驶的“前瞻性”和“主动安全”能力。感知模块只负责看见现在/刚刚发生的事;而预测模块负责想象未来可能发生的事,然后把这个想象交给决策/规划模块,让车辆提前做出安全、合理的动作。
如何实现轨迹预测?
轨迹预测要做的就是把“现在看见的东西”变成“对未来几秒钟的合理猜测”。要做到这件事,模型离不开三类关键信息的输入,也会输出不同形式的预测结果,实现的方法也各有优劣。
1)输入的是什么?
静态环境/地图信息:静态环境/地图信息包括如车道线、交叉口、车道形状、道路结构、禁行区、转弯区、红绿灯、交通标志等信息。也包括高精地图(HDmap)或简化版本地图中对道路空间结构的描述。
动态对象当前及过去的状态:动态对象当前及过去的状态就是周围车辆、行人等的当前位置、速度、航向、过去一段时间的轨迹/运动历史。因为对象过去怎么走、速度方向是多少,对预测未来很关键。
交通参与者之间的交互关系:不同车辆、行人与它们之间的相互影响,一辆车的行为可能受到旁边车、前车、后车,乃至道路标志、信号灯、行人、骑车人的影响。为了更好地实现预测,这些交互也会作为输入特征来考虑。
2)输出的是什么?
轨迹预测的输出,一般是未来一段时间内(通常几秒到5s~6s不等,具体视系统设计而定)的轨迹,其中包括未来每个时刻该对象可能的位置、速度、方向。也可能包括多个可能性。
因为未来不确定,一个对象可能有几种行为(直走、变道、减速、急刹、转弯……),所以预测结果不会是单一轨迹,而是多种可能轨迹+各种可能性的概率/置信度(即多模态预测)。
有时候自动驾驶系统只需要知道未来终点大致在哪、什么时候到达,但有时会需要完整的时间序列轨迹。带概率的多模态输出能让后续的规划模块在面对多种可能时做出更稳妥的决策。
图片源自:网络
3)常见的技术路线/方法
在早期想实现轨迹预测,可以用比较简单的物理模型+运动学/动力学模型+假设方法,该方法是通过假设车辆目前速度、加速度、车辆动力限制等信息,基于物理运动模型去预测短期轨迹。但这种方法对复杂场景(变道、刹车、跟车、群体交互、行人穿行等)适应性较差。
近年来,更常用的是数据驱动(data-driven)或机器学习/深度学习方法。自动驾驶系统通过大量真实交通数据训练模型,把历史轨迹+环境信息当输入,让模型学会在类似情形下的行为模式,然后预测未来轨迹。
有些模型会把所有附近车辆/行人当作“节点”,构建图(graph)表示它们之间可能的相互作用关系(谁可能影响谁);然后通过图神经网络(graphneuralnetwork)+编码器—解码器(encoder-decoder)/循环神经网络(RNN/LSTM)/Transformer等结构,对未来轨迹进行预测。还有一些模型会将道路结构、车道线、交通规则、环境语义等静态信息融合进来,让预测更符合规则。
自动驾驶系统中的轨迹预测,是一个感知+学习+推断+环境约束结合的复杂流程,而不仅是按当前速度+前进方向直线推算。
轨迹预测模块在自动驾驶架构中的位置与作用
自动驾驶系统可以分成感知(perception)预测(prediction)规划/决策(planning&decision)控制(control/actuation)几个模块。轨迹预测正位于感知与规划之间,是连接两者的重要桥梁。
感知模块负责识别周围静态环境(道路、车道线、建筑、行人、交通标志)和动态对象(其他车辆、行人、自行车等),告诉系统“现在都有哪些东西,它们在哪里、速度怎样、朝哪走”。
预测模块接手这些信息,对每个动态对象未来可能的走向做估计,预测轨迹、行为意图(如变道、减速、转弯、掉头、停车、横穿道路等),并输出未来几秒钟内各对象可能的位置/速度/轨迹分布。
规划/决策模块拿到这些预测结果后,考虑自己的车辆应该怎么走:是否要减速、变道、刹车、绕行、停车、让行……并生成给车辆的决策/行驶方案。
控制模块根据规划结果,通过转向、加减速、制动等动作执行具体的控制。
没有预测模块,即便感知非常精确,车辆也只能被动反应,只能根据现在看到的情况反应。这种方式在简单场景或低速情况下可能还行,但在高速、复杂、多目标、多变场景(城市道路、交叉口、高速公路、行人密集区、混合交通)下,很容易出现判断滞后、反应过慢、避让不及时、刹车过硬或过急等问题,严重影响安全和舒适。
因此,轨迹预测是自动驾驶系统的“安全预判机制”,它让车辆提前知道可能发生什么,从而预留空间/时间/方案,为后续规划和控制提供更可靠的输入。
轨迹预测的局限
轨迹预测对于自动驾驶来说非常重要,但想要做到既准确、可靠,又能实时运行的预测,会面对非常多的问题。
图片源自:网络
1)多智能体/多对象交互复杂
道路上有汽车、自行车、行人、摩托车等很多的交通参与者,他们之间会相互影响。一个人的动作可能影响另一辆车的行为,行人与车可能发生互动,自行车可能突然并道……这种多智能体(multi-agent)交互关系复杂且难建模。一个简单的直线预测显然不够。数据驱动模型虽然试图通过图模型/神经网络捕捉这些关系,但要保证对所有复杂场景都适用,依旧非常困难。
2)行为多样性/不确定性(多模态问题)
同一个交通参与者,在不同时间、情境可能做完全不同的动作。如一辆车可能继续保持当前车道直行,也可能变道,也可能减速或加速。这意味着未来有多个可能轨迹(multiplepossiblefutures),而不是唯一确定的一条。预测系统如何同时给出这些可能性,并附上合理概率或置信度,是一个难题。如果系统只输出单一轨迹,而实际对象走的是另一条,就可能导致碰撞或危险。
3)静态环境与规则约束整合困难
道路结构、车道线、交通规则(谁有优先权、红绿灯、行人斑马线、禁行区、道路狭窄、弯道、坡道…)对车辆/行人的轨迹有很大的影响。一个预测模型如果忽略这些约束,很可能产生荒谬、不符合规则的预测(比如预测行人穿过护栏/逆行、预测车辆穿越建筑物/越线/无视交通规则等)。因此,只有将环境/地图/规则信息有效融合进轨迹预测,才能确保预测的准确性与行驶的安全性。
4)实时性与算法复杂性/计算资源限制
自动驾驶必须对实时环境迅速反应。预测模块不能太慢,否则生成的轨迹可能已经过时。但如果想要实时预测,高复杂度模型(深度网络+多智能体交互+多可能性计算+地图融合)又会需要大量的计算量。如果实时性不够、计算资源不够,或者延迟太高,就不适合实际部署。如何在追求极致预测精度与系统整体响应速度之间找到一个平衡,是非常重要的。
5)评估与现实场景差异(“数据集vs实际驾驶环境”)
很多轨迹预测技术是在固定数据集/过去记录上训练/测试的,也就是假设所有对象行为都会按历史轨迹执行。但真实交通场景,自动驾驶车辆本身会因为预测结果/决策/行为而影响周围人/车的行为。也就是说,真实世界是互动(interactive)的,一个模型在静态数据集上的高精度,不一定能在真实道路上表现良好。这种差异(dynamicsgap)是轨迹预测应用到自动驾驶时必须特别关注的问题。
最后的话
随着自动驾驶系统从辅助驾驶(ADAS)向更高级别(如L3/L4/L5)发展,对安全、可靠、全面感知的需求越来越高。在城市复杂交通、混合交通(汽车+自行车+行人+电动车+摩托+行人)情况下,仅靠看到并反应远远不够。自动驾驶系统必须具备预判能力,能知道别人可能做什么、提前为很多种情况预留应对方案。轨迹预测,就是给自动驾驶系统提供了一双预见未来的眼睛/大脑。
没有轨迹预测,自动驾驶就只能看见现在然后反应,容易发生滞后、刹不住、避不及、判断失误;有轨迹预测,就可能更安全、平滑,也更像人在驾驶。轨迹预测是自动驾驶系统迈向真正稳健、安全、自主的重要一步。