我怎么使用一个扩展卡尔曼滤波器代替卡尔曼滤波器在“使用合成雷达和视觉传感器融合数据”的例子吗

15的观点(30天)
我用下面的例子:
在这里,而不是使用“trackingKF”功能,我想用“trackingEKF”功能,所以我替换下面的代码:
过滤器= trackingKF (“MotionModel”,“二维恒定速度”,“状态”,H * detection.Measurement“MeasurementModel”H,“StateCovariance”,H *检测。MeasurementNoise * H,“MeasurementNoise”,detection.MeasurementNoise);
过滤器= trackingEKF (@constvel @cvmeas, H * detection.Measurement,“StateTransitionJacobianFcn”@constveljac,“MeasurementJacobianFcn”,@cvmeasjac);
当我这样做,我收到以下错误消息:
错误:错误使用coder.internal.assert(33)行
输出MeasurementFcn必须具有相同的大小和数据类型的测量。
我想知道我应该做什么改变使用trackingEKF在这个例子。

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2021年9月30日
国家你想使用不符合您所使用的模型状态转换(constvel)和测量(cvmeas)。这两种模式会有一个三维恒定速度状态[x, vx; y; v; z; vz]和cvmeas提供了一个测量,三维位置测量[x, y, z],使用默认MeasurementParameters价值。
如果您想要使用的“trackingEKF”功能模型如上所述,您必须编写自己的状态转换函数,测量功能,相应的雅可比矩阵函数。这里有一些初步的建议这四个功能的代码:
%状态转换函数:
函数国家= constvel2d(状态,dt,变长度输入宗量)
%验证状态长4个元素,有两个输入
A1d = [1 dt;0 1];
= blkdiag (A1d A1d);
状态(,)= *状态(:);
结束
%测量功能:
函数变长度输入宗量量= cvmeas2DFullState(状态)
%长4个元素验证状态
H = [1 0 0 0;0 0 1 0;0 1 0 0;0 0 0 1);
量= H *国家(:);
结束
%状态转换雅可比矩阵:
函数雅可比矩阵= constvel2djac (~, dt,变长度输入宗量)
%验证状态长4个元素,有两个输入
A1d = [1 dt;0 1];
雅可比矩阵= blkdiag (A1d A1d);
结束
%雅可比矩阵测量功能:
函数雅可比矩阵= cvmeas2DFullStateJac(状态,变长度输入宗量)
%长4个元素验证状态
雅可比矩阵= [1 0 0 0;0 0 1 0;0 1 0 0;0 0 0 1);
结束
如果把上面的代码添加到“SensorFusionUsingSyntheticDataExample之后。m”文件,initSimDemoFilter函数看起来像下面的:
函数过滤器= initSimDemoFilter(检测)
H = [1 0 0 0;0 0 1 0;0 1 0 0;0 0 0 1);
过滤器= trackingEKF (“状态”,H * detection.Measurement
“StateTransitionFcn”@constvel2d,
“MeasurementFcn”@cvmeas2DFullState,
“StateTransitionJacobianFcn”@constvel2djac,
“MeasurementJacobianFcn”,@cvmeas2DFullStateJac);
结束

更多的答案(0)

标签

没有标签了。

下载188bet金宝搏


释放

R2018a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!