主要内容

使用虚幻引擎模拟可视化自动代客停车

这个例子展示了如何在一个3 d可视化车辆运动仿真环境渲染使用虚幻引擎从史诗游戏®®。它紧跟自动停车员在仿真软件金宝app的例子。

介绍

自动驾驶工具箱™虚幻引擎集成仿真环境模型®。金宝app您可以使用此环境可视化的运动车辆在一个预先构建的场景。这个环境提供了一个直观的方法来分析路径规划和车辆控制算法的性能。的自动停车员在仿真软件金宝app示例展示了如何设计一个路径规划、车辆控制算法仿真软件的自动代客停车系统。金宝app这个例子展示了如何增强模型可视化场景使用的车辆运动可视化引擎。这个工作流的步骤是:

  1. 创建一个costmap从3 d场景。

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

  3. 配置3 d场景和自我车辆仿真软件。金宝app

  4. 模拟和可视化三维场景中的车辆的运动。

从三维场景创建Costmap

可视化集成有一个预先构建的场景。每个场景都有一个高分辨率的图像,可用于探索。使用helperShowSceneImage函数来显示图像。下面的例子使用了大型停车场现场。

%加载和显示图像的停车场sceneName =“LargeParkingLot”;[sceneImage, sceneRef] = helperGetSceneImage (sceneName);%可视化场景图像图helperShowSceneImage (sceneImage sceneRef)

这样的高分辨率图像是一个精确的描述环境的一些决议。你可以使用这个来创建一个图像vehicleCostmap路径规划与导航。

首先,估计自由空间的形象。自由空间的地方没有碰撞的车辆可以与其他静态对象,如停放的汽车,锥,和道路边界,没有交叉线。在本例中,您可以估计基于图像的颜色自由空间。使用颜色阈值应用图像处理工具箱进行分割和生成一个二进制图像的图像。您还可以使用helper函数helperCreateCostmapFromImage最后的示例生成二进制图像:

sceneImageBinary = helperCreateCostmapFromImage (sceneImage);

另外,负载pregenerated二进制图像。

sceneImageBinary = imread (“sim3d_LargeParkingLotBinary.bmp”);

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

%得到left-bottom角落的位置地图mapLocation = [sceneRef.XWorldLimits (1) sceneRef.YWorldLimits (1)];%(米,米)%计算分辨率mapWidth = sceneRef.XWorldLimits (2) -sceneRef.XWorldLimits (1);%米cellSize = mapWidth /大小(sceneImageBinary 2);%创建costmapcostmap = vehicleCostmap (im2single (sceneImageBinary),“CellSize”cellSize,“MapLocation”,mapLocation);图绘制(costmap,“通货膨胀”,“关闭”);传说

您还需要指定车辆的尺寸,将公园中可用的车辆自动基于3 d场景。这个示例使用的维度掀背车。这些维度需要costmap和仿真软件模型之间的一致。金宝app

centerToFront = 1.104;%米centerToRear = 1.343;%米frontOverhang = 0.828;%米rearOverhang = 0.589;%米vehicleWidth = 1.653;%米vehicleHeight = 1.513;%米vehicleLength = centerToFront + centerToRear + frontOverhang + rearOverhang;vehicleDims = vehicleDimensions (vehicleLength vehicleWidth vehicleHeight,“FrontOverhang”frontOverhang,“RearOverhang”,rearOverhang);costmap.CollisionChecker。VehicleDimensions = vehicleDims;

把通货膨胀半径通过指定圆形封闭车辆的数量。

costmap.CollisionChecker。NumCircles = 5;

从一个3 d场景创建路线计划

全球航线计划被描述为一系列巷段遍历以达到一个停车位。可以交互式地选择中间目标职位描述的场景图像使用该工具选择路径点虚幻引擎模拟。在这个例子中,路线计划创建并存储在一个表中。在仿真之前,PreLoadFcn回调函数模型的加载路径的计划。

data =负载(“routePlanUnreal.mat”);routePlan = data.routePlan% #好< NOPTS >%的阴谋车辆在起始姿势:startPose = routePlan.StartPose (1);持有helperPlotVehicle (startPose vehicleDims,“DisplayName的”,目前提出的传说)n = 1:高度(routePlan)%提取目标航点vehiclePose = routePlan {n,“EndPose”};%画出构成legendEntry = sprintf (“目标%我”n);helperPlotVehicle (vehiclePose vehicleDims,“DisplayName的”,legendEntry);持有结束持有
routePlan = 5×3表StartPose EndPose属性_______________________ _______________________ _______ 180 180 -33.5 8.5 44.5(1×1结构)-33.5 -0.7 8.5 180 -45.2 250(1×1结构)-13.5 -33.5 -45.2 -0.7 250 0(1×1结构)-33.5 - -13.5 -20.3 - -13.5 7(1×1结构)-20.3 - -13.5 -13.5 - -6.8 90(1×1结构)

