主要内容

利用虚幻引擎仿真环境设计车道标志检测器

这个例子展示了如何使用3D模拟环境来记录合成传感器数据,开发一个车道标志检测系统,并在不同的场景下测试该系统。这个模拟环境是使用Epic Games®的虚幻引擎®渲染的。

概述

开发一个可靠的感知系统是非常具有挑战性的。视觉感知系统必须在各种条件下都是可靠的,特别是当它被用于控制车辆的全自动系统时。本实例以车道检测算法为例,说明了利用三维仿真环境加强算法设计的过程。该示例的主要重点是有效地使用3D模拟工具,而不是算法本身。因此,此示例重用了来自单目相机的视觉感知的例子。

使用单目摄像机的视觉感知示例使用录制的视频数据开发一个视觉感知系统,该系统包含车道标记检测和分类、车辆检测和距离估计。使用录制的视频是一个很好的开始,但它还不足以探索在虚拟环境中更容易合成的许多其他案例。更复杂的场景可能包括复杂的变道机动、因其他车辆而阻塞车道标志等等。最重要的是,闭环仿真涉及到对车辆的感知和控制,这两者都需要虚拟环境或真实车辆。此外,使用真实车辆进行预先测试可能非常昂贵,因此使用3D模拟环境非常有吸引力。

本示例通过以下步骤使您熟悉设计视觉感知算法的方法:

  1. 向您介绍Simulink®中的3D仿真环境

  2. 指导您通过虚拟车辆和相机传感器的设置

  3. 演示如何有效地为视觉感知算法设置调试环境

  4. 介绍了如何增加场景复杂度,为闭环仿真做准备

3D仿真环境简介

自动驾驶工具箱™集成了Simulink中的3D仿真环境。3D模拟环境使用Epic Games的虚幻引擎。与3D仿真环境相关的Simulink块提供了以下功能:

  • 在3D可视化引擎中选择不同的场景

  • 在现场放置和移动车辆

  • 在车辆上安装和配置传感器

  • 基于车辆周围环境模拟传感器数据

可以通过打开来访问用于3D仿真的Simulink块drivingsim3d图书馆。

在本例中,为了帮助设计视觉感知算法,您使用了定义场景的块、控制虚拟车辆的块和定义虚拟相机的块。该示例着重于使用单目摄像机系统检测车道标志。

在3D仿真中创建一个简单的直路场景

首先定义一个简单的场景,该场景涉及一条笔直的高速公路,在该场景上执行车道标记检测算法。

open_system (“straightRoadSim3D”);

仿真3D场景配置Block允许您选择一个预定义的场景,在本例中直路.当模型被调用时,它启动虚幻引擎®。的模拟三维车辆与地面跟踪block在游戏引擎中创建一个虚拟车辆,并让Simulink通过供应控制其位置X而且Y米,偏航在度。XY,偏航是根据世界坐标系指定的,在场景中间有一个原点。在这种情况下,由于道路是直的,偏移0.75米在Y-方向和一系列递增X价值观推动汽车前进。本例后面的部分将展示如何定义更复杂的机动,而不求助于XY,偏航基于试错的设置。

该模型还包含一个模拟3 d相机块,它从虚拟车辆内附在后视镜上的虚拟摄像机中提取视频帧。通过相机参数,可以模拟针孔相机模型描述的典型相机参数,包括焦距、相机光学中心、径向畸变和输出图像大小。当模型被调用时,生成的场景将从自动跟随车辆的摄像机的视角显示出来。

sim卡(“straightRoadSim3D”);

视觉感知模块的设计与调试

视觉感知通常是复杂的,无论是经典的计算机视觉还是深度学习。开发这样的系统通常需要快速迭代和增量细化。尽管Simulink是系统级工程和闭环模拟的强大环境,但基于感知的算法通常是用MATLAB或c++等文本编程语言开发的。此外,需要在Simulink和虚幻引擎®之间建立通信的模型的启动时间是非常重要的。因此,可以方便地将虚拟摄像机产生的图像数据记录成视频,并在MATLAB中开发感知算法。以下型号将相机记录到磁盘上的MP4文件中。

open_system (“straightRoadVideoRecording”);

