凭借数十年积累的机器人技术经验,该团队自信能为市场带来安全而可扩展的解决方案。模拟主管Pete Melick解释说,主要的挑战只剩下证明其安全性。“在公路上即使长途行车,遭遇难以处理的事件几率也是非常低的。”他说,“要以一定的统计置信度证明你的卡车在任何可能发生(但又不会经常发生在普通卡车上)的各类极端情况组合下仍然可靠,是十分困难的。这需要卡车不折不扣地行驶数千万英里。”
混合模拟方法
因此,团队选择使用模拟作为主要验证工具。用于自动驾驶的模拟分为两种,每一种都有利有弊。Ike通过综合运用这两种方法,取得了兼具两者之长的结果。日志模拟意味着将真实行车数据馈送到自动化系统中。使用真实行车数据的优点是,记录的数据包含了真实传感器和真实交互的所有细微瑕疵,但它也有无法实现闭环控制的缺点。换句话说,在真实世界日志中记录的场景无法根据模拟车辆的行为改变。如果自动驾驶卡车决定放慢行驶速度,模拟中的其他车辆不会对这一改变作出反应,这样一来模拟的价值就会大打折扣。
在日志模拟中,所模拟车辆的行为(蓝色)与所记录车辆(红色)的行为产生分歧
虚拟模拟使用人工制作的情境和会随机应变的Actor,就像电子游戏一样。与日志模拟不同的是,虚拟情境中的其他车辆可以针对自动化系统的行为作出应对。一次虚拟模拟的单位叫做一个情境,它是卡车在公路上行驶时可能遇到的一种特定事件。通过虚拟模拟可以程序性地改变定义情境的参数,创造出许多相似但各有不同的情境,每一个称为一种变化。利用变化,Ike可以在无数可能的情况下测试它的自动化软件,
Ike先前从另一家自动驾驶技术公司Nuro购买了代码库,这是它在模拟开发方面的优势。这个代码库经过两年开发后的成果被Melick形容为世界级的机器人技术基础结构,其中包括了可视化、地图绘制、车载基础结构、云基础结构、机器学习、标签管道和日志模拟等关键技术。团队以此作为起点,然后加入了其成员在各自领域的专业知识。
在虚幻引擎中设计情境
为了开发虚拟模拟工具,团队决定借助虚幻引擎,他们花了一年时间扩展各种现有的相关功能,以满足自身的特定需求。Melick解释说,虽然每个从事虚拟模拟的人都认识到了闭环控制和变化的优点,但大家实现它们的方式却各不相同。
“我们的方式的与众不同之处就在于,我们欣然接受了游戏引擎,使它成为我们的虚拟模拟工具的关键组成部分,而另一些公司虽然也在使用游戏引擎——甚至可能也在使用虚幻引擎——却没有全面接受它,只是把它作为图像生成器,配合其他模拟工具使用。”他说。
作为该过程的第一步,Ike对虚幻引擎的关卡编辑器进行了自定义,使它成为情境设计工具。
Ike的卡车使用高精度地图计算自身在场景中的位置,这种地图由激光雷达强度和海拔高度数据组成,系统收集这些数据后处理为车道中心线和边界线。然后系统使用地形API将这些地图数据流送到虚幻引擎中,使团队能够用它来设计和运行情境。
在虚幻编辑器中用Ike的地图设计情境
自动化系统需要的地图数据在分辨率上要高于能轻松找到的开源格式数据;为了采集必要的数据,Ike使用了一辆配备两台激光雷达扫描器的特制地图绘制车,并让它实际沿公路行驶。该公司通过这种做法在数据上完全做到自给自足,只要是它的地图绘制车能开到的地方,都能模拟出来。
在导入地图以后,用于情境设计的大部分构件都是现成的:基于时间或距离的触发器,供Actor跟随的样条,高效的环境查询系统,功能齐全、可以定制的GUI,以及可以用来设计任何复杂编排的脚本语言。
“游戏引擎是用来构建活生生的场景的——让玩家在其中做决定、且场景会产生逼真反应的关卡。”Melick说,“情境也完全符合这样的定义,只不过玩家变成了机器人。”
机器人应该如何在模拟器中控制其化身?模拟器又应该如何为机器人提供必要的输入?Ike的自动化软件由若干代码模块组成,它们使用Google Protocol Buffer消息互相通信。团队对引擎做了一些小修改,使它也能够发送和接收这些消息。模拟器中的任何Actor或组件都和车载软件模块一样,能发布或预订任何消息。
情境在Ike的日志查看器(左)和模拟器(右)中运行。动画由Ike提供。
在当前的设置中,模拟器会发布模拟的物体探测结果,馈送到跟踪软件中,然后预订转向、油门和刹车命令,控制模拟车辆的运动。
Ike还使用了虚幻引擎的AI感知系统,为其模拟代理添加一些智能行为。例如,在沿地图上的车道或预定样条行驶时,它们可以探测到路线上的障碍,并使用基于IDM的速度控制器避免碰撞。
运用蓝图的力量
为了让设计师能够扩展情境的范围,团队将功能对虚幻引擎的可视化脚本系统蓝图公开。“我们知道自己工作得再快,也不可能快过情境设计师的想象。”Melick说,“我们必须帮助他们以高效且可重复的方式创建情境。”
设计师使用蓝图创建新的行为和编排。例如,他们可以让Actor按照参数化的周期和振幅,在其车道上蛇行前进。他们也可以将模拟的噪点添加到探测结果中,再馈送至自动化软件,来测试它对不完美输入的敏感程度。他们甚至可以使用蓝图创建一个用键盘控制的Actor,与模拟的卡车进行交互——整个过程不需要他们写一行C++代码。
在蓝图中对模拟的自动化输入添加噪点
蓝图也是Ike的变化系统的关键。设计师可以通过对Actor添加组件来添加可变参数,然后实现一个蓝图函数来定义改变该参数的效果。
“通过这种方法,我们基本上可以改变一个情境的任何属性。”Melick说,“我们可以改变任何Actor的位置、朝向、速度或大小。我们可以改变Actor的目的地,它们需要沿公路行驶的距离,或者它们变道的频率。只要能够在蓝图中表达出来,就可以改变。”
Melick知道有些人批评把游戏引擎当作模拟器使用的做法,认为它们无法实现确定性,也就是重复执行同一模拟可以得到相同结果的特性。
“这种假设是错的。”他说,“Ike的模拟器就是确定性的,它让我们得益于快速可重复的离线测试。而这还仅仅触及了虚幻引擎的自动化模拟潜力的皮毛而已。我们有许多激动人心的项目正在开展,包括使用虚拟模拟进行可重复的硬件在回路中测试,和实现从真实驾驶事件自动生成虚拟情境。”
在Ike的模拟中手动驾驶虚拟车辆。动画由Ike提供。
虽然我们可能还要等一段时间才会看到无人驾驶的卡车在公路上安全行驶,但Ike在虚幻引擎中创建的每一个情境都让我们朝那个目标又近了一步。这是一个令人安心的想法。有兴趣了解怎样发挥虚幻引擎用于训练和模拟的潜力吗?请联系我们来开始对话。