配置3 d场景和自我

关闭和开放的数字模型。

helperCloseFigures如果~ ispc错误([“3 d模拟仅支持微软的金宝appchar (174),“窗口”char (174),“。”]);结束modelName =“APVWith3DSimulation”;open_system snapnow (modelName)

这个模型扩展了一个自动停车员在仿真软件中使用的例子通过添加两个街区的可视化工具3 d场景:金宝app

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

  • 模拟3 d车辆与地面:提供一个接口,改变车辆的位置和姿态的3 d场景。的类型车辆的设置掀背车与车辆尺寸是一致的costmap。这个块的输入汽车的(X, Y)米和位置偏航航向角的度。这些值在世界坐标系统。

可视化工具运动在3 d场景

模拟模型的车辆驱动所需的停车位。

sim (modelName)

模拟运行,仿真软件环境更新车辆的位置和姿态的3 d可视化金宝app引擎通过模拟3 d车辆与地面块。一个新窗口显示了自我车辆在3 d可视化引擎。的自动停车员图显示了计划在蓝色和路径的实际道路车辆用红色。的停车操作图显示了一个本地costmap用来寻找停车操作。

探索提高路径规划系统

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

  • 驱动方式:整个停车场的使用costmap导航。这个实现还在使用自动停车员在仿真软件金宝app的例子。

  • 停车模式:使用一个本地costmap最后停车操作。当地costmap submap costmap的正方形的形状。指定这个地图的大小,使用本地costmap尺寸(米)路径规划块的参数对话框。较小的costmap维度显著减少计算负担在寻找一个可行的路径最终的停车位。它找到一个可行的路径的概率也增加了规划师的设置相同。

打开路径规划子系统。

open_system ([modelName,/路径规划的),“力”)

这两个路径规划模块实现启用子系统(金宝app模型)块。从启动信号IsParkingManeuver信号输入配置公共汽车从行为规划师发送块。当启用停车模式子系统时,创建一个本地costmap与中心车辆的当前位置。

关闭模型和数据。

bdclose所有helperCloseFigures

结论

这个例子展示了如何集成三维模拟仿真软件示例中与现有的自动停车员形象化的运动车辆在停车场3 d场景。金宝app

金宝app支持功能

helperCreateCostmapFromImage

函数BW = helperCreateCostmapFromImage (sceneImage)% #好< DEFNU >% helperCreateCostmapFromImage创建一个costmap从RGB图像。%翻转场景图像sceneImage = flipud (sceneImage);%从颜色阈值的应用程序调用自动生成的代码BW = helperCreateMask (sceneImage);%平滑图像BW = im2uint8 (medfilt2 (BW));%调整BW = imresize (BW 0.5);%计算补BW = imcomplement (BW);结束

helperCreateMask

函数[BW, maskedRGBImage] = helperCreateMask (RGB)% helperCreateMask阈值使用自动生成的代码从RGB图像颜色阈值的应用。% (BW, maskedRGBImage] = createMask (RGB)阈值图像RGB使用%从颜色阈值自动生成代码应用。色彩%范围内设置每个通道的色彩应用。在BW %分割掩模返回,面具和复合%在maskedRGBImage返回原始RGB图像。%将RGB图像转换为选择的色彩我= 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) &(我(::2)> = channel2Min) &(我(:,:2)< = channel2Max) &(我(::3)> = channel3Min) &(我(:,:,3)< = channel3Max);BW = sliderBW;%初始化输出掩盖图像基于输入图像maskedRGBImage =我;% BW是假的时,设置背景像素为零maskedRGBImage (repmat (~ BW, [1 1 3])) = 0;结束

helperCloseFigures

函数helperCloseFigures ()% helperCloseFigures关闭所有数据除了仿真可视化%找到所有图对象figHandles = findobj (“类型”,“图”);%关闭数据i = 1:长度(figHandles)关闭(figHandles(我));结束结束

另请参阅

功能

应用程序

相关的话题