视频是用多媒体文件块。由此产生的straightRoad.mp4文件现在可以用来开发感知模块,而不需要承担3D模拟环境的启动时间损失。

要设计车道标志检测器,您使用来自单目相机的视觉感知的例子。然而,如果你只是移植现有的helperMonoSensor.m例程从那个例子,即使是最简单的直路场景也不会产生好的结果。很快,您就可以看到虚拟环境是多么强大。您可以为您的车辆选择任何轨迹或环境,从而让您在将感知模块放在实际车辆上之前探索许多假设场景。

为了帮助设计算法,请使用所提供的HelperLaneDetectorWrapper.m系统对象。这个系统对象在MATLAB中工作,当放在MATLAB系统块(模型)在仿真软件。下面的脚本,helperStraightRoadMLTest,从MATLAB命令提示符调用包装器。这种方法允许快速迭代设计,而无需连续调用3D模拟环境。

helperStraightRoadMLTest

一旦算法开始工作良好,您可以将其放入如下所示的模型中。您可以尝试改变汽车的轨迹,如所示选择路径点虚幻引擎模拟的例子。这样一来,你就可以想办法移动汽车,让算法失效。整个过程应该是迭代的。

open_system (“straightRoadMonoCamera”);

通过更复杂的场景来改进感知算法

在开发您的算法时,您可以增加场景复杂性的级别,以继续使您的系统适应类似于现实的条件。在本节中,将场景切换为虚拟Mcity这为道路提供了弯曲车道、没有车道标志或合并车道标志。

在开始之前,您需要定义通过虚拟Mcity的适当延伸的轨迹,这是属于密歇根大学的实际测试场地的代表。查看详细信息,如何获取一系列XY,偏航适合在复杂环境中移动汽车的值,请参阅选择路径点虚幻引擎模拟的例子。为了方便您,下面总结了关键步骤。

根据场景名称提取场景图像位置。sceneName =“VirtualMCity”;[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
通过Mcity交互选择路径点。helperSelectSceneWaypoints (sceneImage sceneRef)
将稀疏的路径点转换成汽车能达到的更密集的轨迹%按照numpose = size(refpose, 1);refDirections = 1 (numPoses, 1);%单向运动numsmoothpose = 20 * numpose;增加这个可以增加返回的姿势的数量[newrefposed,~, cumlength] = smoothPathSpline(refposed, refDirections, numsmoothposed);
通过生成一个时间矢量来创建一个匀速剖面。%与累积路径长度成正比simStopTime = 10;timeVector =正常化(cumLengths,“范围”[0, simStopTime]);
refPosesX = [timeVector, newrefpose (:,1)];refPosesY = [timeVector, newrefpose (:,2)];refPosesYaw = [timeVector, newrefpose (:,3)];

加载使用上述方法创建的预配置车辆姿势。

提出了=负载(“mcityPoses”);

有了预定义的轨迹,您现在可以虚拟驾驶车辆通过一个复杂的虚拟环境的更长的延伸。

open_system (“mcityMonoCamera”);sim卡(“mcityMonoCamera”);清晰的提出了

很多时候,结果并不理想。例如,注意障碍物与车道标记混淆的地方,以及用于分析的感兴趣区域太窄而无法识别左车道的时候。

然而,检测器在场景的其他区域表现良好。

主要的一点是,虚拟环境可以让你对你的设计进行压力测试,并帮助你意识到在真实的道路上可能会遇到什么样的情况。在虚拟环境中运行算法也可以节省时间。如果您的设计不能在虚拟环境中成功运行,那么就没有必要在道路上的真实车辆中运行它,这要耗时和昂贵得多。

闭环测试

3D仿真环境最强大的功能之一是,它可以促进复杂系统的闭环测试。例如,车道保持辅助包括对车辆的感知和控制。一旦感知系统在非常复杂的场景中得到完善并表现良好,它就可以用于驱动控制系统,从而真正控制汽车的方向。在这种情况下,车辆不用手动设置轨迹,而是使用感知系统来驱动自己。显示整个过程超出了本示例的范围。然而,这里描述的步骤应该为您提供如何设计和调试感知系统的思路,以便稍后在更复杂的闭环模拟中使用它。

bdclose所有

另请参阅

相关的话题

Baidu
map