主要内容

使用虚幻发动机仿真可视化自动化停车剂座

这个例子展示了如何在3D模拟环境中可视化车辆运动,使用Unreal Engine®从Epic Games®渲染。它紧随着Simulink中的自动化停车剂金宝app例子。

介绍

自动化驾驶工具箱™在Simulink®中集成了虚幻发动机仿真环境。金宝app您可以使用此环境可视化预设场景中车辆的运动。该环境提供了分析路径规划和车辆控制算法的性能的直观方式。的Simulink中的自动化停车剂金宝app示例说明如何在Simulink中设计用于自动化停车剂型系统的路径规划和车辆控制算法。金宝app此示例显示如何使用可视化引擎增强模型以可视化场景中的车辆运动。此工作流程中的步骤是:

  1. 从3D场景创建成本地图。

  2. 从现场创建路线计划。

  3. 在Simulink中配置3D场景和ego车辆。金宝app

  4. 在3D场景中模拟和可视化车辆的运动。

从3D场景创建CostMap

可视化集成伴随着许多预先构建的场景。每个场景都有一个高分辨率的图像,可以用来探索场景。使用helperShowSceneImage函数显示图像。此示例使用大型停车场场景。

%加载并显示停车场的图像场景=“LargeParkingLot”;[sceneimage,sceneref] =终止行程(场景);%可视化场景图像数字求助者ceneImage(sceneimage,sceneref)

这种高分辨率图像是对某些分辨率的准确描述。您可以使用此图像创建一个vehicleCostmap用于路径规划和导航。

首先,估计图像的可用空间。自由空间是车辆可以在没有与其他静态物体碰撞的情况下驱动的区域,例如停放的汽车,锥形和道路边界,并且没有交叉标记的线条。在此示例中,您可以根据图像的颜色估计自由空间。使用颜色阈值应用程序从图像处理工具箱中执行分割,并从图像生成二值图像。您还可以使用helper函数Helpercreatecostmapfromimage.在示例的最后生成二进制图像:

sceneImageBinary = helperCreateCostmapFromImage (sceneImage);

或者,加载预生成的二进制图像。

sceneImageBinary = imread ('sim3d_largeparkinglotbinary.bmp');

接下来,从二进制图像创建CostMap。使用二进制图像在每个单元格上指定成本值。

%得到地图左下角的位置maplocation = [sceneref.xworldlimits(1),sceneref.yworldlimits(1)];%[米,米]%计算分辨率mapWidth = sceneRef.XWorldLimits (2) -sceneRef.XWorldLimits (1);%米Cellize = MapWidth / Size(SquileImageBinary,2);%创建成本图costmap = veviclecostmap(im2single(sceenimagebinary),“CellSize”,细胞化,'maplocation',maplocation);图绘图(Costmap,'通货膨胀''离开');传说离开

您还需要指定将根据3D场景中可用的车辆自动停放的车辆的尺寸。此示例使用A的维度掀背车.这些维度需要在成本图和Simulink模型之间保持一致。金宝app

Centertofront = 1.104;%米Centertorear = 1.343;%米前端= 0.828;%米rearOverhang = 0.589;%米车辆Width = 1.653;%米努力= 1.513;%米车辆长度= centerToFront + centerToRear + front toverhang + rearOverhang;车辆尺寸(车辆长度,车辆宽度,车辆高度,...“FrontOverhang”,前长岗,“RearOverhang”,后舰艇);costmap.colisisionChecker.vehicledimensions =车辆levedims;

通过指定包围车辆的圆数来设置充气半径。

costmap.colisionChecker.numcircles = 5;

从3D场景创建路线计划

全局路线计划被描述为为了到达一个停车位而穿越的车道段序列。您可以交互式地从场景图像中选择中间目标位置,使用中描述的工具选择虚幻引擎模拟的航点.在此示例中,已创建并将路由计划存储在表中。在模拟之前,PreLoadFcn模型的回调函数加载路线计划。

data = load(“routePlanUnreal.mat”);routePlan = data.routePlan%#OK %在起始姿势绘制车辆eleplings = RoutePlan.Startpose(1,:);持有螺旋平板(血统,车辆脑),“DisplayName的”目前提出的传说)n = 1: height(routePlan)%提取目标路径点vehiclePose = routePlan {n,“EndPose”};%绘制姿势Legendentry = Sprintf('目标%我'n);helperPlotVehicle (vehiclePose vehicleDims,“DisplayName的”, legendEntry);持有结尾持有离开
routePlan = 5×3表StartPose EndPose属性_______________________ _______________________ ____________ 44.5 8 180 -33.5 8.5 180 [1×1结构] -33.5 8.5 180 -45.2 -0.7 250 [1×1结构] -45.2 -0.7 -33.5 250 -13.5 0[1×1结构] -33.5 -13.5 0 -20.3 -13.5 -7 [1×1结构] -20.3 -13.5 -7 -13.5 -6.8 90 [1×1结构]

