主要内容

将检测转换为objectDetection格式

这些示例展示了如何将传感器的本机格式的实际检测转换为objectDetection对象。objectDetection是传感器融合和跟踪工具箱中大多数滤波器和跟踪器的标准输入格式。这五个例子逐步展示了如何设置objectDetection使用不同的跟踪场景。

  • 示例1在固定的矩形框架中配置检测。

  • 示例2在移动的矩形帧中配置检测。

  • 示例3在移动的球形框架中配置检测。

  • 示例4演示如何表示通过连续旋转获得的检测。

  • 示例5显示如何配置3-D检测。

一个objectDetection报告中必须包含基本的检测信息:时间而且测量.它还可以包含其他关键属性,包括MeasurementNoiseSensorIndexObjectClassIDObjectAttributes,MeasurementParameters.设置MeasurementParameters正确地让过滤器或跟踪器能够解释测量结果在创建过程中至关重要objectDetection.第一个示例显示了控件的基本设置objectDetection.其余的示例主要关注如何正确设置MeasurementParameters

例1:固定矩形框架中的转换检测

考虑一个有固定塔和卡车的二维跟踪场景。位于场景框架起点的塔配备了雷达传感器。在 t = 0秒时,卡车在(10,20,0)米位置正行驶 X 速度为5米/秒的方向。

雷达传感器在场景帧中输出三维位置和速度测量值,测量值可写成:

measuent1 = [10;20;0;5;0;0];% (x, y, z, vx; v; vz]

您可以指定其他属性,例如MeasurmentNoiseSensorIndexObjectClassID,ObjectAttributesobjectDetection对象。例如,假设位置和速度测量噪声的标准差分别为10 m和1 m/s,则可以定义测量误差协方差矩阵为:

measurementNoise1 = diag([10*ones(3,1);ones(3,1)]);

创建一个objectDetection使用这些值。

Time1 = 0;%检测时间detect1 = objectDetection(time1, measuent1,“MeasurementNoise”measurementNoise1)
detect1 = objectDetection with properties: Time: 0 Measurement: [6x1 double] measuentnoise: [6x6 double] SensorIndex: 1 ObjectClassID: 0 measuentparameters: {} ObjectAttributes: {}

例2:移动矩形框中的转换检测

考虑一个有一辆小轿车和一辆卡车的二维跟踪场景。在 t = 0秒时,汽车相对于场景框架位于(20,10,0)米的位置。汽车以5米/秒的速度在空中移动 Y 场景框架的方向。自我车的本地(向前)帧,{ x y },从场景框架旋转90度角。在前面的例子中,一辆在(10,20,0)米位置的卡车正向行驶 X 速度为5米/秒的方向。

与此同时,自我车在自己的局部框架内观察卡车,{ x y }。在实际操作中,您可以直接从自我车的传感器系统中获得测量值。从图中可知,卡车的尺寸为[10;10;0 5;5;0]对于{ x y }帧的顺序为[x, y, z, vx; v,登陆].

measuent2 = [10;10;0;5;5;0);% (x, y, z, vx; v; vz]

要指定对象检测,您需要指定从场景矩形框架{的坐标转换 X Y }到本地矩形框{ x y }。您可以使用MeasurementParameters的属性objectDetection来指定这些转换参数。在转换中,场景框架是框架,和自我车局部框架是孩子框架。

  • 框架属性将子帧类型设置为'矩形的(在这个例子中)或者‘球形的

  • OriginPosition属性设置子帧相对于父帧的原点位置。

  • OriginVelocity属性设置子帧的原点相对于父帧的速度。

MP2 = struct();MP2。帧=“矩形”;MP2。OriginPosition = [20;10;0);MP2。OriginVelocity = [0;5;0);

使用由欧拉角转换而来的旋转矩阵指定旋转。集IsParentToChild为true表示从父帧到子帧的旋转。

