配置和使用鸟瞰图来显示传感器覆盖范围、探测和自我车辆的跟踪结果。
在ego车辆周围的二维地图上显示记录的车辆坐标数据是分析传感器覆盖、检测和跟踪结果的重要部分。使用
要显示此信息的快照一段时间或流数据并有效更新显示。birdsEyePlot
此示例读取预先录制的传感器数据和跟踪结果。它包括以下内容:
车道信息
视觉对象
雷达对象
轨道的位置、速度、协方差矩阵和标签
最重要的对象
以上信息以每秒20次更新的高速率被记录,除了视觉检测以每秒10次更新的速度被记录。
传感器配置文件定义视觉传感器的位置和覆盖区域和具有两个覆盖模式的雷达传感器。这些覆盖区域将显示在鸟瞰图上。
请注意birdsEyePlot
物体建立了一个非常特殊的车辆坐标系统,其中x轴指向车辆前方,y轴指向车辆左侧,z轴指向地面上方。坐标系统的原点通常定义为后桥的中心,传感器的位置相对于原点定义。有关详细信息,请参见自动化驾驶工具箱中的坐标系。
配置鸟瞰图需要两个步骤。在第一步中,创建鸟瞰图,它建立了上面描述的坐标系统,其中x轴向上,y轴向左。可以定义每个方向上的轴的极限。在这个向前看的例子中,我们将场景定义为在ego车辆前面90米和两边35米处。
创建一个鸟瞰图并限制其轴线bep = birdseyebplot('xlimits'90年[0],“Ylimits”35 [-35]);
在第二步中,创建鸟瞰图。鸟瞰图提供了以下各种绘图仪,每一种都配置用于绘制特定的数据类型。它们包括:
CoverageAreaplotter - 绘图传感器覆盖区域
DetectionPlotter - 绘图对象检测
Trackplotter - 情节曲目,跟踪不确定性和历史迹纵横道
LaneBoundaryPlotter - 情节车道边界
pathPlotter—绘制物体轨迹
为一个视觉传感器和两个雷达模式创建一个覆盖区域绘图仪帽(1)= coverageAreaPlotter (cep“FaceColor”那“蓝”那'Edgecolor'那“蓝”);帽(2)= coverageAreaPlotter (cep),“FaceColor”那'红色的'那'Edgecolor'那'红色的');帽(3)= coverageAreaPlotter (cep,“FaceColor”那'红色的'那'Edgecolor'那'红色的');
负载传感器配置数据。传感器配置包括:
传感器相对于轴上的位置(x,y),以米为单位
传感器范围,以米为单位
传感器相对于x轴的偏航角,以度数表示
传感器视场(FOV),以度数表示
加载('sensorconfigurationdata.mat');%使用传感器配置绘制传感器覆盖区域。想象%传感器使用阴影蓝色覆盖区域和雷达模式阴影%的红色。为了i = 1:3 plotcoveragearea(帽(i),[sensorparams(i).x,sensorparams(i).y],......SensorParams(i).range,sensorparams(i).yawangle,sensorparams(i).fov);结束%添加标题标题(“鸟”眼中的阴谋”)
上面的显示显示了视觉传感器和两种雷达传感器模式的覆盖范围。
视觉传感器位于汽车中心的起源(后桥)前面的3.30米,范围为150米,达到38度的FOV。
雷达位于汽车中心的原产地前方3.38米。雷达长距离模式的范围为174米,FOV为20度,而中档模式的范围为60米,FOV为90度。请注意,覆盖区域在自助式车辆前面的90米处截断,每侧35米。
此示例显示了前瞻性的情景;但是,您可以定义覆盖区域围绕着自我的载体。例如,一个从车辆后部覆盖的传感器将以偏航角为方向。
接下来的几行读取记录的数据,为接下来的步骤做准备。
%从文件中加载记录的数据加载(“BirdsEyePlotExampleData.mat”那'datatodisplay');%跳到第125次步骤,其中有5个视觉检测和多个雷达目标和航迹。Timestep = 125;%从记录的文件中提取该时间步骤的各种数据[visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions,......trackvelocity, trackcovariance, trackLabels, MIOlabel, miposition,......miovelocity] = readdataframe(DatatoDisplay(Timestep));
接下来,创建绘图仪来显示记录的视觉和雷达检测
%创建一个视觉检测绘图仪,把它放在一个结构体中供将来使用bepplotters.vision = DetectionPlotter(BEP,'显示名称'那'视觉检测'那......“MarkerEdgeColor”那“蓝”那“标记”那“^”);将所有雷达检测合并到一个条目中,并将其存储以备以后更新bepPlotters。雷达= detectionPlotter (cep),'显示名称'那'雷达检测'那......“MarkerEdgeColor”那'红色的');呼叫视觉检测绘图仪plotDetection (bepPlotters。愿景,visionObjectsPos);%重复上述雷达检测plotDetection (bepPlotters。雷达、radarObjectsPos);
在向鸟瞰图中添加曲目时,我们提供位置,速度和位置协方差信息。绘图仪负责显示曲目历史记录路径,但由于这是一个帧,因此不会有历史记录。
%创建一个轨道绘图仪,显示最后10个跟踪更新bepPlotters。跟踪= trackPlotter (cep),'显示名称'那跟踪对象的那......'历史中心'10);%创建一个曲目绘图仪,绘制最重要的对象bepPlotters。绪= trackPlotter (cep),'显示名称'那“最重要的对象”那......“MarkerFaceColor”那'黑色的');%呼叫曲目绘图仪绘制所有曲目plotTrack (bepPlotters。跟踪,跟踪位置,跟踪速度,跟踪协方差,跟踪标签);%重复最重要的物体(MIO)plotTrack (bepPlotters。MIO, miposition, MIOvelocity, MIOlabel);
绘制车道边界可以利用
目的。要使用它,我们将车道边界保存为抛物面对象,并用它调用绘图仪。抛物面普遍
为车道边界创建一个绘图器bepplotters.laneboundary = Laneboundaryplotter(BEP,......'显示名称'那'车道边界'那“颜色”,[。9 .9 0]);%致电车道边界绘图仪plotLaneBoundary (bepPlotters。LaneBoundary laneBoundaries);
录制文件包含时间相关的传感器检测,跟踪信息和车道边界。下一个代码显示如何播放录制并在上面配置的鸟瞰图上显示结果。
注意:提供所有其他帧的视觉检测。在这种情况下,显示缺乏新的传感器检测是有益的。为此,只需将空数组传递给适当的绘图仪以删除显示器的先前检测。
%倒带到录音文件的开头timestep = 0;numsteps = numel(DataToDisplay);%场景中的步骤数只要鸟的眼图打开,%循环通过场景而timeStep < numSteps && isvalid(BEP.Parent)%提升timeSteptimestep = timestep + 1;%捕获当前时间以获得真实的显示率抽搐;%读取该时间步骤的数据[visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions,......trackvelocity, trackcovariance, trackLabels, MIOlabel, miposition,......miovelocity] = readdataframe(DatatoDisplay(Timestep));%绘制检测plotDetection (bepPlotters。愿景,visionObjectsPos);plotDetection (bepPlotters。雷达、radarObjectsPos);%情节曲目和mioplotTrack (bepPlotters。跟踪,跟踪位置,跟踪速度,跟踪协方差,跟踪标签);plotTrack (bepPlotters。MIO, miposition, MIOvelocity, MIOlabel);%地块车道边界plotLaneBoundary (bepPlotters。LaneBoundary laneBoundaries);%记录的数据以每秒20帧的速率获得。%暂停50毫秒,以获得更现实的显示率。你%在处理数据和表单跟踪时不需要此% 环形。暂停(0.05 - toc)结束
此示例演示了如何配置和使用鸟瞰图对象和与其相关联的一些各种绘图仪。
尝试使用轨道和最重要的对象绘图仪或使用鸟瞰图与不同的记录文件。
readDataFrame- 从DataFrame中提供的数据中提取单独的字段
函数[visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions,......trackvelocity, trackcovariance, trackLabels, MIOlabel, miposition,......MIOvelocity = readDataFrame(dataFrame) visionObjectsPos = dataFrame.visionObjectsPos;radarObjectsPos = dataFrame.radarObjectsPos;laneBoundaries = dataFrame.laneBoundaries;trackPositions = dataFrame.trackPositions;trackVelocities = dataFrame.trackVelocities;trackCovariances = dataFrame.trackCovariances;trackLabels = dataFrame.trackLabels;MIOlabel = dataFrame.MIOlabel;MIOposition = dataFrame.MIOposition;MIOvelocity = dataFrame.MIOvelocity;结束