可视化传感器覆盖,检测和跟踪
配置并使用鸟瞰图来显示自我车辆周围的传感器覆盖范围、探测和跟踪结果。
概述
在车辆周围的二维地图上显示车辆坐标记录的数据是分析传感器覆盖、检测和跟踪结果的重要组成部分。使用
在某一特定时间内显示此信息的快照或流数据并有效地更新显示。birdsEyePlot
这个例子读取预先记录的传感器数据和跟踪结果。它包括以下内容:
车道信息
视觉对象
雷达对象
轨道的位置,速度,协方差矩阵和标签
最重要的对象
除视觉检测以每秒10次更新记录外,上述信息以每秒20次更新的高速率记录。
传感器配置文件定义了具有两种覆盖模式的视觉传感器和雷达传感器的位置和覆盖区域。这些覆盖区域将显示在鸟瞰图上。
注意birdsEyePlot
物体设置了一个非常特定的车辆坐标系,其中x轴指向车辆前方,y轴指向车辆左侧,z轴指向地面上方。坐标系的原点通常定义为后轴的中心,传感器的位置是相对于原点定义的。详情请参见自动驾驶工具箱中的坐标系.
定义场景限制和传感器覆盖范围
配置鸟瞰图需要两个步骤。在第一步中,创建了鸟瞰图,它设置了上面描述的坐标系,其中x轴指向上方,y轴指向左侧。可以在每个方向上定义轴的极限。在这个前瞻性的例子中,我们定义了自我车辆前方90米和两侧35米的场景。
创建一个鸟瞰图,并限制其轴。BEP = birdsEyePlot(“Xlimits”, [0 90],“Ylimits”, [-35 35]);
在第二步中,创建鸟瞰图。鸟瞰图提供了以下各种绘图仪,每种绘图仪都配置为绘制特定的数据类型。它们包括:
coverageAreaPlotter -绘制传感器覆盖区域
detectionPlotter -绘图对象检测
trackPlotter -绘制轨迹,轨迹不确定性和历史轨迹
laneBoundaryPlotter -绘制车道边界
pathPlotter -绘制对象轨迹
为一个视觉传感器和两个雷达模式创建一个coverageAreaPlottercap(1) = coverageAreaPlotter(BEP,“FaceColor”,“蓝”,“EdgeColor”,“蓝”);cap(2) = coverageAreaPlotter(BEP,“FaceColor”,“红色”,“EdgeColor”,“红色”);cap(3) = coverageAreaPlotter(BEP,“FaceColor”,“红色”,“EdgeColor”,“红色”);
负载传感器配置数据。传感器配置包括:
传感器相对于轴原点(X,Y)的位置,单位为米
传感器的范围,以米为单位
传感器相对于x轴的偏航角,单位为度
传感器视场(FOV),以度为单位
负载(“SensorConfigurationData.mat”);使用传感器配置绘制传感器覆盖区域。愿景%传感器使用蓝色阴影覆盖区域,雷达模式在阴影中%的红色。为i = 1:3 plotCoverageArea(cap(i), [sensorParams(i).]X, sensorParams(我)。Y),...sensorParams(我)。范围,sensorParams(我)。YawAngle sensorParams(我).FoV);结束添加标题标题(“鸟”眼中的阴谋”)
上图显示了视觉传感器和两种雷达传感器模式的覆盖范围。
视觉传感器位于汽车中心原点(后轴)前3.30米,范围为150米,视场为38度。
雷达位于汽车中心原点前3.38米的位置。雷达远程模式具有174米的射程和20度的FOV,而中程模式具有60米的射程和90度的FOV。请注意,覆盖区域在自我车辆前方90米和两侧35米处被截断。
这个例子展示了一个前瞻性的场景;但是,可以在中定义覆盖区域围绕着自我载体。例如,从车辆后部向后覆盖的传感器将以偏航角为导向.
接下来的几行读取记录的数据,为接下来的步骤做准备。
从文件中加载记录的数据负载(“BirdsEyePlotExampleData.mat”,“dataToDisplay”);跳到第125个时间步,其中有5个视觉检测和%多个雷达目标和轨迹。timeStep = 125;从该时间步骤的记录文件中提取各种数据[visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions,...trackvelocity, trackCovariances, trackLabels, MIOlabel, miposition,...MIOvelocity] = readDataFrame(dataToDisplay(timeStep));
策划检测
接下来,创建绘图仪来显示记录的视觉和雷达探测
创建一个视觉检测绘图仪,把它放在一个结构中以备将来使用bepPlotters。愿景= detectionPlotter(BEP,“DisplayName的”,视觉检测的,...“MarkerEdgeColor”,“蓝”,“标记”,“^”);将所有雷达探测合并到一个条目中,并存储它以供以后更新。bepPlotters。雷达=探测器绘图仪“DisplayName的”,“雷达检测”,...“MarkerEdgeColor”,“红色”);呼叫视觉检测绘图仪plotDetection (bepPlotters。愿景,visionObjectsPos);对雷达探测重复上述步骤plotDetection (bepPlotters。雷达、radarObjectsPos);
绘制轨道和最重要的对象
在将轨道添加到鸟眼图时,我们提供了位置、速度和位置协方差信息。绘图器负责显示轨迹历史轨迹,但由于这是一个单一帧,因此不会有历史。
创建一个显示最近10个音轨更新的音轨绘图仪。bepPlotters。跟踪= trackPlotter(BEP,“DisplayName的”,跟踪对象的,...“HistoryDepth”10);创建一个轨迹绘图仪来绘制最重要的对象。bepPlotters。MIO = trackPlotter(BEP,“DisplayName的”,“最重要的对象”,...“MarkerFaceColor”,“黑”);调用轨道绘图仪绘制所有轨道。plotTrack (bepPlotters。Track, trackPositions, trackvelocity, trackCovariances, trackLabels);%重复最重要对象(MIO)plotTrack (bepPlotters。MIO, miposition, MIOvelocity, MIOlabel);
绘制车道边界
绘制车道边界可以利用
对象。为了使用它,我们将车道边界保存为抛物线laneboundary对象,并使用它调用绘图仪。parabolicLaneBoundary
为车道边界创建绘图器bepPlotters。车道边界=车道边界绘图仪(BEP,...“DisplayName的”,“车道边界”,“颜色”,(。9 .9 0]);调用车道边界绘图器plotLaneBoundary (bepPlotters。LaneBoundary laneBoundaries);
显示录制文件中的场景
记录文件包含时间相关的传感器检测、跟踪信息和车道边界。下面的代码显示了如何回放录音并在上面配置的鸟瞰图上显示结果。
注:每隔一帧提供视觉检测。在这种情况下,显示缺乏新的传感器检测是有益的。要做到这一点,只需将一个空数组传递给适当的绘图仪,以从显示中删除以前的检测。
倒回到录制文件的开头timeStep = 0;numSteps = numel(数据显示);%场景中的步骤数只要鸟瞰图是打开的,就循环整个场景。而timeStep < numSteps && isvalid(BEP.Parent)提升timeSteptimeStep = timeStep + 1;捕获当前时间以获得真实的显示速率抽搐;读取该时间步长的数据[visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions,...trackvelocity, trackCovariances, trackLabels, MIOlabel, miposition,...MIOvelocity] = readDataFrame(dataToDisplay(timeStep));Plot检测百分比plotDetection (bepPlotters。愿景,visionObjectsPos);plotDetection (bepPlotters。雷达、radarObjectsPos);%绘制轨迹和MIOplotTrack (bepPlotters。Track, trackPositions, trackvelocity, trackCovariances, trackLabels);plotTrack (bepPlotters。MIO, miposition, MIOvelocity, MIOlabel);%地块车道边界plotLaneBoundary (bepPlotters。LaneBoundary laneBoundaries);记录的数据以每秒20帧的速率获得。暂停50毫秒,以获得更真实的显示速率。你%在处理数据和表单轨道时不需要这个%循环。暂停(0.05 - toc)结束
总结
这个示例演示了如何配置和使用鸟瞰图对象以及与之关联的各种绘图仪。
尝试使用轨道和最重要的对象绘图仪,或者使用不同的录音文件的鸟瞰图。
金宝app支持功能
readDataFrame-从dataFrame中提供的数据中提取单独的字段
函数[visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions,...trackvelocity, trackCovariances, trackLabels, MIOlabel, miposition,...MIOvelocity] = readDataFrame(dataFrame) visionObjectsPos = dataFrame.visionObjectsPos;radarObjectsPos = datafframe .radarObjectsPos;laneBoundaries = datafframe .laneBoundaries;trackPositions = dataFrame.trackPositions;trackvelocity = datafframe . trackvelocity;trackCovariances = dataFrame.trackCovariances;trackLabels = dataFrame.trackLabels;MIOlabel = datafframe .MIOlabel;miposition = datafframe . miposition;MIOvelocity = datafframe .MIOvelocity;结束