Load the tuning data containing the truth and detection data. The truth data has the position and velocity of one target for a duration of 9.5 seconds. The detection data has object detections of ten Monte-Carlo runs for the same period.
Create a trackingFilterTuner
object. Specify the FilterInitializationFcn
property as "initcvkf"
that corresponds to a trackingKF
filter object with a constant velocity model.
You can obtain the filter by evaluating the initialization function on an object detection.
filter =
trackingKF with properties:
State: [6×1 double]
StateCovariance: [6×6 double]
MotionModel: '3D Constant Velocity'
ProcessNoise: [3×3 double]
MeasurementModel: [3×6 double]
MeasurementNoise: [3×3 double]
MaxNumOOSMSteps: 0
EnableSmoothing: 0
To customize the tunable properties of the filter, first get the default tunable properties of the filter.
tps =
Tunable properties for object of type: trackingKF
Property: ProcessNoise
PropertyValue: [1 0 0;0 1 0;0 0 1]
TunedQuantity: Square root
IsTuned: true
TunedQuantityValue: [1 0 0;0 1 0;0 0 1]
TunableElements: [1 4 5 7 8 9]
LowerBound: [0 0 0 0 0 0]
UpperBound: [10 10 10 10 10 10]
Property: StateCovariance
PropertyValue: [3.53553390593274 0 0 0 0 0;0 100 0 0 0 0;0 0 3.53553390593274 0 0 0;0 0 0 100 0 0;0 0 0 0 3.53553390593274 0;0 0 0 0 0 100]
TunedQuantity: Square root of initial value
IsTuned: false
Based on the display, the tuner tunes only the ProcessNoise
property, which is a 3-by-3 matrix. Change the tunable elements to be only the diagonal elements by using the setPropertyTunability
object function. Set the lower and upper bounds for tuning the diagonal elements.
To enable custom tunable properties, set the TunablePropertiesSource
and CustomTunable
properties to "Custom"
and tps
, respectively.
Using the tune
object function, tune the filter with the detection log and the truth data.
Iter RMSE Step Size
0 9.2177
1 9.1951 0.1509
2 9.0458 1.5108
3 9.0456 0.0186
4 9.0452 0.0705
5 9.0452 0.0068
6 9.0452 0.0016
7 9.0451 0.1422
8 9.0450 0.0600
9 9.0450 0.0182
10 9.0450 0.0105
Generate the filter initialization function after tuning by using the exportToFunction
object function.
Obtain the tuned filter by evaluating the tuned initialization function on an object detection. Show the tuned process noise.
tunedFilter =
trackingKF with properties:
State: [6×1 double]
StateCovariance: [6×6 double]
MotionModel: '3D Constant Velocity'
ProcessNoise: [3×3 double]
MeasurementModel: [3×6 double]
MeasurementNoise: [3×3 double]
MaxNumOOSMSteps: 0
EnableSmoothing: 0
ans = 3×3
0.0001 0 0
0 0.0156 0
0 0 0.0001