How does track initialization works when it has two sensor detections in the assignment gate?

6 views (last 30 days)
Hi,
I am working on centralized tracking using trackerGNN, trackerJPDA and trackerTOMHT with camera and radar detections. I want to analyze how my tracks are initialized and how does it switches to another type of detection in Kalman filter if I distinguish them using SensorIndex.
My state is initialized by the measurement received as per the SensorIndex.
If anyone could explain how the track initialization works and tentative tracks are generated with this example it would be helpful to understand.
1) Say at time t1, I have 1 camera and 1 radar detection. Both fall in the same gate. For the track initialization, will it initialize tracks for both or one? if one, which one?
2) At time t2, say the track was assigned to camera detection and updated and there is one radar detection which fall inside the gate.
3) At time t3, I have no radar detection, only camera detection.
4) At time t4, I have no camera detection, only radar detection and it should be assigned to radar detection. For this, I don't really understand how would the tracker switches to radar kalman filter model.
Is there any way to know if the tracks are associated to which sensors using the SensorIndex? Then it would be helpful to examine the tracker.
Thank you for your answers.

Answers (2)

Prashant Arora
Prashant Arora on 21 Aug 2023
Hi Aatif,
Your FilterInitializationFcn must return a filter that can correct with both a radar detection or a camera detection. The MeasurementFcn used by the filter can use MeasurementParameters on the detection to decide if the detection is from camera or radar.
I would recommend trying the following workflow to make sure your FilterInitializationFcn is accurately defined.
filter = FilterInitializationFcn(cameraDetection)
predict(filter, 1) % Should predict filter state
correct(filter, cameraDetection.Measurement, cameraDetection.MeasurementParameters) % Should update with camera detection
correct(filter, radarDetection.Measurement, radarDetection.MeasurementParameters) % Should update with radar detection
% Repeat the process when its started from radarDetection
filter = FilterInitializationFcn(radarDetection)
To answer your questions:
1) The tracker will create a track using one of the detections (either camera or radar) and correct it with the other detection. Both cases are possible, initiate using camera detection and correct with radar detection as well as initiate with radar detection and correct with camera detection. The order of pick depends on the SensorIndex as well as the timestamp of the detection.
2) This is a multi-sensor tracker, so if both radar and camera detection falls inside the gate of a predicted track, they both can be assigned to the track. The tracker will perform a sequential/iterated correction to update the track's filter.
3) Only radar detection will be used to create a new track. This will happen only if its not assigned to another track.
4) As I mentioned earlier, it should not matter which detection created the filter. The filter should allow correction with both radar and camera measurements.
You can check out the fourth output from the trackers (analysis info) to understand the decisions taken by tracker at each step.
Hope this helps,
Prashant

Aatif Sulaimani
Aatif Sulaimani on 22 Aug 2023
Hi Prashant,
Thank you for your answer. I have attached my Filter for FilterInitializationFn. Could you please check if I am doing it the right way. I have four sensors at the moment. Two cameras with SensorIndex 1 and 3 and two radars with SensorIndex 2 and 4. I initiate the Kalman filter based on the SensorIndexes and the State, state covariance, State Transition function, Process Noise, Measurement function and Measurement noise are formulated based on SensorIndexes and are inputs to the trackingEKF or trackingUKF object for every detections.
So when the detection is there track is initialized and predicted and updated for the SensorIndex. I understand that if there is a track predicted, it is irrespective to which ever sensor it was created. So when it has to update, it will use the measurement functions for which ever sensors detection fall in the gate and calculate the distance using the distance function and based on the tracker's assignment method, it will assign to the detection(for trackerGNN , it will assign to the nearest detection).
Am I right here?
Thank you once again,
Aatif Sulaimani
  1 Comment
Prashant Arora
Prashant Arora on 23 Aug 2023
Hi Aatif,
Your filter initialization function is not correct.
The output filter must have a constant state transition and a constant measurement function, which does not change with detection. You'll need to write 1 state transition function and 1 measurement function.
function stateTransitionFcn(state,dT)
% Predict your state here
F = constvel(state, dT);
end
function z = measurementFcn(state, measurementParameters)
% Compute measurement here.
% This measurement may represent "camera" or "radar" measurement.
% You need to pass enough information on detection.MeasurementParameters
% of radar detection and camera detection to make a distinction.
% This is required if there is a difference betweenn their measurement models.
% For example, on each objectDetection sent to the tracker,
% a field "SensorType" can be added to the MeasurementParameters.
if measurementParameters.SensorType == 1
% compute radar measurement
z = radarMeasurement ...;
else
% compute camera measuremennt
z = cameraMeasurement ...
end
end
% Create filter
% Compute "state" and "state covariance" using SensorIndex of the detection.
filter = trackingEKF(@stateTransitionFcn,@measurementFcn,state,...
'StateCovariance',stateCov);
% Note that the filter's MeasurementFcn and StateTransitionFcn
% and their Jacobians do not change with detection.
% They implement the multi-sensor behavior inside them.
The MeasurementNoise is sent to the "detection" input on the tracker. You can use a different MeasurementNoise on objectDetection based on SensorIndex.
Hope this helps.
Prashant

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!