Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(multi_object_tracker): enable to track large/small size object #5858

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ class DataAssociation
void assign(
const Eigen::MatrixXd & src, std::unordered_map<int, int> & direct_assignment,
std::unordered_map<int, int> & reverse_assignment);
void filterMeasurementsBySize(
const autoware_auto_perception_msgs::msg::DetectedObjects & measurements,
autoware_auto_perception_msgs::msg::DetectedObjects & filtered_measurements,
autoware_auto_perception_msgs::msg::DetectedObjects & unexpected_measurements);
Eigen::MatrixXd calcScoreMatrix(
const autoware_auto_perception_msgs::msg::DetectedObjects & measurements,
const std::list<std::shared_ptr<Tracker>> & trackers);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2020 Tier IV, Inc.

Check warning on line 1 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (main)

❌ New issue: Overall Code Complexity

This module has a mean cyclomatic complexity of 5.86 across 7 functions. The mean complexity threshold is 4. This file has many conditional statements (e.g. if, for, while) across its implementation, leading to lower code health. Avoid adding more conditionals.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -146,6 +146,47 @@
}
}

/**
* @brief filter measurements by its size, large/small objects are converted to UNKNOWN
*
* @param measurements
* @param filtered_measurements
* @param unexpected_measurements
*/
void DataAssociation::filterMeasurementsBySize(

Check warning on line 156 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/data_association/data_association.cpp#L156

Added line #L156 was not covered by tests
const autoware_auto_perception_msgs::msg::DetectedObjects & measurements,
autoware_auto_perception_msgs::msg::DetectedObjects & filtered_measurements,
autoware_auto_perception_msgs::msg::DetectedObjects & unexpected_measurements)
{
// copy header
filtered_measurements.header = measurements.header;
unexpected_measurements.header = measurements.header;
filtered_measurements.objects.clear();
unexpected_measurements.objects.clear();

Check warning on line 165 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/data_association/data_association.cpp#L164-L165

Added lines #L164 - L165 were not covered by tests

// filter objects by its size
const double max_unknown_area = max_area_matrix_(0, 0);
const double min_unknown_area = min_area_matrix_(0, 0);

Check warning on line 169 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/data_association/data_association.cpp#L168-L169

Added lines #L168 - L169 were not covered by tests
const auto unknown_classifications =
object_recognition_utils::toObjectClassifications("UNKNOWN", 1.0); // for label replace
for (const auto & measurement : measurements.objects) {

Check warning on line 172 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/data_association/data_association.cpp#L171-L172

Added lines #L171 - L172 were not covered by tests
const std::uint8_t measurement_label =
object_recognition_utils::getHighestProbLabel(measurement.classification);
const double area = tier4_autoware_utils::getArea(measurement.shape);
const double max_area = max_area_matrix_(measurement_label, measurement_label);
const double min_area = min_area_matrix_(measurement_label, measurement_label);
if (area > min_area && max_area > area) {
filtered_measurements.objects.push_back(measurement);
} else if (area > min_unknown_area && max_unknown_area > area) {
auto label_fixed_measurement = measurement;
label_fixed_measurement.classification = unknown_classifications;
filtered_measurements.objects.push_back(label_fixed_measurement);
} else {
unexpected_measurements.objects.push_back(measurement);

Check warning on line 185 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/data_association/data_association.cpp#L175-L185

Added lines #L175 - L185 were not covered by tests
}
}
}

Check warning on line 188 in perception/multi_object_tracker/src/data_association/data_association.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/data_association/data_association.cpp#L188

Added line #L188 was not covered by tests

Eigen::MatrixXd DataAssociation::calcScoreMatrix(
const autoware_auto_perception_msgs::msg::DetectedObjects & measurements,
const std::list<std::shared_ptr<Tracker>> & trackers)
Expand Down
14 changes: 10 additions & 4 deletions perception/multi_object_tracker/src/multi_object_tracker_core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -261,10 +261,16 @@
(*itr)->predict(measurement_time);
}

/* filter by objects size before association */
autoware_auto_perception_msgs::msg::DetectedObjects filtered_objects;
autoware_auto_perception_msgs::msg::DetectedObjects unexpected_objects;
data_association_->filterMeasurementsBySize(

Check warning on line 267 in perception/multi_object_tracker/src/multi_object_tracker_core.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/multi_object_tracker_core.cpp#L267

Added line #L267 was not covered by tests
transformed_objects, filtered_objects, unexpected_objects);

/* global nearest neighbor */
std::unordered_map<int, int> direct_assignment, reverse_assignment;
Eigen::MatrixXd score_matrix = data_association_->calcScoreMatrix(
transformed_objects, list_tracker_); // row : tracker, col : measurement
filtered_objects, list_tracker_); // row : tracker, col : measurement

Check warning on line 273 in perception/multi_object_tracker/src/multi_object_tracker_core.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/multi_object_tracker_core.cpp#L273

Added line #L273 was not covered by tests
data_association_->assign(score_matrix, direct_assignment, reverse_assignment);

/* tracker measurement update */
Expand All @@ -274,7 +280,7 @@
if (direct_assignment.find(tracker_idx) != direct_assignment.end()) { // found
(*(tracker_itr))
->updateWithMeasurement(
transformed_objects.objects.at(direct_assignment.find(tracker_idx)->second),
filtered_objects.objects.at(direct_assignment.find(tracker_idx)->second),

Check warning on line 283 in perception/multi_object_tracker/src/multi_object_tracker_core.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/multi_object_tracker_core.cpp#L283

Added line #L283 was not covered by tests
measurement_time, *self_transform);
} else { // not found
(*(tracker_itr))->updateWithoutMeasurement();
Expand All @@ -287,12 +293,12 @@
sanitizeTracker(list_tracker_, measurement_time);

/* new tracker */
for (size_t i = 0; i < transformed_objects.objects.size(); ++i) {
for (size_t i = 0; i < filtered_objects.objects.size(); ++i) {

Check warning on line 296 in perception/multi_object_tracker/src/multi_object_tracker_core.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/multi_object_tracker_core.cpp#L296

Added line #L296 was not covered by tests
if (reverse_assignment.find(i) != reverse_assignment.end()) { // found
continue;
}
std::shared_ptr<Tracker> tracker =
createNewTracker(transformed_objects.objects.at(i), measurement_time, *self_transform);
createNewTracker(filtered_objects.objects.at(i), measurement_time, *self_transform);

Check warning on line 301 in perception/multi_object_tracker/src/multi_object_tracker_core.cpp

View check run for this annotation

Codecov / codecov/patch

perception/multi_object_tracker/src/multi_object_tracker_core.cpp#L301

Added line #L301 was not covered by tests
if (tracker) list_tracker_.push_back(tracker);
}

Expand Down
Loading