主要内容

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

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

概述

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

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

本示例采用以下步骤来熟悉设计视觉感知算法的方法:

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

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

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

  4. 介绍了如何在闭环仿真的准备过程中增加场景复杂度

三维仿真环境介绍

自动驾驶工具箱™集成了一个三维仿真环境在Simulink。金宝app3D模拟环境使用Epic Games的虚幻引擎。金宝app与3D仿真环境相关的Simulink块提供了以下能力:

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

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

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

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

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

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

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

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

open_system (“straightRoadSim3D”);

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

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

sim卡(“straightRoadSim3D”);

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

视觉感知通常是复杂的,无论是涉及经典的计算机视觉还是深度学习。开发这样的系统通常需要快速迭代和增量细化。尽管Simulin金宝appk是系统级工程和闭环仿真的强大环境,但基于感知的算法通常是用MATLAB或c++等文本编程语言开发的。此外,需要在Simulink和虚幻引擎®之间建立通信的模型的启动时间非常重要。金宝app因此,可以方便地将虚拟摄像机生成的图像数据记录为视频,并在MATLAB中开发感知算法。以下型号将相机记录到磁盘上的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”;[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
通过Mcity交互式选择路点helperSelectSceneWaypoints (sceneImage sceneRef)
将稀疏的路径点转换为汽车可以实现的更密集的轨迹%按照numpose = size(refpose, 1);refDirections = ones(numpose,1);%纯向前运动numsmoothpositions = 20 * numpositions;增加此值以增加返回姿势的数量[newrefpose,~, cumsizes] = smoothPathSpline(refpose, refDirections, numsmoothpose);
通过生成时间向量创建一个恒定速度剖面%与累积路径长度成正比simStopTime = 10;timeVector = normalize(cumlength,“范围”, [0, simStopTime]);
refPosesX = [timeVector, newrefposed (:,1)];refPosesY = [timeVector, newrefpose (:,2)];refPosesYaw = [timeVector, newrefpose (:,3)];

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

姿势=负载(“mcityPoses”);

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

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

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

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

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

闭环测试

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

bdclose所有

另请参阅

相关的话题