rotAngle2 = [90 0 0];%(偏航、俯仰、行)rotQuat2 =四元数(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(time2, measuent2,“MeasurementParameters”, MP2)
detection2 = objectDetection with properties: Time: 0 Measurement: [6x1 double] measuentnoise: [6x6 double] SensorIndex: 1 ObjectClassID: 0 measuentparameters: [1x1 struct] ObjectAttributes: {}

要验证对象检测,可以使用cvmeas测量函数,用于重新生成测量值。的cvmeas函数可以将目标的实际状态和测量参数作为输入。的状态输入cvmeas的顺序是[x, vx; y, v, z,登陆].如下面的输出所示,结果与measurement2

state2 =[10; 5、20 0,0,0);% [x, vx; y; v; z; vz]cvmeas2 = cvmeas(state2,MP2)% (x, y, z, vx; v; vz]
cvmeas2 =6×110.0000 10.0000 0 -5.0000 -5.0000 0

例3:移动球坐标系中的转换检测

考虑之前的跟踪场景,只是现在测量是由一个具有球形输出帧的扫描雷达获得的。雷达的瞄准方向与 Y 方向(同 x 方向) t = 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];rotQuat3 =四元数(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(time3, measuent3,“MeasurementParameters”、MP3)
detection3 = objectDetection with properties: Time: 0 Measurement: [4x1 double] measuentnoise: [4x4 double] SensorIndex: 1 ObjectClassID: 0 Measurement parameters: [1x1 struct] ObjectAttributes: {}

使用以下命令验证结果cvmeas.结果与measurement3

State3 = [10;5;20;0;0;0];% [x, vx; y; v; z; vz]cvmeas3 = cvmeas(state3,MP3)% (az; el rng; rr)
cvmeas3 =4×145.0000 0 14.1421 -7.0711

例4:在三帧之间转换检测

考虑之前的跟踪场景,只是现在雷达的瞄准方向旋转45度 x 汽车局部框架的方向。

新的测量值,表示为新的球面坐标系{ x y },有:

measuent4 = [0;0;10 /信德(45);5 /信德(45)];% (az; el rng; rr)

对于测量参数,您可以将旋转指定为从场景框架到新球形框架的135度旋转。或者,你可以将它指定为两个连续的旋转: X Y }到矩形{ x y }和矩形{ x y }到球形{ x y }。来说明支持的多帧转换特性金宝appMeasurementParameters属性,本例使用后一种方法。

第一组测量参数完全相同MP2中使用的示例2MP2说明了矩形{的旋转 X Y }到矩形{ x y }。对于第二组测量参数,MP4,您只需要指定从矩形{旋转45度。 x y }到球面{ x y }。

MP4 = struct();MP4。帧=“球”;MP4。OriginPosition = [0;0;0);%放置的位置。MP4。OriginVelocity = [0;0;0);%相同原点速度。指定旋转。rotAngle4 = [45 0 0];rotQuat4 =四元数(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];

创建objectDetection对象。

Time4 = 0;detection4 = objectDetection(time4, measuent4,“MeasurementParameters”, MPc)
detection4 = objectDetection with properties: Time: 0 Measurement: [4x1 double] measuentnoise: [4x4 double] SensorIndex: 1 ObjectClassID: 0 MeasurementParameters: [1x2 struct] ObjectAttributes: {}

使用以下命令验证结果cvmeas.结果与measurement4

State4 = [10;5;20;0;0;0];% [x, vx; y; v; z; vz]cvmeas4 = cvmeas(stat4,MPc)% (az; el rr; rrate)
cvmeas4 =4×10.0000 14.1421 -7.0711

例5:转换3D检测

假设一个无人驾驶飞行器(UAV)监视一个区域。在 t = 0秒时,UAV相对于全球东北向下(NED)框架处于(5,5,-1)公里的位置。无人机的速度是(- 50,100,5)米/秒。无人机机体架方位{ x y z }相对于全局NED框架给出(-120,2,2)度的偏航,俯仰和滚转。与此同时,(1,1,0)km处的一辆车以30 m/s的速度向东移动。无人机使用与车身轴线对齐的雷达系统来测量汽车。

根据这些信息,指定测量转换的运动学参数。

指定无人机机体框架的框架类型、起始位置和起始速度。

MP5 = struct();里。帧=“球”;里。OriginPosition = [5000;5000;-1000);里。OriginVelocity = [-50;-100;5);

指定从NED框架到无人机机身框架的旋转。

Rot_angle5 = [-120 2 2];%(偏航、俯仰、滚)Rot_quat5 =四元数(Rot_angle5,“Eulerd”“ZYX股票”“帧”);Rot_matrix5 = rotmat(Rot_quat5,“帧”);里。方向= 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]。measuent5 = cvmeas(car_state5,MP5);Meas_az5 =测量5(1)
Meas_az5 = -14.6825
Meas_el5 =测量5(2)
Meas_el5 = 12.4704
Meas_rng5 = measuent5 (3)
Meas_rng5 = 5.7446e+03
Meas_rr5 = measuent5 (4)
Meas_rr5 = -126.2063

仰角定义为从xy平面到z方向的夹角。这就是为什么地面上的目标相对于无人机的仰角是正的。这个约定在整个工具箱中使用。

方位角、高程、距离和距离率的测量噪声分别为[1,1,20,2]。此外,雷达的指数为2,雷达可以将被探测到的物体分类为1,为'类型。汽车的

Index5 = 2;Covariance5 = diag([1;1;20;2]);classID5 = 1;

创建一个objectDetection对象进行检测。

Time5 = 0;检测= objectDetection(time5, measuent5,“SensorIndex”index5,...“MeasurementNoise”covariance5,“ObjectClassID”classID5,“MeasurementParameters”里)
detection = objectDetection with properties: Time: 0 Measurement: [4x1 double] measuentnoise: [4x4 double] SensorIndex: 2 ObjectClassID: 1 measuentparameters: [1x1 struct] ObjectAttributes: {}