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(autoware_tracker_object_merger): add diagnostics #10257

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
merge_frame_id: "map"
time_sync_threshold: 0.999
sub_object_timeout_sec: 0.8
publish_interpolated_sub_objects: true #for debug
publish_interpolated_sub_objects: true # for debug

# choose the input sensor type for each object type
# "lidar", "radar", "camera" are available
Expand All @@ -25,3 +25,8 @@
# logging settings
enable_logging: false
logging_file_path: "association_log.json"

# diagnostics
delay_main_objects_tolerance: 1.0 # [sec]
duration_empty_main_objects_tolerance: 5.0 # [sec]
delay_sub_objects_tolerance: 5.0 # [sec]
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "autoware/tracking_object_merger/association/data_association.hpp"
#include "autoware/tracking_object_merger/utils/tracker_state.hpp"
#include "autoware/tracking_object_merger/utils/utils.hpp"
#include "autoware/universe_utils/ros/diagnostics_interface.hpp"
#include "autoware_utils/ros/debug_publisher.hpp"
#include "autoware_utils/ros/published_time_publisher.hpp"
#include "autoware_utils/system/stop_watch.hpp"
Expand Down Expand Up @@ -76,6 +77,7 @@ class DecorativeTrackerMergerNode : public rclcpp::Node
TrackerState createNewTracker(
const MEASUREMENT_STATE input_index, rclcpp::Time current_time,
const autoware_perception_msgs::msg::TrackedObject & input_object);
void updateDiagnostics();

private:
tf2_ros::Buffer tf_buffer_;
Expand Down Expand Up @@ -129,6 +131,13 @@ class DecorativeTrackerMergerNode : public rclcpp::Node
bool enable = false;
std::string path;
} logging_;

// diagnostics
std::unique_ptr<autoware::universe_utils::DiagnosticsInterface> diagnostics_interface_ptr_;
double delay_main_objects_tolerance_;
double duration_empty_main_objects_tolerance_;
double delay_sub_objects_tolerance_;
bool is_empty_previous_main_objects_;
};

} // namespace autoware::tracking_object_merger
Expand Down
2 changes: 1 addition & 1 deletion perception/autoware_tracking_object_merger/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<depend>autoware_object_recognition_utils</depend>
<depend>autoware_perception_msgs</depend>
<depend>autoware_utils</depend>
<depend>autoware_universe_utils</depend>
<depend>eigen</depend>
<depend>glog</depend>
<depend>mussp</depend>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@
tracker_state_parameter_.decay_rate =
declare_parameter<double>("tracker_state_parameter.decay_rate");
tracker_state_parameter_.max_dt = declare_parameter<double>("tracker_state_parameter.max_dt");
delay_main_objects_tolerance_ = declare_parameter<double>("delay_main_objects_tolerance");
duration_empty_main_objects_tolerance_ =
declare_parameter<double>("duration_empty_main_objects_tolerance");
delay_sub_objects_tolerance_ = declare_parameter<double>("delay_sub_objects_tolerance");

Check warning on line 143 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L140-L143

Added lines #L140 - L143 were not covered by tests

const std::string main_sensor_type = declare_parameter<std::string>("main_sensor_type");
const std::string sub_sensor_type = declare_parameter<std::string>("sub_sensor_type");
Expand Down Expand Up @@ -168,6 +172,14 @@
stop_watch_ptr_->tic("cyclic_time");
stop_watch_ptr_->tic("processing_time");
published_time_publisher_ = std::make_unique<autoware_utils::PublishedTimePublisher>(this);

// diagnostics
diagnostics_interface_ptr_ = std::make_unique<autoware::universe_utils::DiagnosticsInterface>(
this, "decorative_object_merger_node");
stop_watch_ptr_->tic("delay_main_objects");
stop_watch_ptr_->tic("duration_empty_main_objects");
stop_watch_ptr_->tic("delay_sub_objects");
is_empty_previous_main_objects_ = false;

Check warning on line 182 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (main)

❌ New issue: Large Method

DecorativeTrackerMergerNode::DecorativeTrackerMergerNode has 71 lines, threshold = 70. Large functions with many lines of code are generally harder to understand and lower the code health. Avoid adding more lines to this function.

Check warning on line 182 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L177-L182

Added lines #L177 - L182 were not covered by tests
}

