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

栏目: 后端 · 发布时间: 5年前

内容简介:在自动驾驶领域,由于路测效率慢、局限性多,因此,仿真测试成为自动驾驶测试中非常重要的手段。基于仿真平台,我们可以训练自动驾驶汽车在面对不同路况、不同天气、不同场景的感知、决策等能力,也能检测自动驾驶算法。2018 年 12 月,百度阿波罗宣布与 Unity 达成合作,双方一起研发实时仿真产品,以实现开发人员在现实模拟环境中测试自动驾驶汽车,以此来增强自动驾驶汽车的安全性和可靠性。如今,这一项目进度如何?阿波罗为什么要使用 Unity 这样的游戏引擎进行仿真?如何高效构建一个真实的场景,如何对虚拟唤醒中的传感

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

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

百度阿波罗荣国栋:如何基于 Unity 打造自动驾驶仿真
百度美国首席工程师荣国栋

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java解惑

Java解惑

(美)布洛克·加夫特 / 陈昊鹏 / 人民邮电出版社 / 2010-11-22 / 49.00元

你认为自己了解Java多少?你是个爱琢磨的代码侦探吗?你是否曾经花费数天时间去追踪一个由Java或其类库的陷阱和缺陷而导致的bug?你喜欢智力测验吗?本书正好适合你! Bloch和Gafter继承了Effective Java一书的传统,深入研究了Java编程语言及其核心类库的细微之处。本书特写了95个噩梦般的谜题,中间穿插着许多有趣的视觉幻象,寓教于乐。任何具备Java知识的人都可以理解这......一起来看看 《Java解惑》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具