主要内容

选择路径点虚幻引擎模拟

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

简介

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

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

  • 在现场放置和移动车辆。

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

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

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

使用该环境的第一步是理解场景并沿着所需的车辆路径选择路径点。这一步特别适用于没有测试定位算法的场景。本例主要讨论第一步。

在这个例子中,你将:

  • 在MATLAB®中可视化场景。

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

  • 设置仿真环境。

  • 把车沿着小路移动。

想象的场景

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

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

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

sceneRef。XWorldLimits%(单位:米)
ans =1×2-78.6000 - 72.6000
sceneRef。YWorldLimits%(单位:米)
ans =1×2-77.7000 - 73.5000

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

hScene =图;helperShowSceneImage (sceneImage sceneRef)标题(sceneName)

图中包含一个axes对象。标题为LargeParkingLot的axes对象包含一个类型为image的对象。

交互式地选择锚点

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

hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);

{

这个助手函数打开一个带有所选场景的图形窗口。

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

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

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

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

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

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

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

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

numpose = size(refpose {1}, 1);refDirections = 1 (numPoses, 1);%单向运动numsmoothpose = 20 * numpose;增加这个可以增加返回的姿势的数量[smoothrefposed,~, cumlength] = smoothPathSpline(refposed {1}, refDirections, numsmoothposed);

建立模型和仿真环境

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

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

车辆沿小径移动

使用模拟三维车辆与地面跟踪阻挡放置和移动车辆在现场。该模型被设置为接受变量refPosesXrefPosesY,refPosesT从工作区中使用从工作空间(模型)块。单独的 x y 而且 θ newRefPoses变成单独的时间序列。模型读取这些工作空间变量来更新车辆的位置。

配置模型在5秒后停止模拟。simStopTime = 5;set_param (gcs,“StopTime”num2str (simStopTime));通过生成一个时间矢量来创建一个匀速剖面。%与累积路径长度成正比。timeVector =正常化(cumLengths,“范围”[0, simStopTime]);创建Simulink模型所需的变量。。refPosesX = [timeVector, smoothrefposed (:,1)];refPosesY = [timeVector, smoothrefpose (:,2)];refPosesT = [timeVector, smoothrefposed (:,3)];

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

运行仿真。图窗口图显示了车辆在仿真环境中所经过的路径。

sim (modelName);

图场景显示包含一个坐标轴对象。标题为Largeparkinglot的axes对象包含两个类型为image的对象,images. roy .polyline。

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

另请参阅

功能

相关的话题

Baidu
map