Main Content

Multi-Object Tracker

Create and manage tracks of multiple objects

  • Library:
  • Automated Driving Toolbox

  • Multi-Object Tracker block

Description

The Multi-Object Tracker block initializes, confirms, predicts, corrects, and deletes the tracks of moving objects. Inputs to the multi-object tracker are detection reports generated by Radar Detection Generator and Vision Detection Generator blocks. The multi-object tracker accepts detections from multiple sensors and assigns them to tracks using a global nearest neighbor (GNN) criterion. Each detection is assigned to a separate track. If the detection cannot be assigned to any track, the multi-object tracker creates a new track.

A new track starts in a tentative state. If enough detections are assigned to a tentative track, its status changes to confirmed. When a track is confirmed, the multi-object tracker considers that track to represent a physical object. If detections are not added to the track within a specifiable number of updates, the track is deleted.

The multi-object tracker also estimates the state vector and state vector covariance matrix for each track using a Kalman filter. These state vectors are used to predict a track's location in each frame and determine the likelihood of each detection being assigned to each track.

Ports

Input

expand all

Detection list, specified as a Simulink bus containing a MATLAB structure. See Group Signal Lines into Virtual Buses (Simulink). The structure has the form:

FieldDescriptionType
NumDetectionsNumber of detectionsinteger
IsValidTimeFalse when updates are requested at times that are between block invocation intervalsBoolean
DetectionsObject detectionsArray of object detection structures. The first NumDetections of these detections are actual detections.

The definitions of the object detection structures are found in the Detections output port descriptions of the Radar Detection Generator and Vision Detection Generator blocks.

Note

The object detection structure contains a Time field. The time tag of each object detection must be less than or equal to the time of the current invocation of the block. The time tag must also be greater than the update time specified in the previous invocation of the block.

Track update time, specified as a real scalar. The multi-object tracker updates all tracks to this time. Update time must always increase with each invocation of the block. Units are in seconds.

Note

The object detection structure contains a Time field. The time tag of each object detection must be less than or equal to the time of the current invocation of the block. The time tag must also be greater than the update time in the previous invocation of the block.

Dependencies

To enable this port, set Prediction time source to Input port.

Cost matrix, specified as a real-valued Nt-by-Nd matrix, where Nt is the number of existing tracks and Nd is the number of current detections.

The rows of the cost matrix correspond to the existing tracks. The columns correspond to the detections. Tracks are ordered as they appear in the list of tracks in the All Tracks output port of the previous invocation of the block.

In the first update to the multi-object tracker, or if the track has no previous tracks, assign the cost matrix a size of [0, Nd]. The cost must be calculated so that lower costs indicate a higher likelihood that the multi-object tracker assigns a detection to a track. To prevent certain detections from being assigned to certain tracks, use Inf.

Dependencies

To enable this port, select Enable cost matrix input.

Detectable track IDs, specified as a real-valued M-by-1 vector or M-by-2 matrix. Detectable tracks are tracks that the sensors expect to detect. The first column of the matrix contains a list of track IDs that the sensors report as detectable. The optional second column contains the detection probability for the track.

Tracks whose identifiers are not included in Detectable Track IDs are considered undetectable. The track deletion logic does not count the lack of detection as a "missed detection" for track deletion purposes.

If this port is not enabled, the tracker assumes all tracks to be detectable at each invocation of the block.

Dependencies

To enable this port, in the Port Setting tab, select Enable detectable track IDs Input.

Output

expand all

Confirmed tracks, returned as a Simulink bus containing a MATLAB structure. See Create Nonvirtual Buses (Simulink).

This table shows the structure fields.

FieldDescription
NumTracksNumber of tracks
TracksArray of track structures of a length set by the Maximum number of tracks parameter. Only the first NumTracks of these are actual tracks.

This table shows the fields of each track structure.

FieldDescription
TrackID

Unique integer that identifies the track.

