主要内容

公路车辆多路径雷达反射跟踪

这个例子展示了在多路径雷达反射存在的高速公路上跟踪车辆的挑战。它还展示了一种使用扩展目标跟踪器的鬼滤波方法,以同时过滤鬼检测和跟踪目标。

介绍

汽车雷达传感器对驾驶过程中遇到的不利环境条件(如雾、雪、雨和强烈的阳光)具有很强的耐受性。汽车雷达传感器具有这种优势,因为与可见光传感器(如激光雷达和相机)相比,它们工作的波长要大得多。使用大波长的一个副作用是,雷达传感器周围的表面像镜子一样,由于多路径传播而产生不希望的检测。这些检测通常被称为鬼检测因为它们似乎来自于没有目标的地区。这个示例向您展示了这些多路径反射对使用雷达探测设计和配置目标跟踪策略的影响。有关多路径现象和鬼影探测模拟的更多细节,请参阅模拟多路径返回引起的雷达回波的例子。

在本例中,您模拟了城市公路驾驶场景中雷达传感器的多路径检测。这条公路是模拟的,在公路的两侧设置了障碍物。这个场景由一辆自我汽车和四辆在高速公路上行驶的其他汽车组成。ego车辆配备了4个雷达传感器,提供360度的覆盖。该图像显示了雷达传感器的配置和传感器扫描的检测。红色区域表示雷达传感器的视场,黑点表示探测结果。

雷达传感器报告从车辆和高速公路两侧的路障检测到的情况。雷达也报告探测到似乎不是来自任何真实的物体。这是由于雷达信号的多路径传播而产生的幽灵探测。目标跟踪器假设所有的检测都来源于真实物体或视场内均匀分布的随机杂波。与这个假设相反,鬼波检测通常比杂波更持久,表现得像真实目标的检测。由于这个原因,目标跟踪算法很有可能从这些检测产生假轨迹。在用跟踪器处理雷达扫描之前,过滤掉这些检测是很重要的。

生成传感器数据

此示例中使用的场景是使用drivingScenario类。您使用radarDataGenerator系统对象™用于模拟雷达从直接路径和场景中的反射返回。的HasGhosts传感器的属性指定为真正的来模拟多路径反射。场景和传感器模型的创建包含在helper函数中helperCreateMultipathDrivingScenario,它附在本示例中。传感器模拟获得的数据集记录在MAT文件中,该文件包含从雷达和相应的传感器配置返回的数据。如果需要记录不同场景或不同传感器配置的数据,可以使用如下命令:

helperRecordData(场景,egoVehicle,传感器,fName);
%创建场景[scenario, egoVehicle, sensors] = helperCreateMultipathDrivingScenario;%加载记录的数据负载(“MultiPathRadarScenarioRecording.mat”“detectionLog”“configurationLog”);

雷达处理链:雷达探测到跟踪清单

在本节中,您将设置一个集成算法来同时过滤雷达探测和跟踪扩展的目标。框图说明了本示例中使用的雷达处理链。

接下来,您将了解这些步骤中的每一个步骤以及相应的助手函数。

多普勒分析

雷达传感器报告所测得的反射信号的相对径向速度。在这一步中,利用测量到的探测径向速度来确定目标是静态的还是动态的[1]。在以前的雷达扫描中,很大比例的雷达探测来自ego飞行器周围的静态环境。因此,将每个检测分为静态检测和动态检测,有助于提高对场景的理解。您可以使用helper函数helperClassifyStaticDynamic将每个检测分为静态检测和动态检测。

静态的反射镜

静态环境通常也是雷达传感器报告的鬼反射的主要原因。在对数据集进行分割并找到静态检测后,对其进行处理,在ego vehicle的坐标系中找到二维线段。首先,使用DBSCAN算法将静态检测聚类到ego车辆周围的不同聚类中。其次,在每个集群上放置一个2d线段。这些拟合的线段定义了可能的反射面,用于信号传播回雷达。您可以使用helper函数helperFindStaticReflectors从静态检测中找到这些二维线段。

闭塞的分析

