这个示例展示了如何从场景中选择一系列路点,并在3D仿真环境中可视化车辆沿着这些路点行驶的路径。这个环境使用了Epic Games®的虚幻引擎。
Automated Driving Toolbox™在Simulink®中集成了一个不真实的发动机仿真环境。金宝app金宝app与仿真环境相关的Simulink模块可以在drivingsim3d
图书馆。这些块提供能力:
在仿真环境中选择不同的场景。
放置和移动场景中的车辆。
在车辆上安装和配置传感器。
根据车辆周围环境模拟传感器数据。
该强大的仿真工具可以在开发、测试和验证自动驾驶算法性能时,补充真实数据。与车辆模型结合使用,您可以使用此环境来执行真实的闭环模拟,包括从感知到控制的整个自动驾驶堆栈。
使用这种环境的第一步是理解场景和选择路径点沿着所需的车辆路径。这个步骤在定位算法没有被测试的情况下特别有用。本示例主要关注第一步。
在这个例子中,你会:
可视化的场景在MATLAB®。
交互式地沿着场景中的路径选择路点。
设置模拟环境。
沿着路径移动车辆。
首先,在MATLAB中可视化这个场景。每个场景可以可视化使用一个2D顶视图投影的场景到一个图像。每个场景图像都有一个相应的二维空间引用对象类
描述图像中的像素和场景的世界坐标之间的关系。使用imref2d
(图像处理工具箱)helperGetSceneImage
函数检索场景图像和相关的空间参考。这个例子使用了一个大型停车场的预建场景。使用生成场景图像和空间参考自定义场景,遵循中描述的过程创建自顶向下的虚幻引擎场景贴图代替。
sceneName =“LargeParkingLot”;[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
为了更好地了解现场的物理尺寸,检查sceneRef
变量。的XWorldLimits
和YWorldLimits
属性指定了世界在X和Y方向上的极限。
sceneRef.XWorldLimits%(单位:米)sceneRef.YWorldLimits%(单位:米)
61.5000 ans = -75 65
可视化场景图像使用helperShowSceneImage
函数。这个助手函数在一个图形窗口中显示场景图像。使用平移和缩放工具来探索场景。
hScene =图;helperShowSceneImage (sceneImage sceneRef)标题(sceneName)
在探索了场景之后,选择一组路径点来定义车辆要遵循的路径。此路径可用于移动场景中的车辆。使用辅助函数helperSelectSceneWaypoints
交互地选择场景中的路径点。
hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);
这个辅助函数会打开一个选中场景的图形窗口。
通过场景图像的缩放和平移来探索场景。使用鼠标滚动轮或轴工具栏缩放。将鼠标悬停在坐标轴的边缘上,以便向那个方向平移。
通过点击场景开始绘制路径。路径创建为由多个点组成的折线。通过双击或右键单击完成路径绘制。
绘制完路径后,单击出口到工作区将变量导出到MATLAB工作区。在打开的对话框中单击好吧将一组变量导出到工作区。
以下数据作为MATLAB变量导出到工作空间:
锚点:一个单元格数组,每个元素包含米2的矩阵路点在世界坐标。单元格数组的每个元素对应于来自不同路径的路径点。
路径构成:包含每个元素的单元格数组米3的矩阵包含每个路径点的姿态的姿态。和以米表示。以度数表示。
%将不存在的变量加载到工作空间如果存在(“refPoses”,“var”) = = 0 | |存在(“锚点”,“var”) = = 0%加载包含预先选择的路径点的马特文件data =负载(“waypointsLargeParkingLot”);数据= data.waypointsLargeParkingLot;%分配给调用者工作空间assignin (“来电”,“锚点”, {data.waypoints});assignin (“来电”,“refPoses”, {data.refPoses});结束
导出的变量现在包含一系列路径点(路点
)及一系列姿势(refPoses
)。使用smoothPathSpline
函数将姿态序列转换为a连续的路径。
size(refPoses{1}, 1);refDirections = 1 (numPoses, 1);%单向运动numSmoothPoses = 20 * numPoses;%增加这个增加返回动作的数量[smoothRefPoses,~, cumlength] = smoothPathSpline(refPoses{1}, refDirections, numSmoothPoses);
打开VisualizeVehiclePathIn3DSimulation
金宝app仿真软件模型。此模型使用模拟三维场景配置块来选择想要的场景。本示例使用大型停车场现场。仿真三维场景组态块建立环境,建立Simulink与仿真环境之间的通信。金宝app
如果~ ispc错误([“3D模拟只支持微软”金宝appchar (174),“窗口”char (174),“。”]);结束modelName =“VisualizeVehiclePathIn3DSimulation”;open_system (modelName);snapnow;
使用模拟三维车辆与地面跟踪阻塞来放置和移动场景中的车辆。这个模型是用来接受变量的refPosesX
,refPosesY
,refPosesT
从工作区中使用从工作空间(金宝app模型)块。单独的,和从newRefPoses
变成单独的时间序列。模型读取这些工作空间变量来更新车辆的位置。
%将模型配置为在5秒停止模拟。simStopTime = 5;set_param (gcs,“StopTime”num2str (simStopTime));通过生成时间矢量创建一个恒定速度剖面%与累积路径长度成正比。timeVector =正常化(cumLengths,“范围”[0, simStopTime]);%创建Simulink模型所需的变量金宝apprefPosesX = [timeVector, smoothrefpose (:,1)];refPosesY = [timeVector, smoothrefpose (:,2)];refPosesT = [timeVector, smoothrefpose (:,3)];
当您模拟模型时,需要几秒钟来初始化模拟环境。初始化完成后,将打开一个单独的窗口用于模拟环境可视化。下图是模拟环境窗口的快照。
运行仿真。图形窗口图显示了车辆在仿真环境中所走过的路径。
sim (modelName);
关闭模型和图形窗口关上(hFig) close_system (modelName)关闭(hScene)
imref2d
(图像处理工具箱)