Uploads%2farticles%2f13149%2f6368081272724171771695603
|
2019-05-15

百度阿波罗荣国栋:如何基于 Unity 打造自动驾驶仿真

在自动驾驶领域,由于路测效率慢、局限性多,因此,仿真测试成为自动驾驶测试中非常重要的手段。基于仿真平台,我们可以训练自动驾驶汽车在面对不同路况、不同天气、不同场景的感知、决策等能力,也能检测自动驾驶算法。2018 年 12 月,百度阿波罗宣布与 Unity 达成合作,双方一起研发实时仿真产品,以实现开发人员在现实模拟环境中测试自动驾驶汽车,以此来增强自动驾驶汽车的安全性和可靠性。

如今,这一项目进度如何?阿波罗为什么要使用 Unity 这样的游戏引擎进行仿真?如何高效构建一个真实的场景,如何对虚拟唤醒中的传感器信息进行仿真?又该如何评估仿真的效果?针对上述问题,在 Unity Shanghai 2019 现场,百度美国首席工程师荣国栋为我们深入的讲解。

百度美国首席工程师荣国栋

为什么用游戏引擎做自动驾驶仿真?

与其他仿真平台相比,基于 Unity 等游戏引擎可以高效地产生一个全栈闭环仿真,尤其在感知模块仿真。因为游戏引擎像建立一个赛车游戏一样,可以重构三维环境,在三维环境里面模拟相机、激光雷达等信号,这可以大大简化自动驾驶仿真场景制作的工作量。

另一方面,游戏引擎可以产生大量的真值(ground truth)。荣国栋表示,自动驾驶训练大量运用了深度学习和神经网络方法,这需要大量带有标注的数据进行训练。目前,大量数据标注都是采用手工标注的方式,耗时、耗力、耗钱。而基于游戏引擎进行仿真训练过程中,可以输出最准确的真值,包括了不同时间、天气、路况、交通流等数据信息,这同样可以减少工作量。

Unity 有完善的图形渲染和交互引擎,基于此,我们可以快速搭建高质量的仿真环境。同时 Unity Asset Store 资源商店中有大量第三方插件资源,我们可以使用各种资源方便的实现不同的天气、路况、材质等效果,加速了开发的进度。

如何高效构建一个真实的场景?

构建仿真场景的流程大概总结为:先使用高精度的数码相机拍摄大量图像,再通过软件重构出三维模型。然而,在实际操作中,这个操作绝非像描述的这么简单,三维模型非常复杂的,在操作中需要对模型进行简化,再通过 xNormal 等软件贴图,最后再进行 Cleanup。

而这一系列操作之后,我们依然没有办法得到一个非常「真实」的仿真场景,因为现实世界中会存在各种光照条件——针对这一问题,还需要用高动态途径渲染方式来达到逼真渲染效果。

在自动驾驶仿真中,最重要的一步是路网构建,这需要高精地图,需要了解车道线的连接关系,还要知道红绿灯交通信息。目前,百度阿波罗使用的工具是 VectorZeroR 公司的RoadRunner软件。基于这个软件,我们可以把 OpenDRIVE 地图格式转化成阿波罗的高精地图格式,并展示车道连接关系,甚至实现对复杂的转盘路况的支持。

另外,在进行三维环境生成过程中,如果对现实世界进行一对一的复现,会导致大量的工作量,因此,我们需要将真实世界做了简化,以此提高效率。比如说有一条高速公路,大部分路段都是很简单的路况,只有路口、匝道等区域路况比较复杂。那么,我们只需要把这些路口挑选出来,中间简单的路况可以大大缩短,用很短路把复杂路连接起来。

如何使用构建好的场景进行基于摄像头的仿真?

在真实场景中,相机捕捉到的画面是会有畸变的,包括径向畸变和切向畸变,以及 Tone mapping 曲线。然而,通过 Unity 渲染出来的场景却没有畸变。因此,在使用 Unity 模拟各种相机的输出时,需要补充这一部分畸变的信息。

以径向畸变中的桶形畸变为例,目前百度阿波罗有两种畸变的模拟方式:

  • 反向畸变:我们对输出图像的每一个像素用一个反向畸变的公式来进行计算,得到它在没有畸变前的图像位置,从而读取该像素点的 RGB 从而实现畸变模拟;
  • 前向畸变:将没有畸变的图像用一个稀疏网格来代表,然后将每一个网格的顶点根据畸变公式计算畸变后的位置,然后将网格进行变形,从而实现畸变效果。

值得注意的是,桶形畸变会把图像缩小一点,所以如果我们要输出一个 1920*1080 的图片,我们实际上需要渲染一个稍微大一点的图片。另外,我们可以调整参数来实现不同相机的模拟效果。

如何在虚拟场景里面对感知结果进行可视化和评估?

在评估虚拟场景里的感知结果时,可以将感知模块识别出来的结果与 3D 仿真的真值进行评估。以障碍物比对为例,我们可以将返回包围盒和真值进行求交,看二者公共部分的体积,公共部分越大越好。而对于车道线来说,可以通过对车道线采样,如果采样点在足够近的距离有真实车道线则代表这个感知结果是正确的。

同时,在评估过程中我们可以将感知结果可视化。值得注意的是,可视化过程中,感知模块进行在感知计算并返回的过程中需要一段时间,如果直接将感知结果显示则会出现结果与跟屏幕上的车和环境无法对应的问题。因此,在实际操作中,我们需要用一个队列存储一定时间的环境、障碍物的信息,当感知结果返回后,通过时间戳找到对应真值,再将感知结果和真值进行变换。

阿波罗自动驾驶仿真的下一步是什么?

目前,阿波罗已经基于 Unity 构建了高精度的基于摄像头的仿真并且对接阿波罗项目的感知模块。下一步,阿波罗将为感知模块输出大大量有标注的数据,以供感知算法进行训练,提高感知结果。另外,我们也将增加对更多传感器的支持,比如激光雷达、超声波等。同时,我们也跟百度研究院合作,采用数据驱动方式来模拟更加真实的交通流,提供更加用户友好的工具,让用户更好定制传感器位置、车流场景、白天黑夜等各种因素。

未来,百度希望这一仿真作为云服务开放给第三方的开发者来使用,并把已经标注的数据开放出来,甚至帮助定制自己的数据集。用户可能有自己不同的相机,不同的激光雷达参数,利用我们的感知模块可以生成定制的代表数据。

百度将深度结合 Unity 强大的游戏引擎,完成更多的原型工作,为自动驾驶实现更多的功能。

>>
Back to top btn