表面的反射产生雷达传感器的探测,而雷达传感器似乎是从反射器后面发出的。在将动态检测从雷达中分割出来之后,您可以使用简单的遮挡分析来确定雷达检测是否在一个可能的反射器后面被遮挡。因为信号可以通过静态或动态对象反映出来,所以需要分两步执行遮挡分析。首先,用代表静态反射面的二维线段对遮挡进行动态检测。您可以使用helper函数helperClassifyGhostsUsingReflectors分类检测是否被静态反射器遮挡。其次,该算法使用来自扩展跟踪算法的预测轨迹信息来检查场景中动态物体的遮挡情况。该算法仅使用来自跟踪器的确认轨迹,以防止在存在试探性或假轨迹时雷达探测的过过滤。您可以使用helper函数helperClassifyGhostsUsingTracks对检测是否被动态对象遮挡进行分类。

这个处理雷达探测并对它们进行分类的整个算法被包装到一个更大的辅助函数中,helperClassifyRadarDetections,将检测列表分为四大类:

  1. 目标检测——这些检测来自场景中真实的动态目标。

  2. 环境检测——这些检测被分类为源自静态环境。

  3. 鬼(静态)-这些探测被分类为源自动态目标,但通过静态环境反射。

  4. 鬼(动态)-这些检测被分类为源自动态目标,但通过其他动态对象反射。

安装GGIW-PHD扩展对象跟踪器

利用扩展目标跟踪器对目标检测进行处理。在本例中,您使用伽玛高斯逆Wishart概率假设密度(GGIW-PHD)扩展目标跟踪器。GGIW-PHD跟踪器将目标建模为椭圆形状,测量模型假设目标范围内的检测是均匀分布的。该模型允许目标接受双跳鬼探测,这有较高的概率被误分类为真实目标。这些双弹鬼探测报告的多普勒测量与目标的实际运动不一致。当这些来自同一目标的虚目标检测和真实目标检测被估计为属于同一检测分区时,错误的多普勒信息可能会导致航迹估计发散。

为了解决这一问题,跟踪器处理了测量噪声方差较大的距离率测量,以解决目标测量模型中的这一缺陷。该跟踪器还使用了高分配阈值和低合并阈值的组合。高分配阈值允许跟踪器减少从鬼目标检测产生的新组件,这些新组件被误分类为目标检测。较低的合并阈值使跟踪器能够丢弃轨迹的校正组件(假设),这些组件可能由于鬼影检测的校正而偏离。

你用trackerPHD系统对象™。有关扩展对象跟踪器的更多细节,请参阅基于雷达和摄像头的公路车辆扩展目标跟踪(自动驾驶工具箱)的例子。

配置的传感器从记录到设置跟踪器[~, sensorConfigurations] = helperAssembleData(detectionLog{1},configurationLog{1});%配置跟踪器使用GGIW-PHD滤波器,具有恒定转速运动模型i = 1:numel(sensorConfigurations) sensorConfigurations{i}。FilterInitializationFcn = @helperInitGGIWFilter;sensorConfigurations{}。SensorTransformFcn = @ctmeas;结束%使用带有名称-值对的trackerPHD创建跟踪器追踪= trackerPHD (“SensorConfigurations”sensorConfigurations,...“PartitioningFcn”@ (x) helperMultipathExamplePartitionFcn (x, 2、5),...“AssignmentThreshold”, 450,...“ExtractionThreshold”, 0.8,...“ConfirmationThreshold”, 0.85,...“MergingThreshold”25岁的...“DeletionThreshold”1飞行,...“出生率”1飞行,...“HasSensorConfigurationsInput”,真正的...);

运行场景和跟踪对象

接下来,您将推进该场景,使用来自传感器的记录测量,并使用前面描述的算法处理它们。通过使用广义最优子模式分配(GOSPA)度量来分析跟踪算法的性能。您还可以通过估计雷达探测的真实分类和估计分类之间的混淆矩阵来分析分类滤波算法的性能。通过属性获取检测的真实分类信息helperTrueClassificationInfohelper函数。

