主要内容

使用虚幻发动机仿真环境设计车道标记探测器

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

概述

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

使用单眼相机示例的视觉感知使用录制的视频数据来开发视觉感知系统,其中包含车道标记检测和分类,车辆检测和距离估计。使用录制的视频是一个很好的开始,但探索许多其他案例不充分,可以在虚拟环境中更容易地合成。更复杂的情景可以包括复杂的车道改变操作,由于其他车辆,车道标记的闭塞,等等。最重要的是,闭环仿真涉及车辆的感知和控制,两者都需要虚拟环境或真实车辆。此外,用真正的车辆测试前部可能是昂贵的,从而利用3D模拟环境非常有吸引力。

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

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

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

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

  4. 介绍如何提高场景复杂性以准备闭环仿真

3D仿真环境介绍

在Simulink中集成了一个3D仿真环境。金宝app3D模拟环境使用Epic Games的虚幻引擎。金宝app与3D仿真环境相关的Simulink模块提供了以下能力:

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

  • 在现场放置和移动车辆

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

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

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

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

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

首先定义涉及直接公路道路的简单场景,用于锻炼车道标记检测算法。

Open_System('traightroadsim3d');

仿真3D场景配置块允许您选择其中一个预定义的场景,在这种情况下直路。调用模型时,它会启动Unreal引擎。当模拟3D车辆与地面跟踪块在游戏引擎中创建虚拟车辆,并让Simulink通过提供来控制其位置金宝appX.y在米中,y程度。X.y,和y是根据世界坐标系指定的,原点位于场景的中间。在这种情况下,由于道路是直的,偏移0.75米在y- 一系列增加X.值向前移动车辆。此示例的后面的部分显示如何在不诉诸的情况下定义更复杂的操作X.y,和y基于试验和错误的设置。

该模型还包含一个仿真3D相机块,其从附加在虚拟车辆内的后视镜上的虚拟相机中提取视频帧。相机参数允许您模拟可通过针孔摄像机模型描述的相机的典型参数,包括焦距,相机光学中心,径向失真和输出图像尺寸。当调用模型时,从自动跟随车辆的相机的透视图中示出了所得到的场景。

SIM('traightroadsim3d');

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

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

Open_System('thraightrovidevideorecound');

使用该视频到多媒体文件块。由此产生的Straightroad.mp4.文件现在可以用于开发感知模块,而不会产生3D仿真环境的启动时间损失。

为了设计车道标记检测器,你使用了一个模块使用单眼相机的视觉感知的例子。但是,如果您只是移植现有Helpermonosensor.m.从该示例中的常规,即使是最简单的直路场景也不会产生良好的效果。立即,您可以看出虚拟环境的强大程度。您可以为您的车辆选择任何轨迹或环境,从而让您在将感知模块放置在实际车辆之前,探索许多情况。

为了帮助设计算法,请使用所提供的helpermonosensorwrapper.m函数。这个函数在MATLAB中工作,当放置在MATLAB函数(金宝appSimulink)块模型。金宝app下面的脚本,alperstraightroadmltest.,请从MATLAB命令提示符调用包装器。这种方法允许快速迭代设计而不连续调用3D模拟环境。

alperstraightroadmltest.

一旦算法开始运行,您就可以将其放回模型,如下所示。您可以尝试更改汽车的轨迹,如图所示为虚幻引擎模拟选择路径点的例子。这样,您可以寻找移动汽车的方法,以便算法失败。整个过程意味着迭代。

Open_System('thraightroadmonocamera');

浏览更复杂的场景以提高感知算法

在开发算法时,您可以增加场景复杂度的级别,以继续使系统适应类似现实的条件。在本节中,将场景切换到虚拟Mcity,在道路延伸处设置弯曲车道,不设行车标志或合并行车标志。

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

%根据场景名称提取场景图像位置场景='Virtualmcity';[SceeImage,Sceneref] =终止行程(场景);
%相互作用地通过MCITY选择航点alcerselectscenewayspoints(sceneimage,sceneref)
将稀疏的路径点转换成车辆可以密集的轨迹%遵循numposs =尺寸(重新发作,1);Refdirections = =那些(numpose,1);%远期动作numsmoothposs = 20 * numpose;%增加这是为了增加返回的姿势的数量[newRefPoses,~, cumpaths] = smoothPathSpline(refPoses, refDirections, numSmoothPoses);
%通过生成时间向量来创建恒定速度概况%与累积路径长度成比例simStopTime = 10;timeVector =正常化(cumLengths,'范围',[0,simstoptime];
refposex = [timevector,newrefpose(:,1)];refpasey = [timevector,newrefpose(:,2)];refposeyaw = [timevector,newrefpose(:,3)];

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

姿势=加载('McITYPOSE');

有了预先设定的轨迹,您现在就可以虚拟地驾驶车辆在复杂的虚拟环境中行驶更长一段距离。

Open_System(“mcityMonoCamera”);SIM(“mcityMonoCamera”);清楚姿势;

多次,结果不太理想。For example, notice where the barriers are confused with lane markers and when the region of interest selected for analysis is too narrow to pick up the left lane.

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

要点是虚拟环境让您对您的设计进行压力测试,并帮助您实现您在真正的道路上可能遇到的条件。在虚拟环境中运行算法也会节省您的时间。如果您的设计在虚拟环境中没有成功运行,那么就没有在道路上的真正车辆中运行它,这更耗时和昂贵。

闭环测试

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

bdclose.所有;

另请参阅

相关主题