charles00ok 发表于 2020-11-27 11:45

MATLAB结合Unreal Engine构建用以自动驾驶仿真测试的逼真驾驶场景

之前的文章《MATLAB/Simulink自动驾驶工具箱之Driving Scenario Designer》提到了MathWorks自己开发的场景构建工具Driving Scenario Designer主要是用作Control-in-loop应用的测试和验证,不适用于构建逼真的驾驶场景。对于Perception-in-loop的应用,需要高保真度的场景和传感器模型,需要能够合成逼真的图像和激光雷达点云数据等等。
市面上有不少能满足Perception-in-loop应用的场景软件,这些软件一般都提供了Simulink的接口,可以与Simulink进行联合仿真。这些软件的Simulink接口,多是软件公司自主开发的,所以MATLAB/Simulink更多的是作为一个兼容平台,对于场景和传感器模型这块,MathWorks的直接参与度并不高。
但其实,MathWorks对于构建高保真度的驾驶场景和传感器模型,有自己的一套解决方案:MathWorks结合游戏引擎Unreal Engine构建驾驶场景,并提供了与Unreal Engine场景交互的摄像头、激光雷达、毫米波雷达等传感器模型,去覆盖Perception-in-loop的应用。
Unreal Engine与MATLAB/Simulink
所以这篇文章,我们来聊一聊MATLAB/Simulink如何结合Unreal Engine去构建高保真度的驾驶场景。先来看一段视频,视频中将真实世界的场景和Unreal Engine构建的虚拟场景放在一起作对比。你能分辨出来哪个是真实世界,哪个是虚拟世界吗?

真实场景与虚拟场景对比
https://www.zhihu.com/video/1229758311593390080
当初在看这段视频的时候,真的是真真假假傻傻分不出来的。哪个真哪个假,下图来揭晓谜底。
左边是Unreal Engine构建的虚拟场景,右边是真实场景。
原版完整的视频如下链接。
这个其实是英伟达介绍它的硬件在环测试平台NVIDIA DRIVE Constellation的视频。DRIVE Constellation平台包含两台服务器:第一台服务器运行 DRIVE Sim 软件,以模拟自动驾驶汽车的各种传感器,从摄像头到激光雷达和普通雷达均包括在内。强大的 GPU 可生成逼真数据流,从而创建各种测试环境和场景。第二台服务器包含一台功能强大的 DRIVE AGX Pegasus AI 车载计算机,负责处理第一台服务器合成的模拟数据,基于处理结果去控制在模拟环境中行驶的虚拟车辆,从而验证相关算法。
英伟达的描述中,它的软件叫DRIVE Sim。视频中出现的场景构建软件的画面,很明显便是Unreal Engine,而且视频截图(下图)左上角就是Unreal Engine的标志。DRIVE Sim应该是基于Unreal Engine开发的。
Unreal Engine(虚幻引擎,简称Unreal),由Epic开发,是世界知名的游戏引擎之一,占有全球商用游戏引擎很高的市场份额。Unreal开发的游戏,代表作有《战争机器》系列,《质量效应》系列,《绝地求生》……作为还停留在《魂斗罗》、《超级玛丽》、《坦克大战》的原始人,其实完全不了解这些游戏……
Unreal的强大是毋庸置疑的, @王方浩 兄台的文章提到AirSim和Carla就是用Unreal渲染的。
PreScan、Carmaker、MotionDesk等软件的新版本都开始使用Unreal来渲染场景。
说了那么多,书回正传,我们还是聊回到MATLAB/Simulink和Unreal。
一、在Simulink中使用Unreal场景的三种模式
Simulink的Automated Driving Toolbox中与Unreal交互的模块主要在Simulation 3D中。
Simulink使用Unreal的场景有三种模式——Default Scenes、Unreal Executable和Unreal Editor,可以在Simulation 3D Scene Configuration模块中通过选择Scene Source来设置。
Default Scenes——直接使用MathWorks预构建的Unreal场景。
Unreal Executable——用户可以在Unreal中自行构建场景,并将构建好的场景打包成可执行文件,加载在Simulation 3D Scene Configuration模块中。仿真时无需打开Unreal Editor。
Unreal Editor——用户可以在Unreal中自行构建场景,仿真的时候需要打开Unreal Editor,实现Simulink与Unreal Editor的联合仿真,可以基于仿真结果在Unreal Editor中调整场景。
Default Scenes采用的是MathWorks预构建好的场景,Unral Executable和Unreal Editor都支持用户自定义场景。
1、基于预构建的场景
这种方式使用方便,可以让用户快速了解如何使用Simulink和Unreal进行驾驶场景模拟仿真以及仿真效果如何。MathWorks提供了多个典型的预构建场景。
值得一提的是Virtual Mcity的场景。我们之前基于这个场景搭建过一套驾驶员在环的系统。
驾驶员在环系统
驾驶效果如下视频。

