Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_tracking_object_merger at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-15 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Taekjin Lee
- Lei Gu
Authors
Tracking Object Merger
Purpose
This package try to merge two tracking objects from different sensor.
Inner-workings / Algorithms
Merging tracking objects from different sensor is a combination of data association and state fusion algorithms.
Detailed process depends on the merger policy.
decorative_tracker_merger
In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects.
The name decorative means that sub tracking objects are used to complement the main objects.
Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera.
Here show the processing pipeline.
time sync
Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object.
data association
In the data association, we use the following rules to determine whether two tracking objects are the same object.
- gating
-
distance gate: distance between two tracking objects -
angle gate: angle between two tracking objects -
mahalanobis_distance_gate: Mahalanobis distance between two tracking objects -
min_iou_gate: minimum IoU between two tracking objects -
max_velocity_gate: maximum velocity difference between two tracking objects
-
- score
- score used in matching is equivalent to the distance between two tracking objects
tracklet update
Sub tracking objects are merged into dominant tracking objects.
Depends on the tracklet input sensor state, we update the tracklet state with different rules.
| state\priority | 1st | 2nd | 3rd |
|---|---|---|---|
| Kinematics except velocity | LiDAR | Radar | Camera |
| Forward velocity | Radar | LiDAR | Camera |
| Object classification | Camera | LiDAR | Radar |
tracklet management
We use the existence_probability to manage tracklet.
- When we create a new tracklet, we set the
existence_probabilityto $p_{sensor}$ value. - In each update with specific sensor, we set the
existence_probabilityto $p_{sensor}$ value. - When tracklet does not have update with specific sensor, we reduce the
existence_probabilitybydecay_rate - Object can be published if
existence_probabilityis larger thanpublish_probability_thresholdand time from last update is smaller thanmax_dt - Object will be removed if
existence_probabilityis smaller thanremove_probability_thresholdand time from last update is larger thanmax_dt
These parameter can be set in config/decorative_tracker_merger.param.yaml.
tracker_state_parameter:
remove_probability_threshold: 0.3
publish_probability_threshold: 0.6
default_lidar_existence_probability: 0.7
default_radar_existence_probability: 0.6
default_camera_existence_probability: 0.6
decay_rate: 0.1
max_dt: 1.0
input/parameters
| topic name | message type | description |
|---|---|---|
~input/main_object |
autoware_perception_msgs::TrackedObjects |
Dominant tracking objects. Output will be published with this dominant object stamps. |
~input/sub_object |
autoware_perception_msgs::TrackedObjects |
Sub tracking objects. |
output/object |
autoware_perception_msgs::TrackedObjects |
Merged tracking objects. |
debug/interpolated_sub_object |
autoware_perception_msgs::TrackedObjects |
Interpolated sub tracking objects. |
Default parameters are set in config/decorative_tracker_merger.param.yaml.
| parameter name | description | default value |
|---|---|---|
base_link_frame_id |
base link frame id. This is used to transform the tracking object. | “base_link” |
time_sync_threshold |
time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 |
sub_object_timeout_sec |
sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 |
main_sensor_type |
main sensor type. This is used to determine the dominant tracking object. | “lidar” |
sub_sensor_type |
sub sensor type. This is used to determine the sub tracking object. | “radar” |
tracker_state_parameter |
tracker state parameter. This is used to manage the tracklet. |
- the detail of
tracker_state_parameteris described in tracklet management
File truncated at 100 lines see the full file
Changelog for package autoware_tracking_object_merger
0.53.0 (2026-09-29)
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
chore(data_association_matrix.param.yaml): remove OVERRIDE marker from master file (#12802) chore: remove OVERRIDE marker from master file
-
feat(autoware_tracking_object_merger): update parameter to add ANIMAL and HAZARD classes (#12778) update parameter to add ANIMAL and HAZARD classes
-
feat(decorative_tracker_merger): apply [agnocast_wrapper::Node]{.title-ref} to [decorative_tracker_merger]{.title-ref} (#12709)
- apply agnocast_wrapper::Node
- fix
- style(pre-commit): autofix
- fix clang-format
- fix cpplint
* apply copilot fix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Masaki Baba, Taeseung Sohn, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(perception): replace autoware_universe_utils with specific autoware_utils sub-packages (#12425)
-
chore(perception): move perception node configuration file to each package (#12440) move perception node configuration file to each package
-
feat(decorative_tracker_merger): apply autoware_agnocast_wrapper for CIE (#12331) feat(autoware_tracking_object_merger): apply autoware_agnocast_wrapper for CIE
-
refactor(autoware_universe): use autoware_ament_auto_package in perception packages (#12275) Co-authored-by: github-actions <<github-actions@github.com>>
-
perf(perception): use emplace_back and emplace to avoid temporary object creation (#12201)
- perf(perception): use emplace_back to avoid temporary object creation
- style(pre-commit): autofix
- perf(perception): use emplace/emplace_back for most containers
* style(pre-commit): autofix ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Taekjin LEE <<taekjin.lee@tier4.jp>>
-
feat(autowar_tracking_object_merger): remove glog (#12165) feat: remove glog
-
Contributors: Taekjin LEE, Tetsuhiro Kawaguchi, Vishal Chauhan, atsushi yano, github-actions, nishikawa-masaki
0.50.0 (2026-02-14)
- Merge remote-tracking branch 'origin/main' into humble
- feat!: remove ROS 2 Galactic codes (#11905)
- Contributors: Ryohsuke Mitsudome
0.49.0 (2025-12-30)
0.48.0 (2025-11-18)
- Merge remote-tracking branch 'origin/main' into humble
- fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
- Contributors: Ryohsuke Mitsudome, Tim Clephas
0.47.1 (2025-08-14)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_perception_launch |
Launch files
- launch/decorative_tracker_merger.launch.xml
-
- node_name [default: $(anon decorative_tracker_merger)]
- input/main_object [default: main_object]
- input/sub_object [default: sub_object]
- output [default: merged_object]
- data_association_matrix_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/data_association_matrix.param.yaml]
- merge_options_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger_policy.param.yaml]
- node_param_file_path [default: $(find-pkg-share autoware_tracking_object_merger)/config/decorative_tracker_merger.param.yaml]