编者按:
最近Unity上市了,网上也有一种自动驾驶仿真第一股的说法。其实这个说法蹭热度的嫌疑居大,毕竟仿真只是Unity众多业务中的一个而已。但话又说回来,Unity做自动驾驶仿真是天经地义的事情,和Unreal等相似,它的技术储备和仿真所需要的技术栈基本上是完美重合的。
目前的开源仿真工具主要是基于Unreal和Unity完成的。前者的代表有Carla和Arisim,后者的代表有lgsvl simulator 和 AriSim_Unity。
本篇主要关注基于Unity的自动驾驶仿真开源资源。这些资源是从wiki和其他网络资源收集而来,分享的重点放在工具总结本身,希望其可以作为一个粗略的资源列表。
Unity为什么适合自动驾驶仿真?
市面上有一些优秀的商业软件,如Prescan、VTD、51Simone等,但它们非常昂贵。网络上也有一些开源项目,但它们中有一大部分不是基于现代引擎开发的,因而其图形和通用软件环境可能有些过时。考虑以上原因,尤其是对于一些初创公司,基于Unreal或Unity自己搭建一个仿真引擎就是一件比较有意思的事了。
如果真的要基于物理引擎搭建一个自动驾驶仿真软件,首要的,要注意以下几点:
不要重复造轮子,在游戏引擎的基础上构建
利用成熟的3D游戏工作流、技术、硬件和技术社区
要有可扩展性
要模块化(包括各种输入输出设备,AI,传感器等)
能足够灵活进行原型设计,驱动评估,自动测试
为什么建立在游戏平台上?
游戏是3D软件的集大成者,近些年有大量资源和人力被投入进来以改进游戏的技术。可编程着色器、物理引擎、预照明、导航网格、动画混合系统等功能都是游戏引擎支持的,加速技术的应用也可以让游戏软件以实时帧率运行。
游戏产业也推动了硬件创新,比如英特尔的GPU开发、罗技G27\G29、TrackIR头部跟踪器、Leap手势传感器、Oculus Rift和低延迟传感器等输入控制器硬件。利用这种低成本的硬件进行模拟也将允许更多的观众使用功能齐全、价格合理的模拟器。
为什么选择Unity?
其实在我个人看来,Unreal和Unity都是很好的引擎,网络上关于它们的优劣对比文章也很多,在此不再赘述。在这篇文章中我们把注意力放在Unity上。
Unity本身有如下特点:
版本迭代稳定
已经有很多基于Unity的项目,有众多游戏和开源项目使用的都是Unity
集成有动画、粒子系统、导航网格、物理、occlusion等各种功能
可以使用C#,Mono等成熟的脚本
可以在win/Linux/Mac等多平台上使用
有良好的社区氛围(众多开发者和素材)
有好的文档支持,包括但不限于官方文档,论坛,第三方教程,youtube等
是创新硬件产品的首选平台(Oculus Rift等虚拟现实设备, Hydra Razer体感控制器, Leap)
免费/价格较低
不开源,但是可扩展(编写脚本,low level dll等)
资源
这一节是这篇文章的核心,类似下文描述的资源有很多,但我精力有限,不打算全部列出。有好的建议可以在评论区列出。
环境搭建
Unity本身并不是一个建模工具。它是一个“场景装配”工具和实时游戏引擎。所以详细的3D建模一般都需要在其他工具中完成。
Unity中现成的素材可以很容易地统一起来。在“ 3D Models Category of the Unity Asset store”里可以用免费或很少的钱购买到Unity中的大量产品。如果你正在寻找一些相关的模型,在资产存储搜索“pack”,例如 Vegetation pack, City pack等等。对于资源包的搜索,网上有大量的整理博客,这里就不再赘述了。当然,你也可以自己建模解决问题。
以下大致提一下地形构建、城市(建筑物)构建、路网(道路)构建的资源。
[地形] Terrain Toolkit,YoutubeDemo
[地形] WorldComposer,可以从真实环境中构建数据城市(建筑物)构建
[城市] CityEngine 快速生成城市模型的软件,功能很强大
[城市] ViziCIties 它使用了开放地图数据,结合3d生成的建筑物进行缩放,混合了从英国政府、环保机构到Twitter等各种来源的大数据。
[路网] VTP 主要用于基于路网建设的城市,支持较多道路设计文件格式。路网(道路)构建
[路网] Road Architect 以动态交叉口、桥梁等多种道路物体为特色,是非常专业的道路建设软件
[路网] EasyRoads3D 特点是能建立众多跟道路相关的对象如栅栏,墙,树等。
[路网] 借用OSM-CityEngine-Unity3D 的工具链
[路网] RoadRunner,可翻看以前的文章参考
[路网] 基于点云信息,3D地图建立,这种反而是和开发生产环境耦合最紧密的方法。
天气天时架构
Unity中提供了一些简单的天时控制和天气控制
太阳位置(仰角,方位角)控制
通过调整角度和大气散射参数调制阳光的颜色和强度
太阳在低角度会产生眩光效应
天空背景沙河动画(或者至少白天黑夜之间有差别)
通常至少有几个云层
云可以由程序生成和形成动画天气特点
降雨效应
地面效应(滴溅系统、颗粒系统)(积雪融化)
吹风,树叶降落等其他效果
闪电等
交通流架构
交通流仿真对自动驾驶仿真来说是极其重要的。这个在我们以前的文章也专门介绍过,可以翻回去回溯。这里首先一些online资源网站
Unity-Traffic-Simulation
Martin Treibe 交通计量经济学、建模与统计研究所
gamma 该网站可仔细钻研
Unity中的A*算法
关于交通流仿真的书
《Fundamentals of Traffic Simulation》
《Traffic Flow Dynamics》
《Unity: A General Platform for Intelligent Agents》
《Connection of the SUMO Microscopic Traffic Simulator and the Unity 3D Game Engine to Evaluate V2X Communication-Based Systems》
非Unity的交通流仿真工具
PTV VISSIM
PTV VisWalk可以提供给行人仿真(包括人群,对象,路径规划,冲撞避免等)。
PTV Balance提供了基于绿波的实时交通数据的自适应信号控制,
PTV Optima 大规模交通可视化,态势感知,预测,事件检测。
PTV Visum Safety 事故数据分析与检测,分析事故集群
SUMO
Unity自带的交通流工具
iRDS
UnitySteer
Auto21 Traffic Modeling and Simulation
Verkeerstalent
Unity官方支持的自动驾驶仿真项目和工具
AriSim中的ML Agents工具
Unity Windridge-city
synthia-dataset
摄影制图法工作流程指南
Unity_simvz
读者如有其他关于资源的建议,欢迎在评论区留言。后续本文如有更新,也会更新在评论区里。