void DecorativeTrackerMergerNode::set3dDataAssociation(
Expand Down Expand Up @@ -200,6 +212,18 @@
const TrackedObjects::ConstSharedPtr & main_objects)
{
stop_watch_ptr_->toc("processing_time", true);
stop_watch_ptr_->toc("delay_main_objects", true);
diagnostics_interface_ptr_->clear();

Check warning on line 216 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L215-L216

Added lines #L215 - L216 were not covered by tests

// check if main objects is empty and duration
if (main_objects->objects.empty() && is_empty_previous_main_objects_) {
is_empty_previous_main_objects_ = true;

Check warning on line 220 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L220

Added line #L220 was not covered by tests
} else if (main_objects->objects.empty() && !is_empty_previous_main_objects_) {
stop_watch_ptr_->toc("duration_empty_main_objects", true);
is_empty_previous_main_objects_ = true;

Check warning on line 223 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L222-L223

Added lines #L222 - L223 were not covered by tests
} else {
is_empty_previous_main_objects_ = false;

Check warning on line 225 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L225

Added line #L225 was not covered by tests
}

/* transform to target merge coordinate */
TrackedObjects transformed_objects;
Expand Down Expand Up @@ -243,12 +267,16 @@
const auto & tracked_objects = getTrackedObjects(transformed_main_objects->header);
merged_object_pub_->publish(tracked_objects);

// update diagnostics
updateDiagnostics();

Check warning on line 271 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L271

Added line #L271 was not covered by tests

published_time_publisher_->publish_if_subscribed(
merged_object_pub_, tracked_objects.header.stamp);
processing_time_publisher_->publish<autoware_internal_debug_msgs::msg::Float64Stamped>(
"debug/cyclic_time_ms", stop_watch_ptr_->toc("cyclic_time", true));
processing_time_publisher_->publish<autoware_internal_debug_msgs::msg::Float64Stamped>(
"debug/processing_time_ms", stop_watch_ptr_->toc("processing_time", true));
diagnostics_interface_ptr_->publish(tracked_objects.header.stamp);

Check warning on line 279 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (main)

❌ New issue: Complex Method

DecorativeTrackerMergerNode::mainObjectsCallback has a cyclomatic complexity of 10, threshold = 9. This function has many conditional statements (e.g. if, for, while), leading to lower code health. Avoid adding more conditionals and code to it without refactoring.

Check warning on line 279 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L279

Added line #L279 was not covered by tests
}

/**
Expand All @@ -259,6 +287,9 @@
*/
void DecorativeTrackerMergerNode::subObjectsCallback(const TrackedObjects::ConstSharedPtr & msg)
{
stop_watch_ptr_->toc("delay_sub_objects", true);
diagnostics_interface_ptr_->clear();

Check warning on line 291 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L290-L291

Added lines #L290 - L291 were not covered by tests

/* transform to target merge coordinate */
TrackedObjects transformed_objects;
if (!autoware::object_recognition_utils::transformObjects(
Expand All @@ -277,6 +308,11 @@
return (now - rclcpp::Time(sub_object->header.stamp)).seconds() > sub_object_timeout_sec_;
});
sub_objects_buffer_.erase(remove_itr, sub_objects_buffer_.end());

// update diagnostics
updateDiagnostics();

Check warning on line 313 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L313

Added line #L313 was not covered by tests

diagnostics_interface_ptr_->publish(transformed_sub_objects->header.stamp);

Check warning on line 315 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L315

Added line #L315 was not covered by tests
}

/**
Expand Down Expand Up @@ -446,6 +482,46 @@
return new_tracker;
}

void DecorativeTrackerMergerNode::updateDiagnostics()

Check warning on line 485 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L485

Added line #L485 was not covered by tests
{
const double delay_main_objects = stop_watch_ptr_->toc("delay_main_objects", false) * 1e-3;

Check warning on line 487 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L487

Added line #L487 was not covered by tests
const double duration_empty_main_objects =
stop_watch_ptr_->toc("duration_empty_main_objects", false) * 1e-3;
const double delay_sub_objects = stop_watch_ptr_->toc("delay_sub_objects", false) * 1e-3;

Check warning on line 490 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L489-L490

Added lines #L489 - L490 were not covered by tests

diagnostics_interface_ptr_->add_key_value("delay_main_objects", delay_main_objects);

Check warning on line 492 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L492

Added line #L492 was not covered by tests
if (delay_main_objects > delay_main_objects_tolerance_) {
std::stringstream message;

Check warning on line 494 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L494

Added line #L494 was not covered by tests
message << "Main object is delayed for longer than tolerance " << delay_main_objects << " > "
<< delay_main_objects_tolerance_;
diagnostics_interface_ptr_->update_level_and_message(
diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str());
}

Check warning on line 499 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L496-L499

Added lines #L496 - L499 were not covered by tests

if (is_empty_previous_main_objects_) {
diagnostics_interface_ptr_->add_key_value(

Check warning on line 502 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L502

Added line #L502 was not covered by tests
"duration_empty_main_objects", duration_empty_main_objects);
if (duration_empty_main_objects > duration_empty_main_objects_tolerance_) {
std::stringstream message;

Check warning on line 505 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L505

Added line #L505 was not covered by tests
message << "Main object continues to be empty for longer than tolerance "
<< duration_empty_main_objects << " > " << duration_empty_main_objects_tolerance_;
diagnostics_interface_ptr_->update_level_and_message(
diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str());
}

Check warning on line 510 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L507-L510

Added lines #L507 - L510 were not covered by tests
} else {
diagnostics_interface_ptr_->add_key_value("duration_empty_main_objects", 0.0);

Check warning on line 512 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L512

Added line #L512 was not covered by tests
}

diagnostics_interface_ptr_->add_key_value("delay_sub_objects", delay_sub_objects);

Check warning on line 515 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L515

Added line #L515 was not covered by tests
if (delay_sub_objects > delay_sub_objects_tolerance_) {
std::stringstream message;

Check warning on line 517 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L517

Added line #L517 was not covered by tests
message << "Sub object is delayed for longer than tolerance" << delay_sub_objects << " > "
<< delay_sub_objects_tolerance_;
diagnostics_interface_ptr_->update_level_and_message(
diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str());
}
}

Check warning on line 523 in perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp

View check run for this annotation

Codecov / codecov/patch

perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp#L519-L523

Added lines #L519 - L523 were not covered by tests

} // namespace autoware::tracking_object_merger

#include <rclcpp_components/register_node_macro.hpp>
Expand Down
Loading