Hi Anthony,
Thanks for the question. It's a very interesting and probably challenging problem for the TOMHT tracker.
To answer your questions, here are a few suggestions:
Is there a way to define an initial covariance
? Yes, there is an easy way to do that. You should create your own filter initialization function and it's not as daunting as it might sound.
Copy the initcvkf (or any other init function) into your work directory and rename it. Suppose you call it initRADecFilter to indicate that it is initialization a filter using to track the RADec parameters.
In the new function:
Initialize the StateCovariance property to any values you would like.
Can the dimensionality of the problem be 2D for filters that are not created by initcvkf?
Yes, they can be. For clarity, let's assume you being with initcvekf. In your copied and renamed function, define the State size to be 4-by-1 instead of 6-by-1. This will allow you to have a 2-D problem. You will also need to create a new constant velocity measurement model to replace cvmeas that always returns a 3-D measurement. It's very easy to do. Create a function cvmeas2D like this:
function [measurement, bounds] = cvmeas2D(state, varargin)
[measurement3, bounds3] = cvmeas(state, varargin)
measurement = measurement3(1:2,:);
Similarly, create a function based on cvmeasjac to return a 2-D measurement Jacobian.
Can you define a PD per each measurement?
There are a couple of way of handling that, but it would require a little more work.
- If you want to use the PD in computing the measurement: When you pack your measurements into the objectDetection format, you can use the MeasurementParameters property to specify PD. The MeasurementParameters are used by the measurement function that you define to calculate association distance, measurement likelihood, and filter correction. So, you can use them to update the measurement.
- If you just want to pass the PD through the tracker, you can add the PD to the ObjectAttributes property. The trakcer attaches them to the associated track and then to the track output.
You can also define PD for each track. To do that, see the HasDetectableBranchIDsInput property of the tracker and how to use it in the step. You will essentially call the step method with an additional matrix input with BranchID as the first column and PD as the second column. This is useful if your sensor doesn't cover all tracks all the time. Use the getBranches method to get all the branches (track hypotheses) maintained by the tracker in the previous step.
How to limit association/gating
You mentioned performance issues. To limit some of the association possibilities, use the 4th element of the AssociationThreshold value to a finite value. This limits which tracks are considered for association with each detection and if you set a strict gate, you can eliminate many association options.