主要内容

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

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

概述

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

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

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

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

  2. 引导您完成虚拟车辆和摄像头传感器的设置

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

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

三维仿真环境简介

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

  • 在三维可视化引擎中选择不同的场景

  • 在现场放置和移动车辆

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

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

可以通过万博1manbetx打开来访问用于三维模拟的Simulink块drivingsim3d图书馆。

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

在三维模拟中创建简单的直线道路场景

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

open_system (“straightRoadSim3D”);

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

模型还包含一个模拟三维摄像机块,该块从虚拟车辆内后视镜处连接的虚拟摄像机中提取视频帧。相机参数用于模拟针孔相机模型可以描述的相机的典型参数,包括焦距、相机光学中心、径向失真和输出图像大小。调用模型时,将从自动跟踪车辆的摄影机的角度显示生成的场景。

模拟(“straightRoadSim3D”);

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

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

open_system (“直接录像”);

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

为了设计车道标记检测器,你使用了一个模块单目摄像机的视觉感知实例然而,如果你只是移植现有的helperMonoSensor.m根据该示例,即使是最简单的直线道路场景也不会产生良好的效果。您可以立即看到虚拟环境的强大功能。您可以为您的车辆选择任何轨迹或环境,从而让您在将perception module(感知模块)放置到实际车辆上之前探索许多假设情况。

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

helperStraightRoadMLTest

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

open_system (“直道单镜头”);

在更复杂的场景中导航以改进感知算法

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

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

%根据场景名称提取场景图像位置sceneName =“虚拟城市”;[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
%交互式选择路径点通过Mcity助手选择场景点(场景图像、场景EF)
将稀疏的路径点转换成车辆可以密集的轨迹%跟随numPoses = size(refPoses, 1);refDirections = 1 (numPoses, 1);%仅向前运动numSmoothPoses = 20 * numPoses;%增加这个值可以增加返回姿势的数量[newRefPoses,~, cumpaths] = smoothPathSpline(refPoses, refDirections, numSmoothPoses);
通过生成时间矢量来创建一个恒定的速度剖面%与累积路径长度成比例simStopTime = 10;timeVector =正常化(cumLengths,“范围”,[0,simStopTime]);
refPosesX=[timeVector,newRefPoses(:,1)];refPosesY=[timeVector,newRefPoses(:,2)];refPosesYaw=[timeVector,newRefPoses(:,3)];

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

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

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

open_system (“mcityMonoCamera”);模拟(“mcityMonoCamera”);清晰的摆姿势

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

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

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

闭环测试

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

bdclose所有

另见

相关的话题