multi_object_tracker#
Purpose#
The results of the detection are processed by a time series. The main purpose is to give ID and estimate velocity.
Inner-workings / Algorithms#
This multi object tracker consists of data association and EKF.
Data association#
The data association performs maximum score matching, called min cost max flow problem. In this package, mussp[1] is used as solver. In addition, when associating observations to tracers, data association have gates such as the area of the object from the BEV, Mahalanobis distance, and maximum distance, depending on the class label.
EKF Tracker#
Models for pedestrians, bicycles (motorcycles), cars and unknown are available. The pedestrian or bicycle tracker is running at the same time as the respective EKF model in order to enable the transition between pedestrian and bicycle tracking. For big vehicles such as trucks and buses, we have separate models for passenger cars and large vehicles because they are difficult to distinguish from passenger cars and are not stable. Therefore, separate models are prepared for passenger cars and big vehicles, and these models are run at the same time as the respective EKF models to ensure stability.
Inputs / Outputs#
The interfaces below are generated from the node design file
design/MultiObjectTracker.node.yaml.
Subscribers#
| Name | Type | Description | Topic (global) |
|---|---|---|---|
detection01/ |
autoware_ |
the detected objects input for channel 1 | |
detection02/ |
autoware_ |
the detected objects input for channel 2 | |
detection03/ |
autoware_ |
the detected objects input for channel 3 | |
detection04/ |
autoware_ |
the detected objects input for channel 4 | |
detection05/ |
autoware_ |
the detected objects input for channel 5 | |
detection06/ |
autoware_ |
the detected objects input for channel 6 | |
detection07/ |
autoware_ |
the detected objects input for channel 7 | |
detection08/ |
autoware_ |
the detected objects input for channel 8 | |
detection09/ |
autoware_ |
the detected objects input for channel 9 | |
detection10/ |
autoware_ |
the detected objects input for channel 10 | |
detection11/ |
autoware_ |
the detected objects input for channel 11 | |
detection12/ |
autoware_ |
the detected objects input for channel 12 | |
input/ |
nav_ |
the odometry input for ego vehicle state estimation | |
ros_ |
tf2_ |
the ros transform input for ego vehicle state estimation | / |
Publishers#
| Name | Type | Description | QoS |
|---|---|---|---|
objects |
autoware_ |
the tracked objects output from the multi-object tracker | reliability: reliable durability: transient_local |
merged_ |
autoware_ |
the merged detected objects output from the multi-object tracker | reliability: reliable durability: transient_local |
Input channel configuration#
Multiple inputs are pre-defined in the input channel parameters (described below) and the inputs can be configured.
rule of the channel configuration
- 'none' or empty : Indicates that this detection input channel is not used/disabled
- Any other string : Specifies a custom channel name to be used for the detection input, configured in
schema/input_channels.schema.json
Up to 12 detection inputs can be configured (detection01 through detection12). Each input consists of an objects topic and its corresponding channel configuration.
Example configurations:
- Single detection input:
input/detection01/objects: /perception/object_recognition/detection/objects
input/detection01/channel: detected_objects # general input channel type
input/detection02/objects: input/objects02
input/detection02/channel: none # Disabled
- Multiple detection inputs:
# lidar centerpoint
input/detection01/objects: /perception/object_recognition/detection/lidar_centerpoint/objects
input/detection01/channel: lidar_centerpoint
# lidar short_range centerpoint
input/detection02/channel: /perception/object_recognition/detection/centerpoint_short_range/objects
input/detection02/objects: lidar_centerpoint_short_range
# camera lidar fusion
input/detection03/objects: /perception/object_recognition/detection/clustering/camera_lidar_fusion/objects
input/detection03/channel: camera_lidar_fusion
# camera lidar fusion based irregular object detection
input/detection04/objects: /perception/object_recognition/detection/irregular_object/objects
input/detection04/channel: camera_lidar_fusion_irregular
# detection by tracker
input/detection05/objects: /perception/object_recognition/detection/detection_by_tracker/objects
input/detection05/channel: detection_by_tracker
# radar
input/detection06/objects: /perception/object_recognition/detection/radar/objects
input/detection06/channel: radar
# disable
input/detection07/objects: input/objects07
input/detection07/channel: none # Disabled
Up to 12 detection inputs can be configured (detection01 through detection12). Each input consists of an objects topic and its corresponding channel configuration.
Parameters#
Node parameters#
The node launch parameters below are generated from the node design file
design/MultiObjectTracker.node.yaml.
| Name | Type | Default | Description |
|---|---|---|---|
input/ |
string | none |
the channel name for channel 1 |
input/ |
string | none |
the channel name for channel 2 |
input/ |
string | none |
the channel name for channel 3 |
input/ |
string | none |
the channel name for channel 4 |
input/ |
string | none |
the channel name for channel 5 |
input/ |
string | none |
the channel name for channel 6 |
input/ |
string | none |
the channel name for channel 7 |
input/ |
string | none |
the channel name for channel 8 |
input/ |
string | none |
the channel name for channel 9 |
input/ |
string | none |
the channel name for channel 10 |
input/ |
string | none |
the channel name for channel 11 |
input/ |
string | none |
the channel name for channel 12 |
publish_ |
boolean | false |
switch to publish the merged detected objects output |
ego_ |
string | tf |
the source of ego vehicle state estimation. "tf" or "odometry" are supported. If "tf" is selected, the ego vehicle state is estimated from the ros transform input. If "odometry" is selected, the ego vehicle state is estimated from the odometry input. |
Input Channel parameters#
| Name | Type | Description | Default | Range |
|---|---|---|---|---|
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
| input_ |
string | Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring. | bev | ['bev', 'polar'] |
| input_ |
boolean | Indicates if the input channel can spawn new trackers. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the existence probability. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object size(extension). | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object classification. | true | N/A |
| input_ |
boolean | Indicates if the input channel can trust the object orientation. | true | N/A |
| input_ |
string | The name of the input channel. | detected_ |
N/A |
| input_ |
string | The short name of the input channel. | all | N/A |
Core Parameters#
- Node
| Name | Type | Description | Default | Range |
|---|---|---|---|---|
| publish_ |
float | Timer frequency to output with delay compensation. | 10.0 | N/A |
| world_ |
string | Object kinematics definition frame. | map | N/A |
| ego_ |
string | Vehicle's ego frame. | base_ |
N/A |
| consider_ |
boolean | If True, consider odometry uncertainty in tracking. | false | N/A |
| ego_ |
string | Backend used to obtain the time-varying ego pose: 'tf' looks it up from the TF tree (legacy), 'odometry' interpolates it from the subscribed ~/input/odometry buffer (TF fallback on miss). | tf | ['tf', 'odometry'] |
| publish_ |
boolean | Publish trigger, independent of delay_compensation. false publishes tracks on measurement; true publishes them from the periodic timer at publish_rate. | false | N/A |
| delay_ |
string | Object-export delay compensation applied to the published tracks (independent of publish_on_timer), ordered from least to most. 'none': no compensation, use the latest detection/update stamp; 'publish_delay': advance the detection stamp by the update->publish delay; 'odometry': compensate up to the newest buffered odometry stamp; 'full': full compensation to the current time. | none | ['none', 'publish_delay', 'odometry', 'full'] |
| tracker_ |
boolean | Estimate velocity for polygon tracks. | true | N/A |
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | N/A | ||
| tracker_ |
boolean | Convert POLYGON shape to BOUNDING_BOX at publish time. | false | N/A |
| pruning_ |
float | Minimum 1D IoU between two pedestrian trackers to mark the pair redundant. | 0.1 | ≥0.0 ≤1.0 |
| pruning_ |
float | Minimum 2D IoU between two known-class trackers to mark the pair redundant; a small fragment contained in a larger object merges by containment below this. | 0.1 | ≥0.0 ≤1.0 |
| pruning_ |
float | Minimum generalized IoU between two unknown trackers to mark the pair redundant. Negative values admit disjoint pairs, bounded by pruning_unknown_pair_max_gap. | 0.1 | ≥-1.0 ≤1.0 |
| pruning_ |
float | Maximum boundary gap [m] for a disjoint unknown-unknown pair to stay merge-eligible. | 1.0 | ≥0.0 |
| publish_ |
boolean | Enable to publish debug message of process time information. | false | N/A |
| publish_ |
boolean | Enable to publish debug message of detailed process time information. | false | N/A |
| publish_ |
boolean | Enable to publish tentative tracked objects, which have lower confidence. | false | N/A |
| publish_ |
boolean | Enable to publish debug markers, which indicates association of multi-inputs, existence probability of each detection. | false | N/A |
| diagnostics_ |
float | Delay threshold for warning diagnostics in seconds. | 0.5 | N/A |
| diagnostics_ |
float | Delay threshold for error diagnostics in seconds. | 1.0 | N/A |
| diagnostics_ |
float | Extrapolation duration threshold for warning diagnostics in seconds. | 0.5 | N/A |
| diagnostics_ |
float | Extrapolation duration threshold for error diagnostics in seconds. | 1.0 | N/A |
- Association
| Name | Type | Description | Default | Range |
|---|---|---|---|---|
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
N/A | Tracker type to spawn for new detections of this class, or "null" to explicitly reject (no tracker created, no association attempted). | N/A | |
| tracker_ |
array | Ordered list of tracker types eligible for association. Omitted when create is "null". | N/A | |
| tracker_ |
object | Per-tracker-type association thresholds keyed by shape then label. Keys are tracker type names (e.g. general_vehicle_tracker). Every (tracker, shape, label) triple listed in tracker_assignment.match must have an explicit entry here. | N/A | |
| unknown_ |
float | GIoU threshold for unknown-unknown association. | -0.8 | N/A |
Assumptions / Known limits#
See the model explanations.
Performance Benchmark & Unit Testing#
Overview#
Unit tests and benchmarks are included to evaluate tracker performance under varying detection loads and object types.
How to Run Locally#
1. Build with Tests#
colcon build --packages-select autoware_multi_object_tracker \
--cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
2. Run the Performance Benchmark#
source install/setup.bash
./build/autoware_multi_object_tracker/test_multi_object_tracker
This runs the default test (SimulatedDataPerformanceTest and RealDataRosbagPerformanceTest) and outputs timing data.
3. Run Optional Profiling Modes/Tests#
PerformanceVsCarCount()PerformanceVsPedestrianCount()PerformanceVsUnknownObjectCount()AssociationTest()
These optional profiling tests are compiled as disabled and can be run directly using GoogleTest options:
To run a specific option profiling test:
./build/autoware_multi_object_tracker/test_multi_object_tracker \
--gtest_also_run_disabled_tests \
--gtest_filter="*.*AssociationTest"
To run multiple profiling tests together (separate with :):
./build/autoware_multi_object_tracker/test_multi_object_tracker \
--gtest_also_run_disabled_tests \
--gtest_filter="*.*AssociationTest:*.*PerformanceVsPedestrianCount"
This allows you to evaluate scalability with object count and other scenarios without modifying the source code.
Rosbag Replay & Visualization#
Simulated Rosbag Output#
To record benchmark results for visualization in RViz:
- Enable
write_bag = trueinrunIterations() - Run the test; the output
.db3path is printed - Play rosbag and visualize using rviz(suggested to use a product one):
ros2 bag play <output_file>.db3
rviz2 -d <your_rviz_config>.rviz
Real Rosbag Input#
- Set the path in
runPerformanceTestWithRosbag()to a real.db3file - Run the test
- Visualize the tracking result in RViz
(Optional) Error detection and handling#
(Optional) Performance characterization#
Evaluation of muSSP#
According to our evaluation, muSSP is faster than normal SSP when the matrix size is more than 100.
Execution time for varying matrix size at 95% sparsity. In real data, the sparsity was often around 95%.

Execution time for varying the sparsity with matrix size 100.

(Optional) References/External links#
This package makes use of external code.
| Name | License | Original Repository |
|---|---|---|
| muSSP | Apache-2.0 | https://github.com/yu-lab-vt/muSSP |
[1] C. Wang, Y. Wang, Y. Wang, C.-t. Wu, and G. Yu, "muSSP: Efficient Min-cost Flow Algorithm for Multi-object Tracking," NeurIPS, 2019