SourceIndex

Unique identifier the tracker in a multiple tracker environment. The SourceIndex is exactly the same with the TrackerIndex.

UpdateTime

The time the track was updated.

AgeNumber of times the track survived.
State

Value of state vector at the update time.

StateCovariance

Uncertainty covariance matrix.

Extent

Spatial extent estimate of the tracked object, returned as a d-by-d matrix, where d is the dimension of the object. This field is only returned when the tracking filter is specified as a ggiwphd (Sensor Fusion and Tracking Toolbox) filter.

MeasurementRate

Expected number of detections from the tracked object. This field is only returned when the tracking filter is specified as a ggiwphd (Sensor Fusion and Tracking Toolbox) filter.

IsConfirmed

True if the track is assumed to be of a real target.

IsCoasted

trackerPHD does not support the IsCoasted field. The value is always 0.

ObjectClassID

trackerPHD does not support the ObjectClassID field. The value is always 0.

StateParameters

Parameters about the track state reference frame specified in the StateParameters property of the PHD tracker.

IsSelfReported

Indicate if the track is reported by the tracker. This field is used in a track fusion environment. It is returned as true by default.

A track is confirmed if:

  • At least M detections are assigned to the track during the first N updates after track initialization. To specify the values M and N, use the M and N for the M-out-of-N confirmation parameter.

  • The detection initiating the track has an ObjectClassID greater than zero.

Tentative tracks, returned as a Simulink bus containing a MATLAB structure. See Create Nonvirtual Buses (Simulink). A track is tentative before it is confirmed.

This table shows the structure fields.

FieldDescription
NumTracksNumber of tracks
TracksArray of track structures of a length set by the Maximum number of tracks parameter. Only the first NumTracks of these are actual tracks.

This table shows the fields of each track structure.

FieldDescription
TrackID

Unique integer that identifies the track.

SourceIndex

Unique identifier the tracker in a multiple tracker environment. The SourceIndex is exactly the same with the TrackerIndex.

UpdateTime

The time the track was updated.

AgeNumber of times the track survived.
State

Value of state vector at the update time.

StateCovariance

Uncertainty covariance matrix.

Extent

Spatial extent estimate of the tracked object, returned as a d-by-d matrix, where d is the dimension of the object. This field is only returned when the tracking filter is specified as a ggiwphd (Sensor Fusion and Tracking Toolbox) filter.

MeasurementRate

Expected number of detections from the tracked object. This field is only returned when the tracking filter is specified as a ggiwphd (Sensor Fusion and Tracking Toolbox) filter.

IsConfirmed

True if the track is assumed to be of a real target.

IsCoasted

trackerPHD does not support the IsCoasted field. The value is always 0.

ObjectClassID

trackerPHD does not support the ObjectClassID field. The value is always 0.

StateParameters

Parameters about the track state reference frame specified in the StateParameters property of the PHD tracker.

IsSelfReported

Indicate if the track is reported by the tracker. This field is used in a track fusion environment. It is returned as true by default.

Dependencies

To enable this port, select Enable tentative tracks output.

Combined list of confirmed and tentative tracks, returned as a Simulink bus containing a MATLAB structure. See Create Nonvirtual Buses (Simulink).

This table shows the structure fields.

FieldDescription
NumTracksNumber of tracks
TracksArray of track structures of a length set by the Maximum number of tracks parameter. Only the first NumTracks of these are actual tracks.

This table shows the fields of each track structure.

FieldDescription
TrackID

Unique integer that identifies the track.

SourceIndex

Unique identifier the tracker in a multiple tracker environment. The SourceIndex is exactly the same with the TrackerIndex.

UpdateTime

The time the track was updated.

AgeNumber of times the track survived.
State

Value of state vector at the update time.

StateCovariance

Uncertainty covariance matrix.

Extent

