Unite 2019|基于Unity的自动驾驶模拟(上)
自动驾驶是当今世界最热门的科技话题之一。在Unite Shanghai 2019大会中,百度美国研发中心的荣国栋分享了《基于Unity的自动驾驶模拟》。
受篇幅限制,我们将本次演讲分为上下二篇,本文将介绍百度的自动驾驶平台阿波罗,分享为什么使用Unity开发阿波罗的仿真。
演讲内容
大家好,我是来自百度美国研发中心的荣国栋,今天为大家分享百度使用Unity开发自动驾驶模拟的一些工作。
我是新加坡国立大学计算机科学专业的博士,在硅谷的NVIDIA、三星、谷歌、华为的研发部门都曾工作过,主要是图形学相关的,比如说GPGPU、虚拟现实和增强现实。从去年开始,我加入了百度美国研发中心,从事自动驾驶模拟器的开发。
首先我将简单介绍百度的自动驾驶平台阿波罗,然后是分享为什么要用游戏引擎开发自动驾驶的仿真,最后是我们使用Unity为阿波罗开发感知仿真的一些情况。
我们来看一段视频,让大家对我们的工作有一个感性的认识。这个视频是我们使用Unity开发的自动驾驶的仿真。
我们可以看到这个视频效果是非常高精度的渲染,左边是仿真渲染,右边是真实摄像机拍摄的情况。
我们可以模拟一天不同的时间,白天或夜晚不同的光照效果,开灯或关灯的效果,还有路面开裂,标志线不清楚等不同的路况。我们还有不同的天气,下雨天有路面的反射效果,变成晴天的效果。
我们对感知模块的仿真提供真实数据,做到实时评估,并且实时地3D可视化,从不同角度来观察感知模块的结果。我们可以对感知模块在白天或夜晚的性能进行评估。比较有趣的是,我们发现晚上效果反而更好。
什么是阿波罗平台
首先,我将介绍一下百度的阿波罗平台。
阿波罗是百度的全栈式开放开源的自动驾驶软件平台,它是开放的、可靠的、安全的软件平台,可以提供给我们的合作者,在他们的硬件上开发自动驾驶。
如果想了解更多关于阿波罗的情况,请访问:
http://apollo.auto
目前阿波罗是世界上最活跃的自动驾驶开放平台,其中大概有超过39万行代码,我们在GitHub上公开了所有代码,在GitHub上得到1万2千多个Star,大约有超过130名合作者在使用阿波罗平台开发自动驾驶。
上图是阿波罗的路线图。阿波罗是一个很年轻的平台。2017年4月份,百度才开始宣布阿波罗计划的。在2019年1月份,我们在CES上发布了3.5的版本,预计今年下半年会发布4.0版本,争取实现限定区域内自动驾驶的批量化生产,这是我们4.0的目标。
上图是Apollo 3.5版本的架构图,我们可以看到阿波罗是从下往上的全栈式的平台,从硬件到各种感知器,到我们自主开发的Cyber实时操作系统,再到上面自动驾驶所有模块,从地图、定位、感知、规划、控制、人机交互各种模块。最顶层是云端的各种服务。
我们可以看到云端各种服务里面有一个是Simulation,也就是自动驾驶的仿真,这是阿波罗的自动驾驶仿真。
阿波罗的自动驾驶仿真包括二个部分:
一个是LogSim。LogSim就是我们在路测的时候,将传感器采集的所有信息存下一个Log,然后重新播放。LogSim的所有数据来自于真实世界,这是最精确的,但坏处是没有办法改变Log中的内容,所以并不是完全意义上的仿真,因为数据都是真实的。
WorldSim是阿波罗的另一种仿真系统。它是完全虚拟的世界来进行仿真,但它有一个问题是:它假设的是完美感知,所以它虚拟的直接是感知模块的结果,障碍物、车道线、红绿灯的信号等数据,然后将这些结果发给后面的模块进行自动驾驶控制。
WorldSim并没有感知模块的仿真,这也是为什么我们要用Unity来开发虚拟环境,对感知模块进行仿真,达到全栈式无人驾驶的仿真。
如果大家想了解阿波罗里面的LogSim和WorldSim更多信息,请访问:
http://apollo.auto/platform/simulation.html
为什么使用游戏引擎开发自动驾驶的仿真
下面我们讲一下为什么要用游戏引擎来开发自动驾驶的仿真。
首先仿真的目的是为自动驾驶开发、测试、评估提供一个高效的环境。
如果我们完全基于路况进行测试,很多情况是很难遇见的。例如在硅谷,基本上从来不会下雪,我们就很难测试下雪或多雾的天气。另外还有一些极端的情况,各种交通流不是说想碰就可以碰到的,我们都可以通过仿真来模拟这些情况。
上文视频中展示的路况,例如车道线比较清晰的情况或者车道线不清晰的情况,这种情况如果在同一路段,可能要等很久才会等到路况的变化。而通过仿真,我们可以实时改变这些情况。
仿真的分类包括Software-in-the-loop和Hardware-in-the-loop。Software-in-the-loop表示纯软件来进行仿真,Hardware-in-the-loop表示后面自动驾驶的控制、规划会有一些硬件的参与。
Open loop和Closed loop。Open loop就是开环式的,仿真环境里,所有汽车和行人的运动都是有仿真软件来控制。
Closed loop闭环式表示至少主车的行为由自动驾驶软件来控制,我们提供传感器的信号给自动驾驶软件,例如:阿波罗经过运算以后,它把得到的一些控制信号反馈给我们,像方向盘要打多少度,油门要踩多少,我们根据这些来控制主车,这就是闭环的仿真。
全栈式和部分栈。全栈式是仿真整个自动驾驶的所有模块,部分栈表示只仿真一部分模块,类似上文提及的WorldSim,它就假设是完美感知,没有仿真感知模块。
上图是市面上的各种已有的仿真软件,基本上现在大大小小的自动驾驶公司,从Waymo、Cruise、百度到各种StartUp,基本上都在开发自己的仿真软件。
我们之所以要开发自己的仿真软件,是为了可以结合阿波罗更好的定制我们的仿真,因为我们的地图格式、数据格式、交互方式,这些我们都可以根据阿波罗具体的格式进行定制。
为什么要使用游戏引擎开发自动驾驶的仿真?
最主要原因是游戏引擎可以帮我们高效的产生一个全栈的闭环的仿真,尤其在感知模块的仿真。如果使用游戏引擎创建一个赛车游戏,我们可以重构一个三维环境,在三维环境里面模拟相机,激光雷达等各种输入信号。
如果不用游戏引擎,完全自己从头开发的话,虽然也可以,但是工作量肯定会特别大,这也是为什么我们要用游戏引擎开发仿真的原因之一。
此外,游戏引擎可以帮我们产生大量的真值,现在的自动驾驶软件基本上都是用深度学习和神经网络的方法来操作。它们需要大量的数据进行训练,这些数据不仅仅是原始的感知器数据,而且是要标注过的数据。
现在的标注方法基本上都是由人工来手工标注的,手工标注有很多问题,包括:耗时、耗力、耗钱,还不准确。例如,一个车只有车头可见,车尾是不可见的,人工标注的时候,只能猜测车的大致形状和轮廓在哪里。
当我们使用游戏引擎进行仿真,我们拥有所有的信息,可以输出最准确的真值来供它们进行训练。
上文中的视频也展示了,我们可以动态改变这个世界,可以有不同的时间、不同的天气、不同的路况,这些在仿真里都很容易实现。
上图是我们使用游戏引擎仿真的结果,可以看到我们使用不同方式的渲染,可以得到深度图像和语义分割,我们可以知道哪里是车,哪里是路,哪里是建筑物。我们可以很容易分割出不同的语义并得到不同的真值。
我们还可以轻易改变场景的各种情况:时间、天气、路况,还有就是很重要的交通流。我们可以仿真来模拟各种交通流。
在上文的视频中,我们可以进一步看到已有的仿真引擎,并且模拟不同的光照情况。晚上可以打开路灯,打开车灯,或者模拟某些路灯失效的情况。
我们模拟不同路况,一些标志线看不清楚、路面开裂的情况,还有模拟不同天气的情况,这就是游戏引擎的强大功能所在。
当然游戏引擎开发仿真还有很多挑战,最大的挑战就是如何来建一个高效的真实场景?
这个真实的场景可以是真实世界的重构,也可以是虚拟的完全人造的场景,例如是游戏虚拟的未来世界或外星世界的场景。我们现在使用二种方式进行处理,一个是手工通过我们的美术来创建,另一个是通过自动化的方式。
对于真实世界来说,就是通过数据驱动的方式,我们从真实世界采集一些数据,然后利用人工智能数据驱动方式来自动、全自动、半自动来重构真实世界的场景。
现在谈谈我们是如何重构真实世界。对于虚拟的场景,我们可以采用程序化生成动态的产生大量的虚拟场景。
第二个挑战是我们如何高精度地模仿这些传感器的信号。
传感器包括:相机、相机的图像、激光雷达的点云、雷达的数据信号等等。这些东西都会对我们感知的效率有极大的影响。
此外,如何实时生成信号,效率方面也是挑战之一。
为什么使用Unity来开发阿波罗的仿真
我们为什么选择用Unity来开发阿波罗的仿真?
我们看重Unity主要有以下几个原因:
Unity有很好的生态系统。Unity有很好的社区,我们可以得到各种问题的反馈。
Unity有很完善的Asset Store资源商店,我们可以重用第三方的很多工具,不用一切从头开始,从头造轮子。
Unity有很高效的图形渲染系统,我们可以实时渲染出逼真的图像。
Unity的性能现在也越来越好了,在云端加速,GPU加速方面都可以给我们提供很大的帮助。
最后一点,也是很重要的一点就是,Unity是一个传统的游戏引擎,但现在Unity也越来越看重汽车工业,其中也包括自动驾驶领域。Unity最近还推出了自动驾驶的工具包,这也是我们和Unity合作的一个重要原因。
小结
在本篇中,荣国栋博士介绍百度的自动驾驶平台 阿波罗,以及为什么使用Unity开发自动驾驶的仿真。在下一篇中,将分享如何在Unity重构自动驾驶的虚拟世界,敬请期待。
更多Unite大会精彩演讲内容分享,尽在Unity Connect平台(Connect.unity.com)。
下载Unity Connect APP,请点击此处。观看部分Unity官方视频,请关注B站帐户:Unity官方。
推荐阅读
使用Unity机器学习代理工具ML-Agents进行自动驾驶训练
官方活动
Unity外滩之夜今晚开启
Unity外滩之夜今晚开启,凭电子门票进场,使用专属二维码签到入场。今晚,在Unity共聚未来,共话当下。
签到时间:18:30-19:00
活动地点:上海东长治路588号白玉兰广场40楼,
8月2-4日,Unity将参展ChinaJoy 2019,展位及周边活动精彩纷呈,线上线下同步开启。了解Unity at ChinaJoy精彩活动内容,请点击此处。
展位地点:上海新国际博览中心 W4馆B601号
开展时间:8月2-4日 (星期五-星期天)
8月21日前加入Unity Connect,创建个人频道,成为与Unity社区同行的伙伴-Unity Buddy,享受专属福利。
了解如何成为Unity Buddy,请点击此处。
Unity Connect评论区支持你认可的Buddy,获得免费门票。
喜欢本文,请点“在看”