主要内容

检测转换成objectDetection格式

这些示例展示了如何将传感器的原生格式中的实际检测转换为objectDetection对象。objectDetection是传感器融合和跟踪工具箱中大多数过滤器和跟踪器的标准输入格式。五个例子逐步展示如何设置objectDetection具有各种跟踪方案。

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

  • 例2.在移动矩形框中配置检测。

  • 例3.在一个移动的球面框架中配置检测。

  • 例4.演示如何表示连续旋转获得的检测结果。

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

一个objectDetection报告必须包含基本检测信息:时间测量.它还可以包含其他关键属性,包括MeasurementNoiseSensorIndexObjectClassid.ObjectAttributes, 和MeasurementParameters.设置MeasurementParameters正确地使过滤器或跟踪器能够解释测量是创建的关键objectDetection.第一个例子展示了一个objectDetection.其余的示例着重于如何正确设置MeasurementParameters

例1:在静止的矩形框架中转换检测

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

雷达传感器在场景框架中输出3-D位置和速度测量,因此可以如下写入:

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

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

MeasurementNoise1 = DIAG([10 * oon(3,1);那些(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 Measurement parameters: {} ObjectAttributes: {}

例2:在移动矩形帧中转换检测

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

与此同时,自我汽车在它自己的地方框架内观察卡车,{ x y }。在实际应用中,可以直接从ego汽车的传感器系统中获得测量结果。由图可知,卡车的尺寸为[10;10;0 5;5;0]关于{ x y }框架的顺序为[x; y; z; vx; vy; vz].

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

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

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

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

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

MP2 =结构();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;检测2 = ObjectDetection(Time2,Measurement2,“MeasurementParameters”, MP2)
detection2 = objectDetection with properties: Time: 0 Measurement: [6x1 double] MeasurementNoise: [6x6 double] SensorIndex: 1 ObjectClassID: 0 MeasurementParameters: [1x1 struct] ObjectAttributes: {}

要验证对象检测,可以使用cvmeas.测量功能以再生测量。的cvmeas.函数可以以目标的实际状态和测量参数为输入。的状态输入cvmeas.是按[x, vx; y, v, z,登陆].如下输出所示,结果一致测量2.

State2 = [10; 5; 20; 0; 0; 0];%[x; vx; y; vy; 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秒。

由于卡车和汽车之间的相对速度是在视线方向,测量,这是在[方位角;海拔高度;范围;,可以通过以下方法得到:

测量3 = [45;0;10 /信德(45);5 /信德(45)];%[alz; el; rng; rr]。单位以度为单位。

指定测量参数。

MP3 =结构();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对象。

历史问题= 0;measurement3 detection3 = objectDetection(历史问题,“MeasurementParameters”、MP3)
Detection3 =具有属性的ObjectDetection:时间:0测量:[4x1 Double] MeasurementNoise:[4x4 Double] SensorIndex:1 objectClassID:0测量参数:[1x1 struct] ObjectAttributes:{}

使用以下方法验证结果cvmeas..结果与测量3.

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

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

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

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

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

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

第一组测量参数与MP2中使用的例2.MP2考虑矩形旋转{ X Y }到矩形{ x y }。对于第二组测量参数,MP4,您只需要指定从矩形{旋转45度 x y }变为球形{ x y }。

MP4 =结构();MP4。帧=“球”;mp4.originposition = [0;0;0);%托管的位置。MP4。OriginVelocity = [0;0;0);同一原点速度。%指定旋转。Rotangle4 = [45 0 0];rotquat4 =四元数(Rotangle4,“Eulerd”“ZYX股票”“帧”);rotmatrix4 = rotmat(rotquat4,“帧”);mp4.Oorientation = Rotmatrix4;mp4.isparenttochild = true;%在子框架中指定输出。MP4。HasElevation = true;MP4。HasAzimuth = true;MP4。HasRange = true;MP4。HasVelocity = true;

创建相结合MeasurementParameters输入,货币政策委员会

MPC = [MP4 MP2];

创建objectDetection对象。

time4 = 0;检测4 = ObjectDetection(Time4,Measurement4,“MeasurementParameters”,MPC)
detection4 = objectDetection with properties: Time: 0 Measurement: [4x1 double] MeasurementNoise: [4x4 double] SensorIndex: 1 ObjectClassID: 0 Measurement parameters: [1x2 struct] ObjectAttributes: {}

使用以下方法验证结果cvmeas..结果是一致的测量4.

state4 =[10; 5、20 0,0,0);%[x; vx; y; vy; z; vz]CVMEAS4 = CVMEAS(State4,MPC)%[alz; el; rr; rrate]
cvmeas4 =4×10.0000 0 14.1421 -7.0711

示例5:转换3D检测

考虑一个无人驾驶飞行器(UAV)监测一个地区。在 t = 0秒时,UAV相对于全球东北向下(NED)帧处于(5,5,-1)公里的位置。无人机的速度为(- 50,100,5)m/s。无人机机体骨架的方位{ x y z 关于全局NED帧的偏航,俯仰和滚动为(-120,2,2)。与此同时,(1,1,0)公里的速度的汽车正在以30米/秒的速度移动。UAV使用与其自己的体轴对齐的雷达系统测量汽车。

基于此信息,指定测量变换的运动参数。

指定UAV Body帧的帧类型,原点位置和原点速度。

mp5 = struct();mp5.frame =.“球”;mp5.originposition = [5000;5000;-1000];mp5.originvelocity = [-50;-100;5];

指定从NED帧的旋转到UAV正文帧。

rot_angle = [-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;

您可以直接从UAV上的雷达系统获得测量。使用cvmeas.功能是获得测量。测量按[方位角;高度;范围;范围率]。

car_state5 = [1000; 0; 1000; 30 0; 0];% [x, vx; y; v; z; vz]。measurement5 = cvmeas (car_state5里);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.

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

方位角、仰角、距离和距离率的测量噪声分别为[1,1,20,2]。此外,雷达的指数为2,雷达可以根据“类型”将探测到的目标划分为1。汽车的

index5 = 2;covariance5 =诊断接头([1;1;20;2]);classID5 = 1;

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

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