将检测转换为objectDetection
格式
这些示例展示了如何将传感器的本地格式的实际检测转换为objectDetection
对象。objectDetection
是工具箱中大多数跟踪过滤器和跟踪器的标准输入格式。这六个示例逐步展示了如何进行设置objectDetection
具有各种跟踪场景。
一个objectDetection
报告必须包含检测的基本信息:时间
和测量
.它还可以包含其他关键属性,包括MeasurementNoise
,SensorIndex
,ObjectClassID
,ObjectClassParameters
,ObjectAttributes
,MeasurementParameters
.设置MeasurementParameters
正确地使过滤器或跟踪器能够解释测量在创建中至关重要objectDetection
.第一个示例显示了一个的基本设置objectDetection
.示例2到5着重于如何正确设置MeasurementParameters
.最后一个示例展示了如何进行设置ObjectClassParameters
.
例1:在静止矩形帧中转换检测
考虑一个带有固定塔和卡车的二维跟踪场景。位于场景框架原点的塔上装有雷达传感器。在 = 0秒,(10,20,0)米位置的卡车正行驶 方向,速度为5m /s。
雷达传感器在场景框架中输出三维位置和速度测量值,因此测量值可写为:
测量1 = [10;20;0;5;0;0];% (x, y, z, vx; v; vz]
您可以指定其他属性,例如MeasurmentNoise
,SensorIndex
,ObjectClassID
,ObjectAttributes
为objectDetection
对象。例如,假设位置和速度测量噪声的标准差分别为10m和1m /s,则可以定义测量误差协方差矩阵为:
measurementNoise1 = diag([10*ones(3,1);ones(3,1)]);
创建一个objectDetection
使用这些值。
Time1 = 0;检测时间%detect1 = objectDetection(time1,measurement1,“MeasurementNoise”measurementNoise1)
detect1 = objectDetection with properties: Time: 0 Measurement: [6x1 double] MeasurementNoise: [6x6 double] SensorIndex: 1 ObjectClassID: 0 objectclasparameters: [] MeasurementParameters: {} ObjectAttributes: {}
例2:在移动矩形帧中转换检测
考虑一个2d跟踪场景,其中有一辆小轿车和一辆卡车。在 = 0秒时,汽车相对于场景框架位于(20,10,0)米处。汽车以5米/秒的速度在 场景框架的方向。小车的局部(向前)车架,{ , },从场景框架旋转90度角。在前面的例子中,一辆位于(10,20,0)米位置的卡车正行驶 方向,速度为5m /s。
与此同时,自我汽车在自己的局部框架内观察卡车,
,
}。在实际应用中,您可以直接从ego汽车的传感器系统中获得测量结果。由图可知,卡车的尺寸为[10;10;0 5;5;0]相对于{
,
}帧按[的顺序排列x, y, z, vx; v,登陆
]。
测量2 = [10;10;0;5;5;0);% (x, y, z, vx; v; vz]
要指定对象检测,需要指定从场景矩形框架{的坐标转换
,
}到局部矩形框架{
,
}。你可以使用MeasurementParameters
的属性objectDetection
来指定这些转换参数。在转换中,场景框架是父车架,和小我车的局部车架是一样的孩子框架。
的
框架
属性将子框架类型设置为'矩形的
(在这个例子中)或球形的
.的
OriginPosition
属性设置子框架相对于父框架的原点位置。的
OriginVelocity
属性设置子框架相对于父框架的原点速度。
MP2 = struct();MP2。帧=“矩形”;MP2。OriginPosition = [20;10;0);MP2。OriginVelocity = [0;5;0);
使用从欧拉角转换的旋转矩阵指定旋转。集IsParentToChild
为true表示从父帧到子帧的旋转。
rotAngle2 = [90 0 0];%(偏航、俯仰、行)rotAngle2 =四元数;“Eulerd”,“ZYX股票”,“帧”);rotMatrix2 = rotmat(rotQuat2,“帧”);MP2。Orientation = rotMatrix2;MP2。IsParentToChild = true;
指定的测量。
集
HasElevation
和HasAzimuth
既假
,因为子框架是矩形的。集
HasRange
来真正的
启用位置测量。集
HasVelocity
来真正的
启用速度测量。
MP2。HasElevation = false;MP2。HasAzimuth = false;MP2。HasRange = true;MP2。HasVelocity = true;
创建objectDetection
对象,并指定MeasurementParameters
财产。
Time2 = 0;detection2 = objectDetection(时间2,测量2,“MeasurementParameters”, MP2)
detection2 = objectDetection with properties: Time: 0 Measurement: [6x1 double] MeasurementNoise: [6x6 double] SensorIndex: 1 ObjectClassID: 0 objectclasparameters: [] MeasurementParameters: [1x1 struct] ObjectAttributes: {}
要验证对象检测,可以使用cvmeas
度量函数,用于重新生成度量。的cvmeas
函数可以以目标的实际状态和测量参数作为输入。的状态输入cvmeas
的顺序为[x, vx; y, v, z,登陆
]。如下输出所示,结果与measurement2
.
state2 =[10; 5、20 0,0,0);%卡车状态[x;vx;y;vy;z;vz]cvmeas2 = cvmeas(state2,MP2)%测量单位[x;y;z;vx;vy;vz]
cvmeas2 =6×110.0000 10.0000 0 -5.0000 0
示例3:在移动球面框架中转换检测
考虑前面的跟踪场景,只有现在测量是由具有球形输出帧的扫描雷达获得的。雷达的视轴方向与 方向(同 方向) = 0秒。
由于卡车和汽车之间的相对速度是在视线方向上的,测量结果,其顺序为[方位角;海拔高度;范围;Range-rate],可得:
measurement3 = [45;0;10 /信德(45);5 /信德(45)];% (az; el rng; rr)。单位是度。
指定测量参数。
MP3 = struct();MP3。帧=“球”;子框架是球形的。MP3。OriginPosition = [20;10;0);MP3。OriginVelocity = [0;5;0);%指定旋转。rotAngle3 = [90 0 0];(rotAngle3;“Eulerd”,“ZYX股票”,“帧”);rotMatrix3 = rotmat(rotQuat3,“帧”);MP3。Orientation = rotMatrix3;MP3。IsParentToChild = true;
集HasElevation
和HasAzimuth
来真正的
在球形子框架中输出方位角和仰角。集HasRange
和HasVelocity
既真正的
分别输出距离和距离速率。
MP3。HasElevation = true;MP3。HasAzimuth = true;MP3。HasRange = true;MP3。HasVelocity = true;
创建objectDetection
对象。
Time3 = 0;detection3 = objectDetection(时间3,测量3,“MeasurementParameters”、MP3)
detection3 = objectDetection with properties: Time: 0 Measurement: [4x1 double] MeasurementNoise: [4x4 double] SensorIndex: 1 ObjectClassID: 0 objectclasparameters: [] MeasurementParameters: [1x1 struct] ObjectAttributes: {}
使用以下命令验证结果cvmeas
.结果与measurement3
.
State3 = [10;5;20;0;0];% [x, vx; y; v; z; vz]cvmeas3 = cvmeas(state3,MP3)% (az; el rng; rr)
cvmeas3 =4×145.0000 14.1421 -7.0711
例4:在三帧之间转换检测
考虑前面的跟踪场景,现在雷达的轴视方向从旋转45度 汽车的局部框架方向。
新的测量,用新的球框架表示{ , },有:
测量4 = [0;0;10 /信德(45);5 /信德(45)];% (az; el rng; rr)
对于测量参数,可以将旋转指定为从场景框架到新球面框架的135度旋转。或者,您可以将其指定为两个连续的旋转:
,
}到矩形{
,
}和矩形{
,
}到球形{
,
}。控件支持的多帧转换特性万博1manbetxMeasurementParameters
属性,本例使用后一种方法。
第一组测量参数与MP2
中使用的示例2.MP2
从矩形{的旋转
,
}到矩形{
,
}。对于第二组测量参数,MP4
,则只需要指定从矩形{旋转45度
,
}到球面{
,
}。
MP4 = struct();MP4。帧=“球”;MP4。OriginPosition = [0;0;0);%并置位置。MP4。OriginVelocity = [0;0;0);相同的起始速度。%指定旋转。rotAngle4 = [45 0 0];(rotAngle4;“Eulerd”,“ZYX股票”,“帧”);rotMatrix4 = rotmat(rotQuat4,“帧”);MP4。Orientation = rotMatrix4;MP4。IsParentToChild = true;在球形子框架中指定输出。MP4。HasElevation = true;MP4。HasAzimuth = true;MP4。HasRange = true;MP4。HasVelocity = true;
创建组合MeasurementParameters
输入,货币政策委员会
.
MPc =[MP4 MP2];
请注意,测量参数的顺序在这里很重要。指定的货币政策委员会
表示首先执行的坐标变换对应于MP2
然后进行坐标变换对应于MP4
.
接下来,创建objectDetection
对象。
Time4 = 0;detection4 = objectDetection(时间4,测量4,“MeasurementParameters”, MPc)
detection4 = objectDetection with properties: Time: 0 Measurement: [4x1 double] MeasurementNoise: [4x4 double] SensorIndex: 1 ObjectClassID: 0 objectclasparameters: [] MeasurementParameters: [1x2 struct] ObjectAttributes: {}
使用以下命令验证结果cvmeas
.结果与measurement4
.
state = [10;5;20;0;0];% [x, vx; y; v; z; vz]cvmeas4 = cvmeas(statstat4,MPc)% (az; el rr; rrate)
cvmeas4 =4×10.0000 0 14.1421 -7.0711
示例5:转换3D检测
考虑一个无人驾驶飞行器(UAV)监视一个区域。在 = 0秒时,无人机相对于全球东北向下(NED)框架处于(5,5,-1)km的位置。UAV的速度为(-50,-100,5)m/s。无人机机体框架{的方位 , , }相对于全局NED框架给出(-120,2,2)偏航,俯仰和横摇度。同时,位于(1,1,0)km位置的汽车正以30米/秒的速度向东移动。无人机使用与车身轴线对齐的雷达系统来测量汽车。
根据这些信息,指定测量转换的运动学参数。
指定无人机机体框架的框架类型、原点位置和原点速度。
MP5 = struct();里。帧=“球”;里。OriginPosition = [5000;5000;-1000);里。OriginVelocity = [-50;-100;5);
指定NED框架到无人机主体框架的旋转。
Rot_angle5 = [-120 2 2];%(偏航、俯仰、滚)Rot_quat5 =四元数(rot_angle;“Eulerd”,“ZYX股票”,“帧”);Rot_matrix5 = rotmat;“帧”);里。取向= Rot_matrix5;里。IsParentToChild = true;
在球面框架中指定输出测量值。
里。HasElevation = true;里。HasAzimuth = true;里。HasRange = true;里。HasVelocity = true;
您可以直接从无人机上的雷达系统获得测量值。在这里,你使用cvmeas
函数,以[方位角;仰角;距离;距离-速率]的顺序获得测量值。
Car_state5 = [1000;0;1000;30;0;0];% [x, vx; y; v; z; vz]。measurement5 = cvmeas(car_state5,MP5);Meas_az5 = measurement5(1)
Meas_az5 = -14.6825
Meas_el5 = measurement5(2)
Meas_el5 = 12.4704
Meas_rng5 = measurement5(3)
Meas_rng5 = 5.7446e+03
Meas_rr5 = measurement5(4)
Meas_rr5 = -126.2063
仰角定义为从x平面到z方向的夹角。这就是为什么相对于无人机来说,地面上的目标仰角是正的。这个约定在整个工具箱中使用。
方位角、仰角、距离、距离率的测量噪声分别为[1,1,20,2]。雷达的索引为2,雷达可以将探测到的目标分类为1,类型为汽车的
.
Index5 = 2;Covariance5 = diag([1;1;20;2]);class5 = 1;
创建一个objectDetection
对象进行检测。
Time5 = 0;detection = objectDetection(时间5,测量5,“SensorIndex”index5,…“MeasurementNoise”covariance5,“ObjectClassID”classID5,“MeasurementParameters”里)
detection = objectDetection with properties: Time: 0 Measurement: [4x1 double] MeasurementNoise: [4x4 double] SensorIndex: 2 ObjectClassID: 1 objectclasparameters: [] MeasurementParameters: [1x1 struct] ObjectAttributes: {}
例6:分类检测
考虑一个视觉跟踪场景,其中相机帧馈送到目标检测器。在这种情况下,检测通常提供对象的分类。考虑一个对象检测器,它输出边界框检测并将对象分类为以下类{'车
”、“行人
”、“自行车
”}。检测器的统计数据由其混淆矩阵捕获C
.创建一个带有边界框测量的检测,行人
的分类,以及混淆矩阵C
定义如下.
C = [0.9 0.05 0.05;…0.05 0.9 0.05;…0.05 0.05 0.9];分类d = 2;%行人ClassParams = struct(“ConfusionMatrix”C);Boundingbox = [250 140 300 400];左上角宽度高度坐标中的边界框detection = objectDetection(0, boundingbox, ObjectClassID=ClassID, objectclasparameters =struct(“ConfusionMatrix”C))
detection = objectDetection with properties: Time: 0 Measurement: [250 140 300 400] MeasurementNoise: [4x4 double] SensorIndex: 1 ObjectClassID: 2 objectclasparameters: [1x1 struct] MeasurementParameters: {} ObjectAttributes: {}