Skip to content

chore(autoware_multi_object_tracker): refactoring association algorithms#12477

Open
technolojin wants to merge 18 commits intoautowarefoundation:mainfrom
technolojin:chore/mot/association-classes
Open

chore(autoware_multi_object_tracker): refactoring association algorithms#12477
technolojin wants to merge 18 commits intoautowarefoundation:mainfrom
technolojin:chore/mot/association-classes

Conversation

@technolojin
Copy link
Copy Markdown
Contributor

@technolojin technolojin commented Apr 14, 2026

Description

  • Refactoring association related algorithms as new classes.

    • rename: DataAssociation -> AssociationManager
    • separate: TrackerProcessor::mergeOverlappedTracker -> TrackerOverlapManager
  • add a placeholder for new association algorithm

  • remove deprecated parameter tracker_lifetime

  • add association parameter associator_type per channel

This PR does not change any logic

Related links

Parameter update autowarefoundation/autoware_launch#1819

How was this PR tested?

Tested by the sample sensor kit system

Notes for reviewers

None.

Interface changes

ROS Parameter Changes

Additions and removals

Change type Parameter Name Type Default Value Description
Added associator_type string bev Association algorithm for this channel. 'bev': bird's-eye-view area scoring with GNN assignment. 'polar': polar-coordinate (range-bearing) scoring.
Removed tracker_lifetime tracker lifetime is managed by uncertainty, not a fixed time

Effects on system behavior

None.

@technolojin technolojin self-assigned this Apr 14, 2026
@github-actions github-actions bot added the component:perception Advanced sensor data processing and environment understanding. (auto-assigned) label Apr 14, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 14, 2026

Thank you for contributing to the Autoware project!

🚧 If your pull request is in progress, switch it to draft mode.

Please ensure:

@mergify
Copy link
Copy Markdown

mergify bot commented Apr 14, 2026

⚠️ The sha of the head commit of this PR conflicts with #12475. Mergify cannot evaluate rules on this PR. Once #12475 is merged or closed, Mergify will resume processing this PR. ⚠️

technolojin and others added 16 commits April 14, 2026 14:50
… modules

- Added AssociationManager class to handle online measurement-to-tracker associations and overlap merging.
- Introduced scoring modules for match scoring and overlap scoring, including methods for calculating association scores and determining overlap thresholds.
- Implemented new association algorithms: SensorPerspectiveAssociation for future enhancements and OverlapMerger for managing spatially redundant trackers.
- Updated CMakeLists.txt to include new source files and headers for the association and scoring functionalities.

This commit enhances the multi-object tracking capabilities by providing a structured approach to manage associations and overlaps, paving the way for improved tracking accuracy and efficiency.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…nterface and algorithms

- Introduced IAssociation interface for measurement-to-tracker association strategies.
- Updated AssociationManager to select associators based on input channel configuration.
- Implemented DataAssociation and SensorPerspectiveAssociation classes adhering to the new interface.
- Enhanced InputChannel struct to support associator type selection.
- Updated relevant source files to integrate new association logic and improve modularity.

These changes improve the flexibility and extensibility of the association algorithms used in multi-object tracking.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…e classes for clarity

- Renamed OverlapMerger to TrackerMerger to better reflect its functionality in merging spatially redundant trackers.
- Updated AssociationManager to utilize TrackerMerger and BevAreaAssociation for improved association management.
- Enhanced documentation to clarify the two-layer association process: Detection-to-Tracker (D2T) and Tracker-to-Tracker (T2T).
- Adjusted configuration structures and parameters to align with the new naming conventions and improve clarity.

These changes enhance the modularity and readability of the multi-object tracking system, facilitating future enhancements and maintenance.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…rackerMerger

- Replaced instances of OverlapMerger with TrackerMerger in the test_multi_object_tracker.cpp file to align with recent refactoring changes.
- This update ensures consistency in the configuration naming and improves clarity in the association management process.

These changes contribute to a more coherent structure in the multi-object tracking system.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…vAreaAssociation

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…ement-to-tracker association

- Added AssociationInterface as an abstract base class for various association strategies.
- Updated existing association classes (BevAreaAssociation, SensorPerspectiveAssociation) to inherit from AssociationInterface, enhancing modularity and clarity.
- Refactored AssociationManager to utilize AssociationInterface for selecting association implementations based on input channel configuration.

These changes improve the flexibility and maintainability of the multi-object tracking system's association logic.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…duce new algorithms

- Renamed and refactored association classes: OverlapMerger is now TrackerMerger, and new classes BevAssociation and PolarAssociation have been introduced for improved measurement-to-tracker association strategies.
- Updated AssociationManager to utilize the new TrackerOverlapManager for merging spatially overlapping trackers, enhancing the modularity and clarity of the association logic.
- Adjusted configuration structures to reflect the new naming conventions and improve clarity in the association management process.

These changes enhance the flexibility and maintainability of the multi-object tracking system, paving the way for future enhancements.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…ng TrackerOverlapManager

