主要内容

使用虚拟发动机模拟可视化自动泊车代客泊车

这个例子展示了如何在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”;[scenemage,sceneRef]=helpergetscenemage(sceneName);%将场景图像可视化figure helperShowSceneImage(场景图像,场景EF)

这样的高分辨率图像是对环境的精确描述,分辨率达到一定程度。您可以使用此图像创建vehicleCostmap用于路径规划和导航。

首先,根据图像估计自由空间。自由空间是指车辆可以在不与其他静态对象(如停放的汽车、锥体和道路边界)碰撞的情况下行驶,且不穿过标记线的区域。在本例中,您可以根据图像的颜色估计自由空间。使用彩色脱粒机应用程序从图像处理工具箱中执行分割,并从图像生成二值图像。您还可以使用helper函数helperCreateCostmapFromImage在示例的最后生成二进制图像:

sceneImageBinary = helperCreateCostmapFromImage (sceneImage);

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

sceneImageBinary = imread ('sim3d_LargeParkingLotBinary.bmp');

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

%得到地图左下角的位置mapLocation=[sceneRef.XWorldLimits(1),sceneRef.YWorldLimits(1)];%[米,米]%计算分辨率mapWidth = sceneRef.XWorldLimits (2) -sceneRef.XWorldLimits (1);%米cellSize=地图宽度/大小(sceneImageBinary,2);%创建成本图成本地图=车辆成本地图(im2single(sceneImageBinary),“CellSize”,手机大小,“地图位置”,地图位置);地物图(成本图,“通货膨胀”“关”);传说

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

centerToFront=1.104;%米centerToRear=1.343;%米前悬=0.828;%米rearOverhang = 0.589;%米车辆宽度=1.653;%米车辆灯光=1.513;%米车辆长度= centerToFront + centerToRear + front toverhang + rearOverhang;车辆尺寸(车辆长度,车辆宽度,车辆高度,...“FrontOverhang”,前悬,“RearOverhang”,后悬);costmap.CollisionChecker.VehicleDimensions=vehicleDims;

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

costmap.CollisionChecker.NumCircles=5;

从三维场景创建管线平面

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

数据=负载(“routePlanUnreal.mat”);routePlan = data.routePlan%#好的%在起始姿势绘制车辆startPose=routePlan.startPose(1,:);持有在…上helperPlotVehicle(启动状态、车辆状态、,“DisplayName的”目前提出的传说)n = 1: height(routePlan)%提取目标路径点vehiclePose = routePlan {n,“EndPose”};%画出姿势legendEntry=sprintf('目标%i'n);helperPlotVehicle (vehiclePose vehicleDims,“DisplayName的”, legendEntry);持有在…上终止持有
5×3.表层平面图=5×3。表层平面图=5×3。表层平面图=5×3。表层平面图=5×3。表层平面图=5×3。表层平面平面图=5×3。表层平面图=5×3。表层平面图=5×3。表层平面图层平面平面图=5×3。表层平面图层平面平面图=5×3。表层平面图层平面图平面图=5。表层平面图=5 4 4 4 4 4。表层平面平面图=5 4 4 4 4 4 4。表层平面图=5。表层平面平面图=5。表层。表层平面图=5 4 4 4。表层平面图=5 4 4 4。表层。表层平面平面图=5 4 4 4 4 4 4。表层,表层,表层,表层,表层,表层,表层,表层,表层,表层,表层,表层,表层,表层,表层,5-13.50[1×1结构]-33.5-13.50-20.3-13.5-7[1×1结构]-20.3-13.5-7-13.5-6.8 90[1×1结构]

配置3D场景和车辆

关闭图形,打开模型。

帮助关闭数字如果~ispc错误([“仅Microsoft支持三维模拟”金宝app,char(174),“窗口”,char(174),“。”]);终止型号名称=“APVWith3DSimulation”;open_system snapnow (modelName)

此模型扩展了Simulink示例中自动泊车代客泊车中使用的模型,添加了两个用于在3D场景中可视化车辆的块:金宝app

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

  • 具有地面跟随的三维车辆仿真:提供了一个界面,可以改变车辆在3D场景中的位置和方向。的类型将车辆的速度设置为掀背式汽车与中的车辆尺寸一致costmap.这个区块的输入是车辆的(X, Y)以米为单位的位置和偏航航向角以度数表示。这些值在世界坐标系中。

在三维场景中可视化车辆运动

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

sim卡(型号名称)

仿真运行时,Simulink环境会通过金宝app具有地面跟随的三维车辆仿真块一个新窗口显示3D可视化引擎中的ego车辆。这个自动泊车代客泊车图中以蓝色为规划路径,红色为车辆实际路径。的停车机动图中显示了用于搜索最终停车策略的本地成本图。

探索增强型路径规划系统

路径规划器块使用最优快速探索随机树(RRT*)算法规划通过环境地图的可行路径。为确保规划算法的性能,对路径规划模块进行了修改,以包括两个单独的模块:

  • 驱动方式:使用整个停车场的成本地图进行导航。此实现也用于Simulink中的自动泊车代客泊车金宝app实例

  • 停车模式:使用本地成本地图进行最终停车操作。本地成本地图是成本地图的子地图,具有方形形状。若要指定此地图的大小,请使用本地成本地图大小(m)Path Planner block(路径规划器块)对话框的参数。尺寸较小的costmap可显著减少搜索到最终停车位的可行路径时的计算负担。在相同的规划器设置下,它还可增加找到可行路径的概率。

打开路径规划器子系统。

打开系统([modelName,“/Path Planner”],“武力”

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

关闭模型和图形。

bdclose全部的帮助关闭数字

结论

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

金宝app支持功能

helperCreateCostmapFromImage

作用BW=helperCreateCostmapFromImage(场景图像)%#好的%helperCreateCostmapFromImage从RGB图像创建costmap。%翻转场景图像场景图像=flipud(场景图像);%从颜色阈值应用程序调用自动生成的代码BW=helperCreateMask(场景图像);%平滑图像BW=im2uint8(medfilt2(BW));%调整大小BW = imresize(BW, 0.5);%计算补BW=补码(BW);终止

helperCreateMask

作用[BW, maskedRGBImage] = helperCreateMask (RGB)%helperCreateMask阈值RGB图像使用颜色阈值应用程序自动生成的代码。%[BW,maskedRGBImage]=使用%颜色阈值应用程序自动生成的代码%范围的每个通道的颜色空间是在应用程序中设置的%分段掩码以BW形式返回,并且是掩码和%原始RGB图像以maskedRGBImage的形式返回。%将RGB图像转换为选定的颜色空间I=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关闭除模拟可视化外的所有图形找到所有图形对象figHandles=findobj(“类型”“数字”);关闭数字i=1:长度(figHandles)闭合(figHandles(i));终止终止

另请参阅

阻碍

功能

应用程序

相关话题