主要内容

使用虚幻引擎模拟环境设计车道标记检测器

本示例演示如何使用3D模拟环境记录合成传感器数据,开发车道标记检测系统,并在不同场景下测试该系统。此模拟环境使用Epic Games®中的Unreal Engine®渲染。

概述

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

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

这个例子采取了以下步骤,让你熟悉设计视觉感知算法的方法:

  1. 向您介绍Simulink®中的三维模拟环境金宝app

  2. 引导您通过设置虚拟车辆和摄像头传感器

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

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

3D仿真环境简介

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

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

  • 在场景中放置和移动车辆

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

  • 根据车辆周围的环境模拟传感器数据

可以打开金宝appSimulink模块进行3D仿真驱动Sim3D图书馆。

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

在3D模拟中创建一个简单的直路场景

首先定义一个简单的场景,其中包括一个笔直的高速公路上的车道标记检测算法。

open_system (“straightRoadSim3D”);

模拟3D场景配置在这种情况下,Block让你选择一个预定义的场景直道.当模型被调用时,它会启动虚幻引擎®。的具有地面跟随的三维车辆仿真block在游戏引擎中创建一个虚拟车辆,并让Simulink通过供应来控制其位置金宝appXY以米为单位,以及偏航在度。XY,偏航在一个世界坐标系中指定,在场景中间有一个原点。在这种情况下,由于道路是直的,因此道路中的偏移量为0.75米Y-方向和一系列递增X值使车辆向前移动。本示例后面的部分将展示如何定义更复杂的操作而不求助于XY,偏航基于尝试和错误的设置。

模型还包含一个模拟3 d相机Block从虚拟汽车后视镜上的虚拟摄像头中提取视频帧。摄像机参数可以模拟针孔摄像机模型所描述的摄像机的典型参数,包括焦距、摄像机光学中心、径向畸变和输出图像大小。当模型被调用时,结果场景从一个自动跟踪车辆的摄像机的角度显示出来。

sim卡(“straightRoadSim3D”);

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

视觉感知通常是复杂的,无论是涉及经典的计算机视觉还是深度学习。开发这样一个系统通常需要快速迭代和增量优化。虽然Simulink是系统级工程和闭环仿真的强大环境,但基于感知的算法通常是在文本编程语言中开发的,如MATLAB或C++。此外,需要在Simulink和Unreal Engine®之间建立通信的模型的启动时间非常重要。因此,可以方便地将虚拟摄像机生成的图像数据记录到视频中,并在MATLA金宝appB中开发感知算法。以下型号将相机记录到磁盘上的MP4文件中。

open_system (“straightRoadVideoRecording”);

该视频是使用多媒体文件块。由此产生的straightRoad.mp4文件现在可以用来开发感知模块,而不会招致3D仿真环境的启动时间惩罚。

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

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

helperStraightRoadMLTest

一旦算法开始运行良好,您可以将其放回如下所示的模型中。你可以尝试改变汽车的轨迹,就像为虚拟发动机模拟选择航路点实例通过这种方式,您可以寻找移动汽车的方法,从而导致算法失败。整个过程是迭代的。

open_system (“straightRoadMonoCamera”);

导航通过一个更复杂的场景,以改进感知算法

在开发算法时,您可以提高场景的复杂度,以继续使系统适应类似于现实的条件。在本节中,将场景切换到虚拟城市,它提供具有弯曲车道、无车道标记或合并车道标记的道路延伸。

在开始之前,您需要定义一个通过虚拟Mcity的适当延伸的轨迹,该虚拟Mcity是属于密歇根大学的实际试验场的代表。来看看如何获取一系列的细节XY,偏航适用于在复杂环境中移动汽车的值,参见为虚拟发动机模拟选择航路点实例为方便起见,以下总结了关键步骤。

%基于场景名称提取场景图像位置sceneName =“VirtualMCity”; [scenemage,sceneRef]=helpergetscenemage(sceneName);
%交互式选择路径点通过McityhelperSelectSceneWaypoints (sceneImage sceneRef)
%将稀疏的航路点转换为车辆可以看到的更密集的轨迹%按照numPoses = size(refPoses, 1);refDirections = 1 (numPoses, 1);%单向运动numSmoothPoses = 20 * numPoses;%增加这个值可以增加返回姿势的数量[newRefPoses,~,CumLength]=平滑路径样条线(refPoses,refDirections,NumMoothPoses);
通过生成时间矢量来创建一个恒定的速度剖面%与累积路径长度成正比simStopTime=10;时间向量=标准化(长度,“范围”[0, simStopTime]);
refPosesX = [timeVector, newRefPoses(:,1)];refPosesY = [timeVector, newrefpose(:,2)]; / /重新开始refPosesYaw = [timeVector, newRefPoses(:,3)];

加载使用上面所示的方法创建的预先配置的车辆姿态。

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

有了预定义的轨迹,您现在可以在复杂的虚拟环境中虚拟驾驶车辆穿越更长的距离。

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

很多时候,结果并不理想。例如,注意障碍物与车道标记混淆的地方,以及选择分析的兴趣区域是否太窄而不能选择左车道。

但是,探测器在场景的其他区域表现良好。

主要的一点是,虚拟环境可以让你对设计进行压力测试,并帮助你了解在真实道路上可能遇到的情况。在虚拟环境中运行算法也可以节省时间。如果您的设计不能在虚拟环境中成功运行,那么在道路上的真实车辆上运行它就没有意义了,因为后者要花费更多的时间和成本。

闭环测试

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

bdclose所有

另请参阅

阻碍

相关的话题