创建trackGOSPAMetric对象来计算GOSPA度量gospaMetric = trackGOSPAMetric (“距离”“自定义”...“DistanceFcn”@helperGOSPADistance,...“CutoffDistance”35);%创建结果可视化显示显示= helperMultiPathTrackingDisplay;用于鬼影滤波的预测跟踪列表predictedTracks = objectTrack.empty (0,1);%混淆矩阵confMat = 0(5 5元素个数(detectionLog));% GOSPA规gospa = 0(4元素个数(detectionLog));%地面实况groundTruth = scenario.Actors(2:结束);i = 1:元素个数(detectionLog)%先进的场景可视化的地面真相推进(场景);%当前时间时间= scenario.SimulationTime;%检测和传感器配置[detectionLog, configurations] = helperAssembleData(detectionLog{i},configurationLog{i});%预测已确认的轨迹到当前时间,用于对鬼进行分类如果isLocked(tracker) predictedTracks = predictTracksToTime(tracker,“确认”、时间);结束将雷达探测分类为目标、幽灵或静态环境[target, ghostStatic, ghostDynamic, static, reflectors, classificationInfo] = helperClassifyRadarDetections(detections, egoVehicle, predictedTracks);通过从目标和传感器配置到跟踪器的检测confirmedTracks =跟踪器(目标,配置,时间);%可视化结果显示(egoVehicle, sensor, targets, confirmedTracks, ghostStatic, ghostDynamic, static, reflectors);%计算GOSPA指标[gospa(1, i),~,~,gospa(2,i),gospa(3,i),gospa(4,i)] = gospaMetric(confirmedTracks, groundTruth);%获得真实的分类信息并生成混淆矩阵trueClassificationInfo = helperTrueClassificationInfo(检测);confMat(:,:,i) = helperconfusimatrix (trueClassificationInfo, classificationInfo);结束

结果

动画和快照分析

下面的动画显示了雷达数据处理链的结果。车辆周围的黑色椭圆代表估计的轨迹。根据算法预测的分类,雷达探测被可视化为四种不同的颜色。可视化中的黑点表示静态雷达目标探测。注意,这些检测被黑线重叠,黑线表示使用DBSCAN算法找到的静态反射器。褐红色标记表示扩展目标跟踪器处理的检测,绿色和蓝色标记分别表示通过静态目标和动态目标反射的雷达检测。注意,跟踪器能够在场景中保持所有四辆车的轨迹。

接下来,使用模拟期间捕获的不同快照分析算法的性能。下面的快照是在3秒内拍摄的,显示了自我汽车前面的情况。此时,自我车辆正在接近缓慢移动的卡车,左侧雷达传感器通过左侧屏障观察到这些物体的反射。这些检测就像屏障中这些物体的镜像检测。注意,黑线估计作为一个2-D反射器是在这些探测的视线。因此,该算法能够正确地将这些检测结果分类为静态目标反射的鬼目标。

f = showSnaps(显示,1:2,1);如果~isempty(f) ax = findall(f,“类型”“轴”“标签”“birdsEyePlotAxes”);斧子。XLim = [-10 30];斧子。YLim = [-10 20];结束

图包含一个轴对象和其他类型的uipanel对象。axis对象包含13个类型为patch、line、text的对象。这些对象代表车道,轨迹,(历史),反射器,目标,鬼(S),鬼(D),静态。

接下来,使用4.3秒捕获的快照分析算法的性能。此时,自我车辆离卡车更近了,卡车大约在绿色车辆和自我车辆之间。在这些情况下,卡车的左侧作为一个强大的反射器,并产生鬼探测。绿色车辆右半部分的检测来自绿色车辆的二次反弹检测,信号在卡车反射后返回到传感器。该算法能够将这些检测分类为由动态物体反射产生的鬼检测,因为估计的卡车范围是在这些检测的直接视线内。

f = showSnaps(显示、1:2、2);如果~isempty(f) ax = findall(f,“类型”“轴”“标签”“birdsEyePlotAxes”);斧子。XLim = [-10 30];斧子。YLim = [-10 20];结束

图包含一个轴对象和其他类型的uipanel对象。axis对象包含13个类型为patch、line、text的对象。这些对象代表车道,轨迹,(历史),反射器,目标,鬼(S),鬼(D),静态。