配置3D场景和自助式车辆

关闭图形,打开模型。

helperCloseFigures如果〜ispc错误(['3D模拟仅支持Microsoft'金宝app,char(174),'Windows',char(174),“。”]);结尾modelname =.'apvwith3dsimulation';open_system snapnow (modelName)

该模型通过添加两个块来扩展在Simulink示例中用于在3D场景中可视化车辆的块:金宝app

  • 模拟3D场景配置:实现3D仿真环境。的场景描述参数设置为大型停车场

  • 用地面模拟3D车辆:提供了一个界面,可以改变车辆在3D场景中的位置和方向。的类型车辆设置为掀背车与车辆尺寸保持一致costmap.这个区块的输入是车辆的(X, Y)在米中的位置和偏航航向角以度数表示。这些值在世界坐标系中。

在3D场景中可视化车辆运动

模拟该模型,看看车辆如何驶入所需的停车位。

SIM(ModelName)

随着模拟运行,Simulink环境通过仿真更新了3D可视金宝app化引擎中车辆的位置和方向用地面模拟3D车辆块。在3D可视化引擎中,一个新窗口显示了ego车辆。的自动化停车剂代客图中以蓝色为规划路径,红色为车辆实际路径。的停车操纵图显示了用于搜索最终停车操纵的本地CostMap。

探索增强的路径规划系统

路径策划块通过使用最佳迅速探索随机树(RRT *)算法来通过环境映射计划可行的路径。为确保规划算法的性能,修改路径规划模块以包括两个单独的模块:

  • 驱动方式:使用整个停车场的Costmap进行导航。此实现也用于该实现Simulink中的自动化停车剂金宝app例子。

  • 停车模式:使用当地的CostMap进行最终停车操作。本地Costmap是具有方形形状的Costmap的子图。要指定此地图的大小,请使用本地成本地图大小(m)Path Planner块对话框的参数。具有较小尺寸的Costmap显着降低了搜索最终停车位的可行路径的计算负担。它还增加了找到相同的平面设置的可行路径的概率。

打开路径规划器子系统。

Open_System([ModelName,'/ path planner'],'力量'

两个路径规划器模块实现为启用子系统(金宝app模型)块。使能信号来自isparkingmaneuver输入中的信号配置从行为规划器块发送的总线。当泊车模式子系统启用时,将创建一个以中心作为车辆当前位置的本地成本图。

关闭模型和图形。

bdclose全部helperCloseFigures

结论

本示例演示了如何将3D仿真与Simulink中现有的自动泊车代客集成,以可视化3D停车场场景中的车辆运动。金宝app

金宝app支持功能

Helpercreatecostmapfromimage.

功能bw = helpercreatecostmapfromimage(squesimage)%#OK %HelperCreatecostMapFromImage从RGB图像创建CostMap。%翻转场景图像sceneimage = flipud(squesimage);%从颜色阈值应用程序调用自动化代码BW =辅助版(Squimimage);%平滑图像bw = im2uint8(medfilt2(bw));%调整大小BW = imresize(BW, 0.5);%计算补BW = ImComplement(BW);结尾

辅助电子掩模

功能[BW, maskedRGBImage] = helperCreateMask (RGB)%HelperCreateMask阈值RGB图像使用来自颜色阈值应用程序的自动生成的代码。%[BW,MaskedRGBimage] = CreateMask(RGB)阈值图像RGB使用%颜色阈值应用程序自动生成的代码%范围的每个通道的颜色空间是在应用程序中设置的%分段掩模在BW中返回,以及掩模的复合物%原始RGB图像在MaskedRGBimage中返回。%将RGB图像转换为选择的ColorSpace我= RGB;基于直方图设置,%定义通道1的阈值channel1Min = 67.000;channel1Max = 216.000;%根据直方图设置定义通道2的阈值channel2Min = 68.000;channel2Max = 171.000;基于直方图设置,%定义通道3的阈值channel3Min = 69.000;channel3Max = 160.000;基于所选的直方图阈值创建掩码sliderBW =(我(::1)> = channel1Min) &(我(:,:1)< = channel1Max) &...(i(:,:,2)> = channel2min)&(i(:,:,2)<= channel2max)&...(i(:,:,3)> = channel3min)&(i(:,3)<= channel3max);bw = sliderbw;%基于输入图像初始化输出屏蔽图像maskedRGBImage =我;%当BW为假时,设置背景像素为零maskedRGBImage(repmat(~BW,[1 1 3])) = 0;结尾

helperCloseFigures

功能HelpercloseFigures()%HelperCloseFigures关闭除模拟可视化之外的所有图形找到所有图形对象fighandles = findobj('类型''数字');关闭数字i = 1:长度(fighandandles)关闭(fighandandles(i));结尾结尾

另请参阅

功能

应用程序

相关话题