- Removed TrackerOverlapManager from AssociationManager, streamlining the association process to focus solely on measurement-to-tracker associations.
- Updated constructor and associated methods to reflect this change, enhancing clarity and reducing complexity in the association logic.
- Adjusted TrackerProcessor to directly manage tracker merging through TrackerOverlapManager, maintaining functionality while improving modularity.

These changes contribute to a more efficient and maintainable multi-object tracking system.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…sociation logic

- Replaced match scoring and overlap scoring with new assignment scoring and redundancy check modules to enhance the association process.
- Introduced new scoring methods for calculating assignment scores and checking for spatial redundancy between trackers.
- Updated relevant source files and CMakeLists.txt to reflect these changes, improving modularity and clarity in the association logic.

These updates contribute to a more efficient and maintainable multi-object tracking system.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
… deprecated tracker_lifetime parameter

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…annels

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
… single header

- Replaced multiple includes of object_model/types.hpp with a unified include of types.hpp across various files to streamline dependencies.
- Introduced a new types.hpp file that consolidates type definitions previously scattered across different files, improving organization and maintainability.
- Updated CMakeLists.txt to reflect the new file structure.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
- Updated comments in configurations.hpp, association_manager.hpp, and tracker_overlap_manager.cpp to use a consistent arrow notation (->) instead of the previous notation (→).
- This change enhances readability and maintains uniformity across the codebase.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
…tracker files

- Changed comment notation from single-line to multi-line style for improved readability in configurations.hpp, association_base.hpp, multi_object_tracker_core.cpp, multi_object_tracker_core.hpp, and debugger.cpp.
- This update enhances uniformity in the codebase, making it easier to follow and maintain.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
@technolojin technolojin force-pushed the chore/mot/association-classes branch from ec0ccd0 to f8d994f Compare April 14, 2026 05:50
@technolojin technolojin added the run:build-and-test-differential Mark to enable build-and-test-differential workflow. (used-by-ci) label Apr 14, 2026
@codecov
Copy link
Copy Markdown

codecov bot commented Apr 14, 2026

Codecov Report

❌ Patch coverage is 59.72851% with 89 lines in your changes missing coverage. Please review.
✅ Project coverage is 43.15%. Comparing base (c0d4a7f) to head (5c5018c).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
...racker/lib/association/tracker_overlap_manager.cpp 51.80% 0 Missing and 40 partials ⚠️
...e_multi_object_tracker/src/processor/processor.cpp 26.66% 5 Missing and 6 partials ⚠️
...i_object_tracker/src/multi_object_tracker_node.cpp 0.00% 10 Missing ⚠️
...i_object_tracker/src/multi_object_tracker_core.cpp 0.00% 7 Missing ⚠️
...ct_tracker/lib/association/association_manager.cpp 58.33% 3 Missing and 2 partials ⚠️
...object_tracker/lib/association/bev_association.cpp 73.68% 1 Missing and 4 partials ⚠️
...acker/lib/association/scoring/redundancy_check.cpp 86.11% 0 Missing and 5 partials ⚠️
...lib/association/scoring/bev_assignment_scoring.cpp 90.62% 1 Missing and 2 partials ⚠️
...ject_tracker/lib/association/polar_association.cpp 0.00% 2 Missing ⚠️
...e/autoware/multi_object_tracker/configurations.hpp 0.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##             main   #12477       +/-   ##
===========================================
+ Coverage   18.71%   43.15%   +24.43%     
===========================================
  Files        1906       57     -1849     
  Lines      130359     3434   -126925     
  Branches    44133     1201    -42932     
===========================================
- Hits        24401     1482    -22919     
+ Misses      85956     1570    -84386     
+ Partials    20002      382    -19620     
Flag Coverage Δ
daily ?
full-suite 43.15% <59.72%> (+24.44%) ⬆️

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@mergify
Copy link
Copy Markdown

mergify bot commented Apr 14, 2026

⚠️ The sha of the head commit of this PR conflicts with #12475. Mergify cannot evaluate rules on this PR. Once #12475 is merged or closed, Mergify will resume processing this PR. ⚠️

…oved assignment scoring

- Replaced the previous assignment scoring mechanism with a new `bev_assignment_scoring` module to enhance the calculation of assignment scores between trackers and measurements.
- Updated relevant files to reflect the new scoring method, including changes in CMakeLists.txt and associated header/source files.
- This update aims to improve the accuracy and efficiency of the multi-object tracking system.

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
return *polar_association_;
}
}
return *bev_association_;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the abnormal case where channel_index >= channels_config_.size(), this returns bev_association_ instead of raising an error or warning. Is this behavior by design

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for (size_t i = 0; i < input_channels.size(); i++) {
const std::string & input_channel = input_channels.at(i);
types::InputChannel input_channel_config;
input_channel_config.index = static_cast<uint>(i);

the index always smaller than the config array size.
we may not need to check in the first place.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed 5c5018c

Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component:perception Advanced sensor data processing and environment understanding. (auto-assigned) run:build-and-test-differential Mark to enable build-and-test-differential workflow. (used-by-ci)

Projects

Status: To Triage

Development

Successfully merging this pull request may close these issues.

2 participants