Edwin Olson 为原密歇根大学助理教授,在自动驾驶领域深耕逾十年。曾参与 2007 DARPA 城市挑战赛,曾任福特自动驾驶项目首席研究员、丰田研究院自动驾驶技术研发副总监。现已下海创业,创立 May Mobility 并担任 CEO。
Edwin Olson:今天的话题是如何搞出可靠的自行驾驶系统。
不论在密歇根大学,还是 May Mobility,这都是我们不停在思考的问题。AprilTags 就是一个例子:一个最大限度作弊的办法,以搞出尽可能可靠、尽可能万无一失的系统。
随着人类的进步,我们试着造出不会撞死人的汽车、在生活与工作环境中长时间部署的机器人。这意味着把系统鲁棒性和可靠性,推向一个前所未有的层次和规模。
技术项目往往遵循这么一个三段式的进展套路:
Make it work,make it work well,make it cheap
即:
- 技术实现
- 把产品做好
- 降低成本
一开始,我们在某些限定情况下勉强实现一个新技术,一般会对此发表篇论文。接下来进入这么一个模式:调参、修补漏洞、数据验证、迭代,把最终成果再写成一篇论文或搞出一个“产品”,这时候往往会特别开心。
大体上,自动驾驶也在按照这个套路走。
目前,业内非常多的公司在开发自动驾驶汽车。他们中的大多数,也搞出了些在某种程度上能用的东西。这些公司下一步的计划,看起来都是达到很多的测试里程、修补漏洞、找出让自动驾驶系统失效的特殊情况。你天天听到媒体引用某自动驾驶公司 CEO 的话——说我们要收集特别多的里程数据,把稀有状况找出来,然后我们就能打败竞争对手。
看起来,这就是他们的战略。
对此,我有一个问题:“这么干的效果如何?”
让我们先回顾一下自动驾驶技术更早时候的状况。在 2004 年,一辆自动驾驶汽车在遇到需要人类驾驶员干预的紧急状况之前,平均能够开多远呢?
那时候,第一届 DARPA 挑战赛举行,卡内基梅隆大学(CMU) 凭借比其他参赛车辆多开了七英里获得第一。
而今天的自动驾驶汽车,在每次人工干预之前平均又能行驶多远?公开的可靠性数据显示是 5000 英里。我不确定是否应该相信这个数字,不过他们是这么宣称的,暂且就按这个来。
据此画一个折线图,如下图,横轴是时间,纵轴是人工干预率。你的期待或许是,人工干预率会像摩尔定律那样指数级改进。
问题是,人类其实是非常不错的驾驶员。
许多鼓吹自动驾驶汽车的人说,人是相当糟糕的司机,会醉驾、疲劳驾驶、开车容易犯困等等。这些都是客观事实。但现实是,人类是相当优秀的驾驶员。在美国,平均每行驶一亿英里才会发生一起致死交通事故。只是因为我们开车太多,才有这么多交通死亡人数。
所以,我们实际想做的是,把人工干预率降到途中“solved”(自动驾驶问题已攻克)门槛以下,即一亿分之一。我们需要多久才能达到?
做一些简单的计算,目前,人工干预率每 16 个月降低一倍。我们需要 19 年才能达到 “solved”门槛。
很显然,我们需要加快速度。举个基因测序的例子,这是它成本降低的速率:
这才是我们想要的。所以,摆在面前的挑战是:怎么摆脱近乎直线的缓慢提升速度,到巨幅提升的曲线?
这就回到了机器人的可靠性。
在机器人领域,大家都喜欢新的功能。假设谁发明出了一个人机协作的抓鱼装置(恶搞),大家都会觉得很赞。但如果另一个写了个论文,说他的机器人实现了百万次成功的木块抓取。我猜评审会说,这看起来只是渐进式的提升,机器人已经在实验室抓了 40 年的木块。
我认为这反映出了一个问题——公众普遍认为前者很了不起,而后者没那么了不起。我们面临的一个挑战是,如何才能塑造出一个激励体系,鼓励更多人做后者那样的研究?这很重要,因为我感觉到许多针对超大规模、超高可靠性层次做实验想法正在涌现。
现在,我与大家分享一些我们在 May Mobility 所做的工作。福特、丰田已经在部分采用这些想法。这些工作的核心是:怎么为自动驾驶系统注入可靠性?
举个防碰撞自动刹车的例子。自己的车有自动刹车功能的人,可能有过多次这种体验:在路口,前车马上要右转,当你开到它的位置的时候,它早就转过去了,因此不需要减速刹车——但系统会自动刹车。传感器感知到前车停住,系统判断如果继续行驶就会追尾。但系统不知道而你注意到的是,这辆车在等一个行人过马路,而该行人已经快走到马路对面 ,这辆车马上就会右转,因此并没有追尾风险,但系统无法理解这种状况。
要提高自动驾驶系统的可靠性,就需要在类似这样的棘手情况,让系统做出正确决策。为什么这种情况很棘手?系统不单要理解车辆的位置,还要理解单位之间的交互。
我们用 multi-policy decision making (MPDM,即多策略决策)来解决这个问题,这是我们近几年在密歇根大学做的研究。MPDM 是针对 partially observable markov decision process(POMDP,部分可观察马尔可夫决策过程)的解决方案,在大量不确定因素下,为机器人进策略计算。
找出一个能解决 POMDP 的通用方案非常困难,因此,MPDM 实际上解决的是最最傻瓜版本的 POMDP,傻瓜到可以在线做。我们的办法是生成多个策略选项,而在线上做的唯一一件事,便是决定即时运行哪一个策略。
决策方法如下:
先有一个环境初始评估,其中存在不确定性,比如我在空间中的哪个位置、其它单位在做什么。因而从中采集样本,初始化一个模拟器,再运行一个该场景的模型,预测接下来 10 秒钟发生的事。举个例子,假设我要并入高速路的车流,目前有四辆车可供选择,怎么决定插到哪一辆车的前面?对四个选项各自做一次模拟(线上),根据模拟结果做决策。
假设其它单位和我的行为会互相影响。我们对周围的每辆车都分配一个策略,比如,某辆车的驾驶员可能很礼让,也可能很鲁莽,系统会对此做一个概率估计。
整套算法其实很简单。对于每个策略选项,系统会进行采样,把所有不确定因素转变为一个具体的场景,然后在模拟器中运行。鉴于不确定性,这个过程会多次重复,每次采样都会生成一个新的场景。最终的目的是计算出每个策略的成功概率——平均表现如何?对每项策略进行多次模拟之后,便可挑选出表现最好的那一个。
其中不确定性的影响特别大。举个常见的例子,狭窄道路上,两辆车相向而行将要会车,互相之间均不确定对方会如何避让。在不确定对方向左还是向右、是否减速、何时减速的情况下,如何选择避让策略?我们的办法是重复采样,选出在大多数情况下表现都比较理想的避让策略。
再举一个例子。在下图情况中,若强行插入到蓝车前面,看起来两车是要相撞的。我们会产生一个蓝车的策略模型,对其所有可能采取的策略进行计算。若绝大多数结果显示蓝车将采取减速避让策略,插到它前面就是一个较合理的决策。
这种情况对传统的行驶路线规划系统会是不小的挑战——大多数自动驾驶汽车采用的都是 RRT,或某种有限深度下的搜索。这能够规划出一条不会撞到其它车的行驶路线。但如果我们的行为影响了路上其它车辆接下来的行为呢?路线规划就失效了。
在上图的情况下,传统的路线规划存在很严重的问题——一条能让你安全插入车流的路线并不存在。你需要依靠其它车辆的行为(减速避让),创造可驶入的空当,
再来一个场景。高速路上前车行驶缓慢,你有两个策略:1. 留在当前车道;2. 变道超车。系统中并没有“如果前车行驶慢,就变道”的逻辑。但当系统进行模拟预测,发现“变道”策略的统计表现比“不变道”更好。
对我们人而言,这是很显而易见的。但大多数自动驾驶系统的变道算法设计,采用的都是一大长串的条件表达,经常是软件工程师人工写的代码:“If...If...If...If....is true, then...”。
这时,不常见的情况就成了问题。人工编写这些条件和规则、规定车辆在满足哪些情况下才能做出某个行为时,会导致每几万英里遇到某个代码没有涉及的特殊情况时,你发现逻辑是错误的。摆脱这些条件逻辑、用一套优化系统进行策略选择,是更好的方式。
我们也在研究一些远远更复杂的场景,比如室内。一般来讲,室内自动驾驶其实比公路自动驾驶难的多。公路有车道,大家一般会按车道行驶,而拥挤的行人场景(如商场)完全不是这样——行人会做出各种各样意想不到的行为。
我们的目标,是用 MPDM 开发出在拥挤人群中也有较好表现的机器人。我们以三个策略入手对机器人进行编程:停止、单方面行动、跟随。其中,“单方面行动”指的是把所有物体(包括人)当做障碍,用最快速度抵达目标。它的好处是更快抵达,坏处则是不顾忌行人,行驶模式显得很疯狂。行人也不会喜欢一个从他们面前高速驶过,完全不顾及别人心情的机器人。跟随则相反,好处是不会影响别人,坏处是慢。
那么,该如何决定采取哪一种策略?
这一点也不容易。好在对于多策略决策,你并不需要做出选择,交给优化过程就行了。下图是系统架构;
对不确定因素进行采样,生成各种不同的场景,再放到模拟器去对这三项策略进行计算,得到结果的概率分布,最后选用平均下来表现最好的那条策略。
这里有一个很关键的问题:模拟的保真度极低:这些是非常简单的模拟器。机器人的多策略系统以 2~5 Hz 的频率运行,这是机器人改变策略的速度。每个策略选取周期大约有五次采样。这是非常低保真度的模拟器,能够快速处理数据并输出足够的统计信息。
回到自动驾驶可靠性的话题。之前我提到,现在的问题是如何摆脱摩尔定律级别的速度,进入一条幅度更加惊人的可靠性改进曲线。我们认为,多策略是其中一条实现该目标的途径。这里有几个原因:
人们还经常会问,这些策略是怎么得出来的?
简单的回答:是我们造出来的。这是我们眼里又一个非常关键的部分。作为工程师,我们有大量的专业领域知识,充分利用这些知识进行策略设计很有价值。我们的目标,是实现用相对较少的策略抓住一系列很广泛的相关行为。一般而言,如果能想出一系列策略,横跨相当大的潜在行为空间,往往能得到非常不错的结果。
另一个问题是:如果某个现有策略(模型)覆盖范围之外的行为发生,怎么办?
好消息是,当不寻常的情况发生,系统会得到信号——遇到特殊情况。简单来说,这时系统会把这个特殊事物打上标签,并与它保持距离。例如,当某个骑自行车的人在十字路口连跨四条机动车道,系统并不会试图建立一个“疯狂自行车骑手”类别,而是直接打上特殊标签,离他远远的。
总结起来,MPDM 的好处有如下几点:
参考资料:
大牛讲座:怎么才能做出可靠的自动驾驶系统?