主要内容

initcvmscekf

恒定速度TrackingMscekf初始化

描述

例子

MSCEKF= initcvmscekf(检测初始化TrackingMscekf基于在修改的球形坐标中跟踪的类(用于跟踪的扩展Kalman滤波器)根据提供的信息对象电视目的,检测。该功能假设目标范围为3E4单位和1E的范围协方差10单位2

TrackingMscekf可以将对象与跟踪器一起用于跟踪目标,该目标具有单个观察者的纯角度测量。

例子

MSCEKF= initcvmscekf(检测,,,,范围限制允许将范围信息指定到过滤器。这范围限制变量是两个元素向量,第一个元素指定目标范围,第二个元素指定范围中的标准偏差。

例子

全部收缩

创建一个仅角度检测。

检测= objectDetection(0,[30; 20],,“测量参数”,,,,...结构('框架',,,,'球形',,,,'hatrange',错误的));

利用initcvmscekf创建一个TrackingMscekf使用仅角度检测初始化的过滤器。

filter = initcvmscekf(检测)
filter =带有属性的TrackingMscekf:状态:[6X1 double] statecovariance:[6x6 double] statetransitionfcn:@constevelmsc statetransitionjacobianfcn:@constellmscjacjac processNoise:[3x3 double] superiremscn suitermscn suitermscn lorecr.scirjemmscn: @coistercn: @corncri @corvercn coriutrf. [3x1] [3x1] [3x1]:[2x2 double] HasadDitiveMeasurementNoise:1

创建用于后续旋转的测量参数。

MEATPARAMSENSTOPLAT = struct('框架',,,,'球形',,,,'hatrange',错误的,...'方向',rotmat(Quaternion([0 0 30],'rotvecd'),'框架'))
MEATPARAMSENSORTOPLAT =带有字段的结构:框架:“球形” hasrange:0方向:[3x3 double]
MEASPARAMPLATTOSCENARIO = struct('框架',,,,'长方形',,,,'hatrange',错误的,...'方向',rotmat(Quaternion([30 0 0],'rotvecd'),'框架'))
MEASPARAMPLATTOSCENARIO =带有字段的结构:帧:'矩形'hadrange:0方向:[3x3双]
MEASPARAM = [MESEPARAMSENSTOPLAT; MEASPARAMPLATTOSCENARIO];检测= objectDetection(0,[30; 20],,“测量参数”,Measparam);

初始化过滤器。

filter = initcvmscekf(检测);

检查过滤器的测量与检测相同。

cvmeasmsc(滤波器。
ans =2×130.0000 20.0000

考虑一个方案,当目标以恒定速度移动并且观察者以恒定加速度移动时。使用常数速度模型来定义目标的初始状态。

tgtState = [2000; -3; 500; -5; 0; 0];

使用恒定加速模型定义观察者的初始状态。

observerState = [0; 2; 0; 490; -10; 0.2; 0; 0; 0; 0];

创建一个Trackergnn对象用于initcvmscekf有一些有关范围和范围协方差的先前信息。

范围= 1000;rangestDdev = 1e3;RangeStimate = [Range RangestDdev];tracker = trackergnn(“ filterInitializationfcn',@(det)initcvmscekf(det,rangestimate));

使用测量模型模拟合成数据。得到AZEl使用CVMEAS功能。

SyntheticParams = struct('框架',,,,'球形',,,,'hatrange',错误的,...“原始位置”,观察者(1:3:end));MEAT = CVMEAS(TGTSTATE,SyntheticParams);

创建一个仅角度的对象进行模拟合成检测。

检测= objectDetection(0,MEAS,,“测量参数”,,,,...结构('框架',,,,'球形',,,,'hatrange',错误的),“ suberumentnoise',0.033*眼(2));

创建TrackPlotter和PlatformPlotter可视化场景。

tp =戏剧图('xlimits',[0 2500],'ylimits',[0 1000]);TargetPlotter = PlatformPlotter(TP,'显示名称',,,,'目标',,,,“ MarkerfaceColor”,,,,'K');observerplotter = PlatformPlotter(TP,'显示名称',,,,“观察者”,,,,“ MarkerfaceColor”,,,,'r');trkplotter = trackplotter(tp,'显示名称',,,,'追踪',,,,“ MarkerfaceColor”,,,,'G',,,,“历史记录”,50);tgttrajplotter =轨迹Plotter(TP,'显示名称',,,,“目标轨迹”,,,,'颜色',,,,'K');obstrajplotter =轨迹平原(tp,'显示名称',,,,“观察者轨迹”,,,,'颜色',,,,'r');

图包含一个轴。轴包含6个类型线的对象。这些对象代表目标,观察者,轨道,(历史记录),目标轨迹,观察者轨迹。

运行跟踪器。

时间= 0;DT = 0.1;tgtposes = [];obsposes = [];尽管时间<50 [Conftracks,TentTracks,Alltracks] = Tracker(检测,时间);为了i = 1:numel(alltracks)setTrackFilterProperties(tracker,alltracks(i).trackid,“观察者”,观察者(3:3:end));结尾%更新合成检测。observerstate = constacc(观察者,dt);tgtstate = constvel(tgtstate,dt);syntheticparams.originposition = observerstate(1:3:end);检测。测量= CVMEAS(TGTSTATE,SYNTHETICTAREMSS);时间=时间 + dt;检测。时间=时间;%更新图tgtposes = [tgtposes; tgtstate(1:2:end)'];%#好的obsposes = [obsposes; observerstate(1:3:end)'];%#好的targetPlotter.plotplatform(tgtstate(1:2:end)');observerplotter.plotplatform(observerState(1:3:end)');tgttrajplotter.plottrajectory({tgtposes});obstrajplotter.plottrajectory({obsposes});%绘制第一个曲目,因为没有错误的警报,这应该是% 目标。%从赛道的MSC状态获得职位。cartState = cvmeasmsc(alltracks(i).state,'长方形') + observerstate(1:3:end);trkplotter.plottrack(cartstate');结尾

图包含一个轴。轴包含6个类型线的对象。这些对象代表目标,观察者,轨道,(历史记录),目标轨迹,观察者轨迹。

输入参数

全部收缩

检测报告,指定为对象电视目的。

例子:检测= objectDetection(0,[1; 4.5; 3],'MeasurementNoise',[1.0 0 0; 0 2.0 0; 0 0 1.5])

范围信息,指定为两个元素向量,第一个元素指定目标范围,第二个元素指定范围中的标准偏差。

数据类型:单身的|双倍的

输出参数

全部收缩

恒定速度跟踪在MSC框架中扩展了Kalman滤波器,以返回TrackingMscekf目的。

算法

  • 该功能假设单位目标加速标准偏差,则使用过程噪声配置过滤器。

  • 该函数通过在笛卡尔框架中使用协方差的线性转换来配置状态的协方差。

  • 您可以将此功能用作FilterInitializationFCN财产的TrackertomhtTrackergnn系统对象。

  • 该功能初始化观察力TrackingMscekf各个方向的观察者加速度为零的类。您必须使用SetTrackFilterProperties跟踪器的功能更新观察力

扩展功能

C/C ++代码生成
使用MATLAB®CODER™生成C和C ++代码。

在R2018B中引入