主要内容

为虚幻引擎模拟选择路点

这个示例展示了如何从场景中选择一系列路径点,并在3D模拟环境中可视化车辆沿着这些路径点行驶的路径。此环境使用Epic Games的虚幻引擎®。

简介

自动驾驶工具箱™集成了虚幻引擎仿真环境在Simulink®。万博1manbetx万博1manbetx与仿真环境相关的Simulink块可以在drivingsim3d图书馆。这些块提供了以下能力:

  • 在仿真环境中选择不同的场景。

  • 在场景中放置和移动车辆。

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

  • 基于车辆周围环境模拟传感器数据。

在开发、测试和验证自动驾驶算法的性能时,这一强大的仿真工具可用于补充真实数据。结合车辆模型,您可以使用此环境执行真实的闭环模拟,包括从感知到控制的整个自动驾驶堆栈。

使用此环境的第一步是了解场景并沿着所需的车辆路径选择路径点。这一步在定位算法未测试的情况下尤其有用。本例主要介绍第一步。

在这个例子中,你将:

  • 在MATLAB®中可视化场景。

  • 沿着场景中的路径交互式地选择路径点。

  • 设置仿真环境。

  • 沿着小路移动车辆。

想象的场景

首先,在MATLAB中可视化场景。每个场景都可以使用场景在图像上的2D俯视图投影进行可视化。每个场景图像都有一个对应的二维空间引用类对象imref2d描述图像中的像素与场景的世界坐标之间的关系。使用helperGetSceneImage函数检索场景图像和相关的空间参考。这个例子使用了一个大型停车场的预建场景。要为自定义场景生成场景图像和空间参考,请遵循中描述的过程创建自顶向下的地图虚幻引擎场景代替。

sceneName =“LargeParkingLot”;[sceneImage, sceneRef] = helperGetSceneImage(sceneName);

为了更好地理解场景的物理尺寸,请检查sceneRef变量。的XWorldLimits而且YWorldLimits属性指定了世界在X和Y方向上的极限。

sceneRef。XWorldLimits%(米)sceneRef。YWorldLimits%(米)
Ans = -78.6000 72.6000 Ans = -77.7000 73.5000

方法可视化场景图像helperShowSceneImage函数。这个辅助函数在图形窗口中显示场景图像。使用平移和缩放工具来探索场景。

hScene =图;help showsceneimage (sceneImage, sceneRef)

交互式选择路径点

在探索场景后,选择一组路径点来定义车辆要遵循的路径。这个路径可以用来在场景中移动车辆。使用helper函数helperSelectSceneWaypoints在场景中交互式地选择路径点。

hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);

这个辅助函数打开一个包含所选场景的图形窗口。

  • 通过缩放和平移场景图像来探索场景。使用鼠标滚轮或轴工具栏进行缩放。将鼠标悬停在轴的边缘上,向该方向平移。

  • 点击场景开始绘制路径。路径被创建为由多个点组成的折线。通过双击或右键单击完成路径绘制。

  • 绘制完路径后,单击导出到工作区将变量导出到MATLAB工作区。在弹出的对话框中单击好吧将一组变量导出到工作区。

以下数据作为MATLAB变量导出到工作空间:

  • 锚点:单元格数组,其中每个元素包含的-by-2矩阵(x, y)美元世界坐标中的路点。单元格数组的每个元素都对应于来自不同路径的路径点。

  • 路径构成:单元格数组,每个元素包含的-by-3矩阵$(x, y, \theta)$包含每个路点的姿态的姿态。x美元而且y美元以米为单位指定。\θ美元以度为单位指定。

如果变量不存在,则将变量加载到工作区如果存在(“refPoses”“var”==0 || exist(“锚点”“var”) = = 0加载包含预选路径点的mat文件数据=负载(“waypointsLargeParkingLot”);data = data. waypointslargeparkinglot;分配给调用者工作区assignin (“来电”“锚点”, {data.waypoints});assignin (“来电”“refPoses”, {data.refPoses});结束

导出的变量现在包含一系列路径点(路点)和一连串的姿势(refPoses).使用smoothPathSpline函数将姿态序列转换为C ^ 2美元连续的路径。

numpose = size(refpose {1}, 1);refDirections = ones(numpose,1);%纯向前运动numsmoothpositions = 20 * numpositions;增加此值以增加返回姿势的数量[smoothrefpose,~, cumsizes] = smoothPathSpline(refpose {1}, refDirections, numsmoothpose);

建立模型和仿真环境

打开VisualizeVehiclePathIn3DSimulation万博1manbetx仿真软件模型。此模型使用模拟三维场景配置块来选择所需的场景。本例使用大型停车场现场。仿真3D场景配置块设置环境,并在Simulink和仿真环境之间建立通信。万博1manbetx

如果~ ispc错误([“3D模拟只支持微软”万博1manbetxchar (174),“窗口”char (174),“。”]);结束modelName =“VisualizeVehiclePathIn3DSimulation”;open_system (modelName);snapnow;

沿路径移动车辆

使用模拟三维车辆与地面跟踪在场景中放置和移动车辆。该模型被设置为接受变量refPosesXrefPosesY,refPosesT从工作区中使用从工作空间(万博1manbetx模型)块。单独的x美元y美元而且\θ美元newRefPoses分成不同的时间序列。该模型读取这些工作区变量以更新车辆的位置。

配置模型在5秒后停止模拟。simStopTime = 5;set_param (gcs,“StopTime”num2str (simStopTime));通过生成时间向量创建一个恒定速度剖面%与累积路径长度成正比。timeVector = normalize(cumlength,“范围”, [0, simStopTime]);创建Simulink模型所需的变量。万博1manbetxrefPosesX = [timeVector, smoothrefpositions (:,1)];refPosesY = [timeVector, smoothrefpositions (:,2)];refPosesT = [timeVector, smoothrefpositions (:,3)];

在模拟模型时,需要几秒钟来初始化模拟环境。完成初始化后,将打开一个用于模拟环境可视化的单独窗口。下图是模拟环境窗口的快照。

运行模拟。图窗口图显示了车辆穿过仿真环境的路径。

sim (modelName);

关闭模型和图形窗口。close(hFig) close_system(modelName) close(hScene)

另请参阅

功能

相关的话题