Virtual Mcity的驾驶场景
https://www.zhihu.com/video/1229793015729848320
2、用户自定义场景
Unreal Executable和Unreal Editor模式可以使用自行构建的驾驶场景。具体的构建方法,参见MathWorks帮助文档:
的来说分为三步:
Install Support Package for Customizing ScenesCustomize Scenes Using Simulink and Unreal EditorPackage Custom Scenes into Executable
在构建场景之前需要先安装Unreal Engine(MATLAB R2020a对应的版本是Unreal Engine 4.23;之前的MATLAB版本对应的Unreal版本是Unreal Engine 4.19),可以通过Epic Games Launcher选择要下载的版本。
同时也要安装MATLAB的Unreal Engine插件,可以在MATLAB的add on中搜索到。
二、使用Unreal Engine搭建驾驶场景
Unreal对运行的PC是有一定要求的。
软件要求:
Windows 64-bit platformVisual Studio 2017 or newer (for customizing scenes)Microsoft DirectX — If this software is not already installed on your machine and you try to simulate in the 3D environment, Automated Driving Toolbox prompts you to install it. Once you install the software, you must restart the simulation.
最小的硬件要求:
Graphics card (GPU) — Virtual reality-ready with 8 GB of on-board RAMProcessor (CPU) — 2.60 GHzMemory (RAM) — 12 GB
从英伟达的视频中,可以一窥Unreal搭建场景的大概方法(英伟达可能做了二次开发,使用应该比原版Unreal更方便)。
视频声音有点大,公共场合打开的时候请注意调节音量。


https://www.zhihu.com/video/1229802743755812864
Unreal Engine提供了丰富的素材可用以创建逼真的驾驶场景。
下面这个Unreal基础教程相当不错。
除了自行构建场景,虚幻商城上也有一些现成的道具、素材,用户可以购买使用。
三、Simulink中针对Unreal Engine的传感器模型
以上内容,主要涉及的是驾驶场景。整个闭环中,除了驾驶场景,还需要传感器模型。MathWorks开发了针对Unreal场景的传感器模型,在Automated Driving Toolbox的Simulation 3D中。
可以直接将这些传感器模块拖拽到Simulink模型中,仿真过程中,这些传感器能输出对应的传感器信息。
一个简单的demo,以鱼眼摄像头为例,来看看这些传感器模块是怎么用的、有什么效果。
鱼眼摄像头的Image接口输出图像RGB数据,上图中Video Viewer模块将这些数据可视化,也就是显示鱼眼摄像头拍到的图像,仿真的视频如下。视频窗口中,左侧是仿真场景,右侧是装在后车上的鱼眼摄像头拍到的图像。

鱼眼摄像头模型成像视频
https://www.zhihu.com/video/1229827470427643904
鱼眼摄像头模块能输出RGB数据,而单目摄像头模块不仅能输出RGB数据,还能输出深度图和语义分割图,如下图。
毫米波雷达模块输出的是检测到的目标信息,包括位置、速度等。
激光雷达模块能输出点云数据,早在2016/2017年的时候,MathWorks就和通用合作,成功实现合成虚拟场景的Velodyne 32线激光雷达点云数据,如下图。
MathWorks也提供了合成点云数据的demo。
仿真结果,如下视频。

合成激光雷达点云数据
https://www.zhihu.com/video/1229815262633500672
四、MathWorks提供的与Unreal Engine相关的examples
其中几个比较典型的示例有:


https://www.zhihu.com/video/1229852226413211648


https://www.zhihu.com/video/1229859938391740416
页: [1]
查看完整版本: MATLAB结合Unreal Engine构建用以自动驾驶仿真测试的逼真驾驶场景