Spatial extent estimate of the tracked object, returned as a d-by-d matrix, where d is the dimension of the object. This field is only returned when the tracking filter is specified as a ggiwphd (Sensor Fusion and Tracking Toolbox) filter.

MeasurementRate

Expected number of detections from the tracked object. This field is only returned when the tracking filter is specified as a ggiwphd (Sensor Fusion and Tracking Toolbox) filter.

IsConfirmed

True if the track is assumed to be of a real target.

IsCoasted

trackerPHD does not support the IsCoasted field. The value is always 0.

ObjectClassID

trackerPHD does not support the ObjectClassID field. The value is always 0.

StateParameters

Parameters about the track state reference frame specified in the StateParameters property of the PHD tracker.

IsSelfReported

Indicate if the track is reported by the tracker. This field is used in a track fusion environment. It is returned as true by default.

Dependencies

To enable this port, select Enable all tracks output.

Parameters

expand all

Tracker Management

Unique tracker identifier, specified as a nonnegative integer. This parameter is used as the SourceIndex in the outputs, and distinguishes tracks that come from different trackers in a multiple-tracker system. You must specify this property as a positive integer to use the track outputs as inputs to a track fuser.

Example: 1

Kalman filter initialization function, specified as a function name. The toolbox provides several initialization functions. For an example of an initialization function, see initcvekf.

Detection assignment threshold, specified as a positive real scalar. To assign a detection to a track, the detection's normalized distance from the track must be less than the assignment threshold. If some detections remain unassigned to tracks that you want them assigned to, then increase the threshold. If some detections are assigned to incorrect tracks, decrease the threshold.

Confirmation parameters for track creation, specified as a two-element vector of positive integers, [M,N]. A track is confirmed when at least M detections are assigned to the track during the first N updates after track initialization. M must be less than or equal to N.

  • When setting N, consider the number of times you want the tracker to update before it confirms a track. For example, if a tracker updates every 0.05 seconds, and you allow 0.5 seconds to make a confirmation decision, set N = 10.

  • When setting M, take into account the probability of object detection for the sensors. The probability of detection depends on factors such as occlusion or clutter. You can reduce M when tracks fail to be confirmed or increase M when too many false detections are assigned to tracks.

Example: [3,5]

Track deletion threshold for history logic, specified as a real-valued 1-by-2 vector of positive integers [P R]. If a confirmed track is not assigned to any detection P times in the last Q tracker updates, then the track is deleted.

Maximum number of tracks that the block can process, specified as a positive integer.

Maximum number of sensors that the block can process, specified as a positive integer. This value should be greater than or equal to the highest SensorIndex value used in the Detections input port.

Parameters of the track state reference frame, specified as a struct or a struct array. Use this property to define the track state reference frame and how to transform the track from the tracker (called source) coordinate system to the fuser coordinate system.

Inputs and Outputs

Source for prediction time, specified as Input port or Auto. Select Input port to input an update time by using the Prediction Time input port. Otherwise, the simulation clock managed by Simulink determines the update time.

Example: Auto

Select this check box to enable the input of a cost matrix by using the Cost Matrix input port.

Select this check box to enable the Detectable Track IDs input port.

Source of output bus name, specified as Auto or Property.

  • If you select Auto, the block automatically creates a bus name.

  • If you select Property, specify the bus name using the Specify an output bus name parameter.

Dependencies

To enable this parameter, set the Source of output bus name parameter to Property.

Select this check box to enable the output of tentative tracks by using the Tentative Tracks output port.

Select this check box to enable the output of all the tracks by using the All Tracks output port.

  • Interpreted execution — Simulate the model using the MATLAB interpreter. This option shortens startup time. In Interpreted execution mode, you can debug the source code of the block.

  • Code generation — Simulate the model using generated C/C++ code. The first time you run a simulation, Simulink generates C/C++ code for the block. The C code is reused for subsequent simulations as long as the model does not change. This option requires additional startup time.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.

Introduced in R2017b