英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料
为自主驾驶和主动安全的仿真-辅助软件的开发创造3D虚拟驾驶环境
2017-01-0107 2017.3.28出版
阿尔温德·亚拉曼
迈斯沃克
阿什利·米克和伊桑·格罗斯
福特汽车公司
引文:阿尔温德·亚拉曼、阿什利·米克和伊桑·格罗斯,“为自主驾驶和主动安全的仿真-辅助软件的开发创造3D虚拟驾驶环境”SAE科技报 2017-01-0107, 2017, 工业部:10.4271/2017-01-0107.
摘要
在现实世界再现测试自主驾驶的交通场景需要大量的时间,资源和开支,并且如果有危险场景测试可以提供一个安全风险。用一个3D虚拟环境使许多这样的交通场景在桌面或集群上测试显著地减少了大量的道路测试需求。为了促进第四级别自动驾驶感知和控制算法的发展,一个介于Matlab、Simulink、虚幻引擎4的共享内存接口可以把信息(如车辆控制信号)传回虚拟环境。这个共享内存接口可传递任意数值数据、真彩色图像数据和仿真过的激光雷达传感器点云数据。这个虚幻引擎的接口由一个包含必要的读写功能和一个Matlabbeta;工具箱的插件组成,来自同一个共享内存位置的阅读和写作能力在虚幻引擎,Matlab,Simulink由详细说明。激光雷达传感器模型通过VelodyneHLD-32E(32光束)传感器模拟的光斑模式产生的点云进行测试,并且说明了利用显卡在足够的帧频下进行实时运算。
介绍
随着汽车工业走向自主化,对基于仿真的发展和验证的需求增加,同时对仿真的更多细节和容量的需求也逐渐增加。全自主驾驶需要信任安装在车辆中大规模数量的系统能安全地处理大范围内的场景,这样的信任需要大量的试验才能完成。单独使用道路自主系统的验证评估要近似1亿公里和几亿欧元。这些评估连同测试具体场景的危险一起进一步推动了仿真的使用。
系统仿真也独立运行于车辆动力学之外,需要回路中带感知和控制算法的传感器模型去测试一辆自主驾驶汽车或驾驶员辅助系统的所有层面。这包括RGB级别合成照相机数据、合成激光雷达点云和合成雷达数据,尽管这个工作集中在前两个。用地面真实信息注释这个数据的能力在大规模时也很必要,不仅使用于感知系统性能的评估,而且也使用于机器学习系统中。
方法
本文主要集中于在一个商用游戏引擎和迈斯沃克工具链之内存在的一个功能集成,在两个工具之间使用一个共享内存接口实现联合仿真。它在一个3D驾驶环境中给车辆感知系统的仿真建立了一个完整的工作流程。这些功能的应用同样可
以扩展到仿真和控制系统的测试中,因为共享内存上信息的交换在虚拟环境和被测试的算法两个方向上是等可能的。
图1 模拟器装置框图
软件工具的使用
本文集中于利用虚幻引擎4创造3D虚拟驾驶环境,并且把迈斯沃克工具链作为数据处理的环境。虚幻引擎是一种自由的、开放的资源游戏引擎。像这样,在这个工具内建立新的功能来支持数据从matlab输出到共享内存和获得关于3D环境的数据来生成所需的合成相机和激光雷达数据。该游戏引擎通过一个拖放界面提供了一种创造3D环境和动态场景的有效方法;它提供了c 脚本和视觉脚本语言——蓝图二者择一的选择。在这种方法中创造的环境可以实现一个逼真的、细致的外观和得到合成相机和激光雷达数据生成的几何特征。同时,迈斯沃克工具链可以用matlab和simulink处理这些数据及感知原型和控制算法。这包括计算机视觉工具箱、图像处理和激光雷达点云处理,因此在两个软件工具之间实现一个接口和允许整个管路被检测包括这些功能。
共享内存接口
为了交换matlab和虚幻引擎之间的数字数据,一个共享内存接口产生了。共享内存使得在单一机器中运行的多重过程同时访问内存中相同的位置。为了访问共享内存使用字符串标识符,一个为虚幻引擎和matlab相应的读/写功能的函数库产生了。公用程式由一个虚幻引擎插件和给终端用户提供一个简化接口使其在两个过程中间共享任意数据的Matlab系统对象的形式提供。Matlab系统对象的使用允许用户在Matlab和Simulation中访问共享内存时提供一个通用工具。使用这种共享内存接口,使用者可以在虚幻引擎中实现虚拟仿真以发送数字数据到Matlab上,等待Matlab据此执行算法,并最终在模拟器内读取数据,以便动态系统仿真和可视化的双向通信。
图2.在虚幻引擎到共享内存内部写入车辆位置和速度
图3.在Matlab中显现传输自虚拟仿真环境的车辆速度和位置
备用通信方案探索
使用共享内存作为通信接口的选择需要有效地交换大量的数据,如来自虚拟相机的高清图像和来自虚幻引擎中虚拟激光雷达传感器的距离测量。用设计迭代法,另外两种受欢迎的数据交换法UDP和TCP/IP也被开发了。但是,这两种方法和使用共享内存比起来慢了许多。共享内存接口是唯一的能足够快地促进数据转换率的接口,当仍然能在Matlab中处理相机和激光雷达数据时,该数据转换率允许虚拟工程以30或快于30帧的速度运行。注意到在Matlab和虚幻引擎工程不在同一台机器上运行过程等特例下,TCP/IP和UDP通信仍然适用。
虚拟摄像机设置
基于虚幻引擎的虚拟模拟器平台提供了逼真的图像,可以用来促进MATLAB中原型的计算机视觉算法;并且从影像中提取如车辆、行人、车道等有用的信息。为了方便工作,我们用一个二维场景捕捉摄像头在虚幻引擎中建立了一个虚拟相机传感器。二维场景捕捉器可用于虚幻引擎,并且可以安置在虚拟驾驶环境中的任何地方。由这个传感器器呈现的图像通过共享内存接口传输给Matlab。水平视场角和图像大小、分辨率在二维场景捕捉组件中是可调的。此外,为了模仿在实际相机传感器中经常出现的镜头畸变效应,给相机添加任意的后期处理效果也是可行的。图像干扰也可以在图像传输后引入到Matlab中。为了方便Matlab中的这些图像的操作,呈现的图像是颠倒的,图像的格式也变了;图像的内存布局以列为主,各RGB颜色通道的平面图像互不影响。
图4.共享内存接口发送影像到Matlab的示例,沿着地面实况信息确定目标对象的边界
虚拟激光雷达数据生成
对自动驾驶车辆导航来说,激光雷达是一种提供精确测量距离和物体反射率的重要传感器。一个在三维环境中把距离和物体反射率传输给Matlab的虚拟激光雷达传感器模型是作为套件包的一部分提供的。下面我们描述传感器模型的细节。
虚拟激光雷达距离测量建模
为了给传感器到场景中物体距离测量建模,我们在虚幻引擎中使用了一个二维场景捕捉相机的渲染管线输出一个纹理图像,该图像的每个像素位置包含从传感器到可见表面的距离。然后在相符与激光雷达扫描模式的预定位置对深度图像纹理采样。这种扫描模式是固定的,并且可以在初始化一次使用水平和垂直角分辨率时被确定,该角分辨率是能在模型中调整的传感器参数的一部分。实际上,我们发现一个二维场景捕捉相机仅能够在120°视野范围内可靠地渲染场景。为了模拟一个覆盖全360°视野激光雷达传感器,我们设立了3个二维场景捕捉相机,并且把来自每个相机的深度图像相结合。这些组件被汇集到一个作为插件一部分而提供的单一的360°激光雷达执行器中。
图5.图片显示了激光雷达传感器模型的三维扫描模式和为了模拟由传感器跟踪的光束模式我们在图像像素位置采的一个深度图像。这个图对应着水平分辨率为0.16°,垂直分辨率为1.33°,垂直视场为41.3°和水平视场为120°的传感器
激光雷达传感器表面反射率建模
每束光的反射率对建模都很重要,因为它可能应用于自动驾驶车辆软件上。例如,表面反射率可以被用于区分车道标线和沥青,因为在激光光谱中车道标线往往具有比沥青更高的反射率。然而,反射率也受其他因素的影响,如从相关表面反射的光束方向,表面材料的性能和激光雷达光束传播距离。
我们用冯氏光照实验模型来模拟一激光光束的表面反射率作为一个表面漫反射和镜面反射之和。激光光谱和可见光电磁波谱两者之间的关键区别是每个材料的漫反射和镜面反射率需要被明确为激光雷达波长材料特性。反射率由漫反射和镜面反射之和给出。我们的模型假设发射和接收激光雷达传感器元素在虚拟激光雷
达传感器位置中同位,并且在激光光谱中没有环境能量。
式中,
R漫=漫反射
R镜=镜面反射
K漫=反射表面漫反射率
K镜=反射表面镜面反射率
N^=在给定的像素位置反射表面的标准平面法向向量
alpha;=反射面的镜面指数
P^=反射表面的标准位置矢量
C^=激光雷达传感器标定位置矢量
R总=表面反射率
由于时间限制,我们不能发现如建筑物,植物,沥青等典型材料的反射系数和对这些材料从真实的传感器观察到的汽车。我们在可见光谱中使用材料颜色的灰度值逼近激光光谱中的漫反射系数。假设激光光谱中材料的镜面反射系数和可见光谱中的一样。随着增加到表面的距离,我们的模型也不会导致反射率减小,因为通过媒介传播时有能量损失。然而,一旦反射率值和实际激光雷达传感器相比更精确,这个信息就可以被并入到模型中。而且,要注意一些真实世界的激光雷达传感器会绕它们的垂直轴线旋转以获得一个360°的水平视野,而我们的模型在虚拟环境中不需要任何的物理旋转便可即时地获得360°的视野。
激光雷达传感器的数学模型早就在Matlab中设立了原型。但是,为了实时地运行虚拟传感器,所有的计算稍后会被重新设计运行在作为虚幻引擎插件的一部分的GPU上。获得的距离和反射数据通过上述描述的共享内存接口传输到Matlab中。
实际上,我们发现在笛卡尔三维坐标系中用浮点值传输距离增加了需要通过共享内存接口交换的数据量,因此阻碍了模拟速度。为了避免这个问题,我们将距离和反射率输出进行数字转换,并在传输到Matlab中之前把它们编码成一个32进制数。在Matlab中,这些值会被解码并可直接用于球坐标中或转换为笛卡尔坐标(通过乘以每个光束的距离和沿波束方向对应的单位矢量)中的一个点云。
激光雷达传感器模型的另一种方法
探索的另外一种方法是用光线追迹模拟激光雷达传感器,光线追迹是一种已提供为虚幻引擎编程环境一部分的方法。我们发现用这种方法实现大量激光雷达光束的光线追迹从计算上讲是很昂贵的。此外,可被程序员利用的光线追迹能力只运行在CPU上,这会导致模拟器运行缓慢(在有一个 NVIDIAGTX 980显卡的联想S20工作平台上以1-2帧速度运行)。因为在虚拟驾驶模拟器中和其他执行器实时交流是很重要的,这种方法不适合我们的应用。我们没有追求使用光线追迹算法的多线程工具,因为在我们文章中描述的另一种方法满足了这些需求。
用自动驾驶汽车软件共享激光雷达传感器数据
福特的MathWorks工具链中的应用软件支持自动驾驶软件的验证在Ubuntu Linux中运行。多个方法可用于将虚拟激光雷达传感器数据融入到自动驾驶汽车软件中。在测试中,我们探索了两种方法:通过UDP数据包传输数据和直接的二进制日志构建。以下是这两种方法的概述和分析。
图6.图中显示了3D场景和相应的激光雷达在Matlan中输出的点云图像。这个示例展示了一个360°的视野。垂直视野和水平视野及波束间角是可以调整的参数。每个点的反射率用以反射率为零的蓝色到反射率为一的绿色的彩色地图表示。
至于概念的初步证明,我们决定使用Windows10笔记本电脑(雷蛇刀片2016)来运行虚幻引擎,MathWorks虚幻引擎插件原型和Matlab,结合Ubuntu 14.04笔记本电脑(戴尔Precision M6800)运行福特自动驾驶汽车代码。我们通过以太网连接两台电脑,配置一个Matlab脚本发送UDP数据包和配置Ubuntu笔记本监测我们通过Matlab建立的端口。一旦这个连接建立了,我们需要通过正确格式化的数据预处理从虚幻引擎共享内存接收的原始传感器数据以迎合VelodyneHDL-32E激光雷达的规格。这包括:
·创建一个正确维度和数据类型的数据结构
·将距离数据数字转换为由规格设置的最近值(在这种情况下,2mm的范围分辨率)
·设置异常数据点的默认值(负值和极值)
·通过数据连续循环使用MATLAB的UDP功能创建和发送UDP数据包
这个设置使得我们的Windows笔记本充当了激光雷达传感器,因为它是通过以太网连接的,并且提供我们Velodyne激光雷达传感器用于自动驾驶车辆导航完全相同的UDP格式。这个设置也带走了对任何后期处理代码的需要,并且我们的AV代码直接读取数据。
在同一台Linux机器上一起运行虚幻引擎模拟和自动驾驶汽车代码是可能的,在这种情形下,数据包可以以类似的方式产生,除了不需要物理的以太网连接。
图7.从虚幻引擎传输到与福特自动驾驶汽车代码共存的查看器的合成激光雷达数据
对于这个概念的证明,编码还不是用来优化速度的。数据速度平均为每秒300包。因为每个UDP包中包含了一组12个发射数据集,这相当于每秒3600套。这个数据意味着我们接收约少于1.5转每秒。我们的规格要求10转每秒,也就是说这个方法对于使用笔记本电脑的硬件来说太慢了。可以在这样的硬件上做进一步的优化达到我们每秒需要的转数,但与此同时它通过创建福特自动驾驶汽车代码可以读取的日志来实现有用的结果,显示先前模拟的一个场景。这引领了我们第二个使用案例:二进制日志建设。
对于二进制日志建设,我们用相同的方法对数据进行了预处理,就像我们为交互用例所做的那样,自动驾驶汽车代码循环在其中。唯一不同的是数据被送到一个日志上而不是直
全文共7464字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[143778],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。