还要注意自我车左边的黄色车表示的过往车辆。这些检测似乎来自黄色车辆的不可见表面,是对障碍物的两次反弹检测,通过通过车辆的正面反射。这些幽灵探测被错误地归类为目标探测,因为它们似乎是从车辆的估计范围内发出的。在同一位置,当信号从屏障反射并返回到传感器时,位于屏障之外的探测也是对正面的双反射探测。由于这些探测超出了轨道的范围,而且轨道在视线的直接范围内,它们被归类为来自动态物体反射的鬼探测。

性能分析

利用GOSPA度量及其相关组件定量评估跟踪算法的性能。度量值越低,跟踪性能越好。在下图中,射失度量的分量在开始的几个步骤后仍然为零,表示跟踪器的建立延迟以及被遮挡的目标。分量的零值表明跟踪器没有错过任何目标。的False-tracks在第85个时间步时,度量的分量增加了1秒左右。这表示跟踪器在短时间内从被错误分类为真实目标的鬼探测中确认的虚假跟踪。

图;情节(gospa ',“线宽”2);传奇(“GOSPA”“本地化GOSPA”“射失GOSPA”“False-tracks GOSPA”);

图中包含一个轴对象。轴对象包含4个类型为line的对象。这些对象分别代表GOSPA、Localization GOSPA、missing -target GOSPA、False-tracks GOSPA。

与跟踪算法类似,您还可以使用混淆矩阵[2]定量分析雷达探测分类算法的性能。表中显示的行表示雷达探测的真实分类信息,列表示预测的分类信息。例如,第一行的第二个元素定义了被预测为来自静态物体反射的幽灵的目标探测的百分比。

90%以上的目标检测被正确分类。然而,有一小部分目标探测被误分类为来自动态反射的鬼。此外,约3%来自静态物体反射的幽灵和20%来自动态物体反射的幽灵被误分类为目标,并发送给跟踪器进行处理。在这个例子中,通常的情况是在车辆的估计范围内检测到两次反弹的反射。此外,本例中使用的分类算法并不是为了在场景中发现错误警报或杂波。因此,混淆矩阵的第五列为零。由于虚警在视场内的空间分布,大多数虚警检测分为静态物体反射和动态物体反射。

%在所有步骤上累积混淆矩阵confusionMatrix = (confMat, 3)之和;numElements = (confusionMatrix, 2)之和;numElemsTable = array2table (numElements,“VariableNames”, {检测的数量},“RowNames”, {“目标”“鬼(S)”“鬼(D)”“环境”“混乱”});disp (的真实信息); disp (numElemsTable);
探测的真实信息数____________________目标1974鬼(S) 3203鬼(D) 847环境27039杂波123
%计算百分比percentMatrix = confusionMatrix. / numElements * 100;percentMatrixTable = array2table(圆(percentMatrix, 2),“RowNames”, {“目标”“鬼(S)”“鬼(D)”“环境”“混乱”},...“VariableNames”, {“目标”“鬼(S)”“鬼(D)”“环境”“混乱”});disp (True vs Predicted Confusion Matrix (%)); disp (percentMatrixTable);
True vs Predicted Confusion Matrix (%) Targets Ghost (S) Ghost (D) Environment Clutter _______ _________ _________ ___________ _______ Targets 90.27 0.61 8.61 0.51 0 Ghost (S) 3.25 86.42 10.02 0.31 0 Ghost (D) 19.6 0 80.4 0 0 Environment 1.27 2.93 3.69 92.1 0杂波13.82 67.48 17.07 1.63 0

总结

在本例中,您模拟了在城市公路行驶场景中由于多路径传播而产生的雷达检测。你配置了一个数据处理算法来同时过滤鬼影探测和追踪高速公路上的车辆。您还使用GOSPA度量和混淆矩阵分析了跟踪算法和分类算法的性能。

参考文献

先知,罗伯特,等。《汽车场景中的瞬时鬼影检测识别》2019 IEEE雷达大会(RadarConf).IEEE 2019。

克劳斯,弗洛里安,等。"利用机器学习检测汽车雷达中的鬼图像"2020 IEEE第23届智能交通系统国际会议(ITSC).IEEE 2020。