49 views (last 30 days)

Show older comments

We are working with the TOMHT tracker, and I noticed that the state vector is only (x, y, vx, vy). This seems very limiting, but I can't figure out how to modify this. Is there any documentation on this, or can somebody explain? For example, I would like to add ax and ay to the state vector and implement an additional filter that predicts constant accelaration. Furthermore, Is there a more detailed description on the TOMHT tracker?

Thank you very much,

Joost

Elad Kivelevitch
on 15 Sep 2021

The default state depends on the FilterInitializationFcn property, which is initcvekf. initcvekf initializes a constant velocity (CV) extended Kalman filter (EKF). You can choose from a variety of other init functions by using tab-completion in the MATLAB Window:

trackerTOMHT('FilterInitializationFcn', @init<TAB % <TAB means hit the tab button here

This will give you a wide range of initialization functions. One of them, initcaekf, initializes filters based on the constant acceleration (CA) extended Kalman filter (EKF).

Please use the documentation of each function to know how the state vector is defined and which motion and measurement models are used.

Additionally, You can always create your own initalization functions, and in each one of them you can define the filter to use and which motion and measurement models to use. Please do not feel restricted to use the built-in motion and measurement models or the initialization functions that ship with the product.

Prashant Arora
on 21 Sep 2021 at 17:44

Hi Joost,

In general, data association for TOMHT is carried out at the branch level. Every branch carries its own filter (with the same filter type and initial state as specified by FilterInitializationFcn).

- There are essentially two types of "prediction". The first one is to calculate association likelihood with every detection that can into the step. This prediction is NOT followed by a correction and the filter is brought back to its original state. The second type of prediction is when the branch must be updated with a particular detection. In that case, we perform a prediction + correction AND yes, its outcome is used to update the branch score. For every prediction, correction or likelihood, distance calculation, we use the same filter as initialized by FilterInitializationFcn. The tracker essentially calls these methods on the filter. For example, if your FilterInitializationFcn is outputting an IMM filter, every branch is estimated using an IMM filter.
- Yes, every branch maintains its own filter and estimate, which is used for prediction.
- This is correct. Every branch is predicted to the input time and the "output" tracks is the weighted mean (Gaussian-mixture reduction) of individual branch estimates. If every branch is using an IMM filter, the model probabilities of motion models per barnch will also be "predicted" to input time. The IMM filter standard model probabilities update is split into two parts - prediction and correction. This is provided in the reference literature [1] for IMM filter. During prediction, we predict them using prior information provided via "transition probabilities". This essentially captures the effect of "dT" on the probabilities in the absence of measurement. If measurement is indeed available, we can simply "correct" these predicted probabilities using the measurement likelihood.

Hope this helps. All the algorithms are implemented using MATLAB code. You should be able to validate most of what I said by opening the respective files.

Thanks,

Prashant

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

Start Hunting!