泳道探测器在三维仿真环境设计

此示例示出了如何有效地使用3D仿真环境来记录合成的传感器数据,开发车道标记检测系统,以及测试该系统在不同情况下。

概观

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

的视觉感知使用记录的视频数据单目摄像机示例用途开发包含车道标记检测和分类,车辆检测,和距离估计的视觉感知系统。在录制视频的使用是一个很好的开始,但它是不够的探索,可以在虚拟环境中可以更容易地合成了许多其他案件。更复杂的情况可以包含复杂的车道变更操纵,车道标线的闭塞由于其他车辆,等等。最重要的是,闭环仿真既包括感知和对车辆的控制,这两者都要求使用虚拟环境或真车。此外,与真车前测试起来可能很昂贵,从而使得使用3D模拟环境中非常有吸引力。

此示例执行下列步骤与方法来设计一个视觉感知算法来熟悉你:

  1. 向您介绍了三维仿真环境中的Simulink金宝app

  2. 引导您完成虚拟车辆和相机传感器的设置

  3. 向您介绍如何有效地建立一个调试环境,为您的视觉感知算法

  4. 礼物如何提高场景复杂,准备闭环仿真

简介3D模拟环境

自动驾驶的工具箱™集成在Simulink三维仿真环境。金宝app三维仿真环境使用虚幻引擎®由EpicGames®。金宝app有关3D仿真环境Simulink模块提供以下功能:

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

  • 场景中的地点和车辆的举动

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

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

用于3D金宝app仿真的Simulink模块可以通过开口被访问drivingsim3d这里显示的库。

如果〜ISPC误差([“3D仿真只支持微软金宝app,焦炭(174),“窗口”,焦炭(174),'']);结束open_system('drivingsim3d');

在视觉感知的算法在本例中设计助剂,可以使用定义的场景的块,块,其控制一个虚拟车辆,和一个块定义的虚拟相机。的示例集中于检测使用单眼照相机系统的车道标记。

创建三维仿真一个简单的直路场景

通过定义涉及直的高速公路道路上行使的车道标记检测算法一个简单的场景开始。

open_system('straightRoadSim3D');

模拟3D场景配置块可以让你选择一个预先定义的场景之一,在这种情况下,直路。当调用模型,它启动虚幻引擎®。该模拟3D车辆与地面跟随块中的游戏引擎内创建一个虚拟车辆和通过提供允许其位置的Simulink取控制金宝appXÿ在米,偏航度。Xÿ偏航相对于世界指定坐标系统,在场景中间的原点。在这种情况下,由于道路是笔直的,一个0.75米的偏移ÿ- 方向等一系列增加X值移动车辆前进。这个例子说明如何定义更复杂的动作,而不诉诸后面的章节Xÿ偏航根据试验和错误的设置。

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

SIM('straightRoadSim3D');

设计和调试视觉感知模块

视觉感受一般比较复杂,是否涉及经典的计算机视觉和深度学习。开发这样的系统往往需要有增量的改进快速迭代。虽然Simulin金宝appk的是系统级工程和闭环仿真一个强大的环境,基于感知的算法通常在开发像MATLAB或C ++文本编程语言。此外,启动时间需要Simulink和虚幻引擎®之间建立通信模型是显著。金宝app由于这些原因,可以很方便地记录由虚拟摄像机生成到的视频图像数据和发展MATLAB的感知器算法。下面的模型记录了相机到磁盘的MP4文件。

open_system('straightRoadVideoRecording');

视频是使用记录多媒体文件块。所结果的straightRoad.mp4文件现在可以用来开发感知模块,而不会产生三维仿真环境的启动时间损失。

为了设计车道标记检测,你使用一个模块从视觉感知使用单眼相机例。但是,如果简单地移植现有的helperMonoSensor.m从示例程序,即使最简单的直线道路场景不会产生良好的效果。随即,就可以看到虚拟环境的强大功能。您可以选择为您的车辆轨迹的任何或环境,从而让您了解很多东西,如果之前将感知模块上的实际车辆的情况。

在算法的设计辅助工具,使用提供helperMonoSensorWrapper.m功能。此功能在MATLAB和置于其内的时MATLAB功能阻止在Simuli金宝appnk。下面的脚本,helperStraightRoadMLTest,调用从MATLAB命令提示的包装。这种方法允许设计的快速迭代,而不3D模拟环境的连续调用。

helperStraightRoadMLTest

一旦算法开始工作好了,你可以把它放回到一个模型如下图所示。你可以尝试改变汽车的轨迹,作为证明选择航点的三维仿真例。这样一来,你可以想办法动车,使得算法失败。整个过程,就是要反复。

open_system('straightRoadMonoCamera');

导航通过更复杂的场景中提高感知算法

在开发你的算法,可以增加场景复杂程度继续你的系统适应类似现实条件。在本节中,切换现场虚拟Mcity,它提供了道路的延伸与弯曲车道,没有车道标记,或合并车道标记。

在开始之前,你需要通过虚拟Mcity,这是属于密歇根大学的实际测试场的表示的合适的拉伸来定义的轨迹。要了解如何获得一系列的细节Xÿ偏航适合于通过一个复杂的环境中移动一个车值,请参考选择航点的三维仿真例。关键的步骤是为了您的方便总结如下。

%提取场景图像位置,基于场景的名字sceneName ='VirtualMCity';[sceneImage,sceneRef] = helperGetSceneImage(sceneName);
交互式%通过选择航点McityhelperSelectSceneWaypoints(sceneImage,sceneRef)
%转换稀疏航点为密集的轨迹,一个车能% 跟随numPoses =尺寸(refPoses,1);refDirections =酮(numPoses,1);%只进运动numSmoothPoses = 20个* numPoses;%的增幅这增加退还姿势的数量[newRefPoses,〜,cumLengths] = 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');SIM('mcityMonoCamera');明确姿势;

很多时候,结果并不理想。例如,当障碍混淆车道标线,当通知选定关注分析的区域太窄拿起左侧车道。

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

主要的一点是,虚拟环境可以让你压力测试您的设计,并帮助你实现什么样的条件下你可能真实的道路遇到的问题。运行在虚拟环境中你的算法也节省了您的时间。如果你的设计没有在虚拟环境中成功运行,那么就没有任何意义的道路,在实车运行它的是更为费时和昂贵的。

闭环测试

其中的3D模拟环境中最强大的功能是它可以促进一个复杂系统的闭环测试。车道保持辅助,例如,既包括感知和对车辆的控制。一旦感知系统是在非常复杂的场景和执行完善好,它就可以被用来驱动实际操纵车辆的控制系统。在这种情况下,而不是手动设置的轨迹,车辆使用感知系统来驱动本身。它超出了这个例子的范围,显示整个过程。然而,这里描述的步骤应为您提供关于如何设计和调试你的感知系统,因此它可以在后面更复杂的闭环仿真中使用的想法。

bdclose所有;

也可以看看

相关话题