对于自动驾驶仿真,LGSVL是主流的模拟器之一。本文《LGSVL Simulator-A High Fidelity Simulator for Auto
nomous Driving》,由LGSVL开发者(主要来自LG电子美国研发中心)撰写,对LGSVL做了详细介绍。
摘要
在真正的自动驾驶车辆上测试自动驾驶算法是非常昂贵的,许多研究和开发人员不一定有足够的资金购买真正的汽车和相应的传感器。尽管有一些免费的开源的自动驾驶系统,比如Autoware和Apollo,但是与它们一起使用的开源模拟器的选择是有限的。本文介绍了一种高保真度自动驾驶模拟器LGSVL。模拟器提供端到端的全栈仿真,随时可以连接到Autoware和Apollo。此外,模拟器工具还配备了核心仿真引擎,用户可以轻松定制传感器、创建新型可控对象、替换核心模拟器中的一些模块、创建特定环境的数字孪生体。
1 简介
在过去的几年里,自动驾驶汽车取得了巨大的进步。研究表明,自动驾驶汽车必须行驶数十亿英里才能证明其可靠性[1],如果没有仿真的帮助,这是不可能的。从自动驾驶研究的一开始[2],模拟器就在自动驾驶系统的开发和测试中发挥了关键作用。仿真使开发人员能够在不驾驶真实车辆的情况下快速测试新算法。与道路测试相比,仿真模拟有几个重要的优点:它比真实的道路测试更安全,特别是对于某些危险场景(如行人乱穿马路),并且可以生成在现实世界中很少遇到的corner case(例如极端天气)。此外,模拟器能够准确地再现问题场景的所有因素,从而允许开发人员调试和测试新的补丁。
今天的自动驾驶系统在越来越多的模块中使用深度神经网络(DNN)来帮助提高性能。训练DNN模型需要大量的标记数据。传统的自动驾驶数据集,如KITTI[3]和Cityscapes[4],没有足够的数据供DNN处理复杂的场景。尽管最近学术界[5]和自主驾驶公司[6]、[7]、[8]发布了一些大型数据集,但这些从现实世界中收集的数据集通常是手动(通常在一些自动化工具的帮助下)标记的,这是缓慢、昂贵和容易出错的。对于真值类型,如像素分割或光流,手动标记数据非常困难或不可能。在云平台的帮助下,模拟器可以轻松地生成更大数量级的精确标记数据集。
本文介绍了LGSVL模拟器。核心仿真引擎使用Unity[9],是开源的,源代码可以在GitHub上免费获得。模拟器支持ROS、ROS2和Cyber RT,使其可以与Autoware和Baidu Apollo一起使用。提供地图工具来导入和导出用于自动驾驶的高清地图,格式包括Lanelet2[10]、OpenDRIVE和Apollo HD Map。图1展示了来自LGSVL模拟器的一些渲染示例。
图1 LGSVL的渲染示例
本文的其余部分结构如下:第二节回顾了以往的相关工作,第三节对LGSVL模拟器进行了详细的概述,第四节列举了该模拟器的应用示例,第五节总结了本文的工作方向。
2 相关工作
仿真在汽车工业中得到了广泛的应用,尤其是在汽车动力学方面。一些著名的例子有:CarMaker[11]、CarSim[12]和ADAMS[13]。自动驾驶不仅仅需要车辆动力学,还必须考虑复杂的环境设置、不同的传感器布置和配置以及模拟车辆和行人的交通等因素。早期的一些模拟器[14]、[15]在虚拟环境中运行自动驾驶车辆,但缺乏一些重要元素,例如支持不同的传感器和行人模拟。
Gazebo[16]是机器人学和相关研究领域中最流行的仿真平台之一。它的模块化设计允许不同的传感器模型和物理引擎接入模拟器。但是用Gazebo来创造大型复杂的环境是很困难的,而且它难以达到现代游戏引擎(如Unreal[17]和Unity)的渲染效果。
还有一些其他流行的用于自动驾驶的开源模拟器,比如AirSim[18]、CARLA[19]和Deepdrive[20]。这些仿真器通常作为研究平台创建,以支持强化学习或机器学习的合成数据生成,通常需要大量额外的努力来集成用户的自动驾驶系统和通讯模块。
还有一些商用汽车模拟器,包括ANSYS[21]、dSPACE[22]、PreScan[23]、rFpro[24]、Cognata[25]、metamoto[26]和NVIDIA’s Drive Constellation [27]。然而,由于这些模拟器不是开源的,用户很难定制以满足他们自己的特定需求或研究目标。
如今,与驾驶相关的商业视频游戏提供了逼真的环境。研究人员使用诸如侠盗猎车手V这样的游戏来生成合成数据集[28]、[29]、[30]。然而,这通常需要一些黑客攻击才能访问游戏中的资源,并可能违反用户许可协议。此外,也很难支持摄像头以外的传感器,并且确定地控制车辆以及行人和交通等非玩家角色。
3 LGSVL模拟器概述
图2说明了由LGSVL模拟器实现的自动驾驶驾驶仿真工作流程。每个组件的详细信息将在本节下面进行解释。
图2 LGSVL的工作流程
- 用户的自动驾驶系统
用户的自动驾驶系统是用户希望通过仿真开发、测试和验证的系统。LGSVL Simulator目前提供与开源平台Apololl、Autoware.AI和Autoware.Auto5的现成参考集成。
用户自动驾驶系统通过通信接口连接到LGSVL。百度的Apollo平台使用了一个名为Cyber RT的框架,它为模拟器提供了一个定制的网桥。Autoware.AI和Autoware.Auto,运行在ROS和ROS2上,可以通过标准的开源ROS和ROS2桥连接到LGSVL。图3显示了Autoware、Apollo和LGSVL一起运行。
图3 Autoware (上)和Apollo (下) 与LGSVL一起运行
B. 仿真引擎
LGSVL利用Unity的游戏引擎进行模拟,并利用Unity的最新技术,如高清渲染管道(HDRP),以模拟出接近真实世界的虚拟环境。仿真引擎的功能可以分为:环境仿真、传感器仿真、车辆动力学与控制仿真。图4表示了仿真引擎和自动驾驶系统之间的关系。
图4 自主驾驶系统的高层次仿真体系结构
环境模拟包括交通仿真和物理环境模拟,如天气和时间。这些方面是测试场景模拟的重要组成部分。环境模拟的所有方面都可以通过Python API进行控制。LGSVL模的仿真引擎是作为一个开源项目开发的。源代码在GitHub上公开,可执行文件可以免费下载和使用。
C. 传感器和车辆模型
LGSVL的ego车辆传感器配置是完全可定制的。例如,每个激光雷达传感器的光束计数是可配置的。模拟器有一组默认的传感器可供选择,目前包括摄像头、激光雷达、毫米波雷达、GPS和IMU以及真值传感器。用户还可以构建自己的自定义传感器,并将其作为传感器插件添加到模拟器中。图5显示了LGSVL中的一些传感器:左栏显示了一些物理传感器,包括鱼眼摄像头传感器、激光雷达传感器和雷达传感器;右栏显示了一些真值传感器,包括语义分割传感器、深度传感器和3D bounding box传感器。
图5 LGSVL传感器。左:鱼眼摄像头、激光雷达和雷达;右:语义分割、深度和3D bounding box
除了默认的参考传感器外,LGSVL还支持用于自动驾驶系统的真实世界传感器模型。这些传感器插件的参数与现实世界中的同类产品(如Velodyne VLP-16激光雷达)相匹配,并以与真实传感器相同的格式生成点云。此外,用户可以创建自己的传感器插件来实现新的变体,甚至是LGSVL默认不支持的新类型的传感器。
LGSVL为ego汽车提供了一个基本的车辆动力学模型。另一方面,可以通过第三方的接口,将车辆动力学(FMI)的外部接口加载到另一个仿真系统中(可将仿真程序与仿真程序进行交互)。因此,用户可以将LGSVL与第三方车辆动力学仿真工具耦合,以充分利用这两个系统。
D. 3D环境和高精地图
虚拟环境是自动驾驶仿真系统的重要组成部分,它可以为自动驾驶系统提供多种输入。作为所有传感器的输入源,环境影响着自动驾驶系统的感知、预测和跟踪模块。环境影响车辆动力学,这是车辆控制模块的关键因素。它还通过改变高精地图来影响定位和规划模块,这取决于实际的3D环境。最后,三维环境是环境模拟的基础,包括天气、时间和动态对象。
我们也可以从记录的数据(图像、点云等)创建真实场景的数字孪生体来复制和模拟真实世界。图6显示了我们为加利福尼亚州森尼维尔的Borregas大道创建的数字孪生仿真环境。此外,我们还与北加州、内华达州和犹他州合作,为GoMentum站的一部分制作了一个数字孪生模型[32]。GoMentum是一个自动驾驶测试场地,位于加利福尼亚州康科德,拥有19英里的道路,48个十字路口,8个不同的测试区,占地2100英亩。对于GoMentum,我们在真实场地和虚拟场地都进行了测试。
图6 Borregas大道的数字孪生
LGSVL支持创建、编辑和导出现有3D环境的高清地图。此功能允许用户在三维环境中创建和编辑自定义高清地图注释。如图7所示,LGSVL的高清地图注释具有非常丰富的信息,如车道、车道边界线、交通信号、交通标志、行人行走路线等。在图形的右侧,用户可以通过在“创建模式”下选择相应的选项来进行不同的注释。
图7 LGSVL的高清地图示例和注释工具
高精地图注释可以导出为以下几种格式之一:Apollo 5.0高清地图、Autoware Vector map、Lanelet2和OpenDrive 1.4,因此用户可以将地图文件用于自己的自动驾驶系统。另一方面,如果用户拥有支持格式的真实世界高清地图,他/她可以将地图导入到LGSVL的3D环境中。目前,支持导入的高清地图格式有Apollo 5.0、Lanelet2和OpenDrive 1.4。由于能够导入和导出地图注释,用户可以导入其他地方的高清地图,编辑注释,然后再次导出,以确保LGSVL中使用的高清地图与用户自动驾驶系统使用的地图一致。
E. 测试场景
测试场景包括模拟一个环境和状况,在这种环境和状况下,可以放置一个自动驾驶系统来验证正确和预期的行为。它包含了许多变量,例如一天中的时间、天气、路况以及移动物体(如汽车、行人等)的分布和移动。LGSVL提供了Python API,使用户能够与虚拟环境进行交互。用户可以编写脚本来为他们的需求创建场景——生成和控制非玩家角色车辆和行人,并设置环境参数。
4 应用实例
LGSVL支持自动驾驶的各种测试应用。本节列出了一些实例。由于LGSVL的生态系统是一个开放的环境,我们相信用户将把这个范围扩展到更多不同的领域。
- SIL和hil测试
LGSVL支持自动驾驶系统的软件在环(SIL)和硬件在环(HIL)测试。对于SIL测试,LGSVL为不同的传感器生成数据,例如摄像头传感器的图像和激光雷达传感器的点云数据,以及由自动驾驶系统的感知和定位模块使用的GPS和IMU数据。这样就可以对用户的自动驾驶系统进行端到端的测试。此外,LGSVL还为其他自动驾驶系统模块生成输入,以启用单模块(单元)测试。例如,可以生成三维边界框来模拟感知模块的输出作为规划模块的输入,因此用户可以绕过感知模块(即假设完美感知)来测试规划模块。
LGSVL支持一组底盘命令,因此运行LGSVL模拟器的机器可以与运行自动驾驶系统的另一台机器通信,后者可以使用这些底盘命令控制模拟的ego车辆。这使得HIL测试成为可能,自动驾驶系统无法区分来自真实汽车的输入和模拟数据,并且可以向LGSVL发送控制命令,其方式与发送给真实汽车的方式相同。
为了验证我们模拟的有效性,我们与加州大学伯克利分校合作,在GoMentum站的数字孪生模型[32]中测试了Scenic[33]生成的数千个场景,并选择了几个具有代表性的场景在真实的GoMentum站进行测试。更多的细节,请参见[34]。
B. 机器学习与合成数据生成
LGSV提供了一个易于使用的Python API,可以收集和存储摄像头图像和激光雷达数据以及各种真值信息——遮挡、截断、2D边界框、3D边界框、语义和实例分割等。用户可以编写Python脚本来配置传感器的内部和外部参数,以及以自己的格式生成标签数据,用于感知训练。GitHub上提供了生成KITTI格式数据的示例Python脚本。
强化学习是自动驾驶和机器人技术研究的一个活跃领域。在强化学习中,一个agent在一个基于策略的环境中采取行动,通常以DNN来实现,并从环境中获得一个作为反馈的奖励,该环境反过来又用来修改策略。这个过程通常需要在大量的事件中重复,然后才能获得最佳解决方案。LGSVL通过Python API与OpenAI Gym[35]提供现成可用的集成,使LGSVL成为一个可用于OpenAI Gym强化学习的环境。
C. V2X系统
除了通过配备的传感器感知世界,自动驾驶汽车还可以从V2X(vehicle to everything)通信中获益,例如通过V2V(vehicle to vehicle)获取其他车辆的信息,并通过V2I(vehicle to infrastructure)获取更多的环境信息。在现实世界中测试V2X比测试一辆独立的汽车更困难,因为它需要其他车辆和基础设施的支持。研究人员通常使用模拟器来测试和验证V2X算法[36]。LGSVL支持创建真实或虚拟传感器插件,使用户能够创建特殊的V2X传感器,以从其他车辆(V2V)、行人(V2P)或周围基础设施(V2I)获取信息。因此,LGSVL可以用来测试V2X系统,也可以生成用于训练的合成数据。
D. 智慧城市
现代智慧城市系统利用路边传感器监测交通流量。研究结果可用于控制交通信号灯,使交通更加顺畅。这种系统需要不同的指标来评估交通状况。例如,我们想设定一个“停车”次数的指标,当车辆通过某个路口,“停车”被定义为当车速在指定时间内低于某个值,我们需要对“停车次数”进行计数。这些指标很难被人工收集。LGSVL也适用于这种应用。使用我们的传感器插件模型,用户可以定义一种新型的传感器,计算汽车的“停车”次数,因为我们有准确的速度和位置信息。我们的可控插件允许用户自定义红绿灯和其他特殊的交通标志,这些可以通过Python API进行控制。
5 小结
我们介绍了LGSVL,一个基于Unity的高保真度自动驾驶模拟器和相关系统。它已经可以与Autoware和Apollo自动驾驶系统集成在一起进行端到端测试,并且可以很容易地扩展到其他类似的系统。文中给出了几个应用实例来展示LGSVL的功能。
仿真引擎是开源的,整个生态系统都是开放的,这样用户就可以利用LGSVL进行不同的应用,并为生态系统添加自己的贡献。模拟器将不断增强,以满足用户群体的新需求。