Skip to content

Commit 64840ae

Browse files
committed
feat: subdivide diagnostics items by check content
Signed-off-by: Motsu-san <83898149+Motsu-san@users.noreply.github.com>
1 parent 7063220 commit 64840ae

1 file changed

Lines changed: 104 additions & 53 deletions

File tree

localization/autoware_ekf_localizer/src/ekf_localizer.cpp

Lines changed: 104 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -373,84 +373,135 @@ void EKFLocalizer::publish_diagnostics(
373373
diagnostic_msgs::msg::DiagnosticArray diag_msg;
374374
diag_msg.header.stamp = current_time;
375375

376-
// 1. General status (その他)
376+
// 1. Activation state diagnostic
377377
{
378-
std::vector<diagnostic_msgs::msg::DiagnosticStatus> general_diag_array;
379-
general_diag_array.push_back(check_process_activated(is_activated_));
380-
general_diag_array.push_back(check_set_initialpose(is_set_initialpose_));
381-
382-
diagnostic_msgs::msg::DiagnosticStatus general_status =
383-
merge_diagnostic_status(general_diag_array);
384-
general_status.name = "localization: " + std::string(this->get_name()) + ": general_status";
385-
general_status.hardware_id = this->get_name();
386-
diag_msg.status.push_back(general_status);
378+
diagnostic_msgs::msg::DiagnosticStatus status = check_process_activated(is_activated_);
379+
status.name = "localization: " + std::string(this->get_name()) + ": is_activated";
380+
status.hardware_id = this->get_name();
381+
diag_msg.status.push_back(status);
382+
}
383+
384+
// 2. Initial pose setting diagnostic
385+
{
386+
diagnostic_msgs::msg::DiagnosticStatus status = check_set_initialpose(is_set_initialpose_);
387+
status.name = "localization: " + std::string(this->get_name()) + ": is_set_initialpose";
388+
status.hardware_id = this->get_name();
389+
diag_msg.status.push_back(status);
387390
}
388391

389392
if (is_activated_ && is_set_initialpose_) {
390-
// 2. Pose diagnostics (pose_...)
393+
// 3. Pose no update count diagnostic
391394
{
392-
std::vector<diagnostic_msgs::msg::DiagnosticStatus> pose_diag_array;
393-
pose_diag_array.push_back(check_measurement_updated(
395+
diagnostic_msgs::msg::DiagnosticStatus status = check_measurement_updated(
394396
"pose", pose_diag_info_.no_update_count, params_.pose_no_update_count_threshold_warn,
395-
params_.pose_no_update_count_threshold_error));
396-
pose_diag_array.push_back(check_measurement_queue_size("pose", pose_diag_info_.queue_size));
397-
pose_diag_array.push_back(check_measurement_delay_gate(
397+
params_.pose_no_update_count_threshold_error);
398+
status.name = "localization: " + std::string(this->get_name()) + ": pose_no_update_count";
399+
status.hardware_id = this->get_name();
400+
diag_msg.status.push_back(status);
401+
}
402+
403+
// 4. Pose queue size diagnostic
404+
{
405+
diagnostic_msgs::msg::DiagnosticStatus status =
406+
check_measurement_queue_size("pose", pose_diag_info_.queue_size);
407+
status.name = "localization: " + std::string(this->get_name()) + ": pose_queue_size";
408+
status.hardware_id = this->get_name();
409+
diag_msg.status.push_back(status);
410+
}
411+
412+
// 5. Pose delay time diagnostic
413+
{
414+
diagnostic_msgs::msg::DiagnosticStatus status = check_measurement_delay_gate(
398415
"pose", pose_diag_info_.is_passed_delay_gate, pose_diag_info_.delay_time,
399-
pose_diag_info_.delay_time_threshold));
400-
pose_diag_array.push_back(check_measurement_mahalanobis_gate(
401-
"pose", pose_diag_info_.is_passed_mahalanobis_gate, pose_diag_info_.mahalanobis_distance,
402-
params_.pose_gate_dist));
416+
pose_diag_info_.delay_time_threshold);
417+
status.name = "localization: " + std::string(this->get_name()) + ": pose_delay_time";
418+
status.hardware_id = this->get_name();
419+
diag_msg.status.push_back(status);
420+
}
403421

404-
diagnostic_msgs::msg::DiagnosticStatus pose_status = merge_diagnostic_status(pose_diag_array);
405-
pose_status.name = "localization: " + std::string(this->get_name()) + ": pose_measurement";
406-
pose_status.hardware_id = this->get_name();
407-
diag_msg.status.push_back(pose_status);
422+
// 6. Pose mahalanobis distance diagnostic
423+
{
424+
diagnostic_msgs::msg::DiagnosticStatus status = check_measurement_mahalanobis_gate(
425+
"pose", pose_diag_info_.is_passed_mahalanobis_gate, pose_diag_info_.mahalanobis_distance,
426+
params_.pose_gate_dist);
427+
status.name =
428+
"localization: " + std::string(this->get_name()) + ": pose_mahalanobis_distance";
429+
status.hardware_id = this->get_name();
430+
diag_msg.status.push_back(status);
408431
}
409432

410-
// 3. Twist diagnostics (twist_...)
433+
// 7. Twist no update count diagnostic
411434
{
412-
std::vector<diagnostic_msgs::msg::DiagnosticStatus> twist_diag_array;
413-
twist_diag_array.push_back(check_measurement_updated(
435+
diagnostic_msgs::msg::DiagnosticStatus status = check_measurement_updated(
414436
"twist", twist_diag_info_.no_update_count, params_.twist_no_update_count_threshold_warn,
415-
params_.twist_no_update_count_threshold_error));
416-
twist_diag_array.push_back(
417-
check_measurement_queue_size("twist", twist_diag_info_.queue_size));
418-
twist_diag_array.push_back(check_measurement_delay_gate(
437+
params_.twist_no_update_count_threshold_error);
438+
status.name = "localization: " + std::string(this->get_name()) + ": twist_no_update_count";
439+
status.hardware_id = this->get_name();
440+
diag_msg.status.push_back(status);
441+
}
442+
443+
// 8. Twist queue size diagnostic
444+
{
445+
diagnostic_msgs::msg::DiagnosticStatus status =
446+
check_measurement_queue_size("twist", twist_diag_info_.queue_size);
447+
status.name = "localization: " + std::string(this->get_name()) + ": twist_queue_size";
448+
status.hardware_id = this->get_name();
449+
diag_msg.status.push_back(status);
450+
}
451+
452+
// 9. Twist delay time diagnostic
453+
{
454+
diagnostic_msgs::msg::DiagnosticStatus status = check_measurement_delay_gate(
419455
"twist", twist_diag_info_.is_passed_delay_gate, twist_diag_info_.delay_time,
420-
twist_diag_info_.delay_time_threshold));
421-
twist_diag_array.push_back(check_measurement_mahalanobis_gate(
422-
"twist", twist_diag_info_.is_passed_mahalanobis_gate, twist_diag_info_.mahalanobis_distance,
423-
params_.twist_gate_dist));
456+
twist_diag_info_.delay_time_threshold);
457+
status.name = "localization: " + std::string(this->get_name()) + ": twist_delay_time";
458+
status.hardware_id = this->get_name();
459+
diag_msg.status.push_back(status);
460+
}
424461

425-
diagnostic_msgs::msg::DiagnosticStatus twist_status =
426-
merge_diagnostic_status(twist_diag_array);
427-
twist_status.name = "localization: " + std::string(this->get_name()) + ": twist_measurement";
428-
twist_status.hardware_id = this->get_name();
429-
diag_msg.status.push_back(twist_status);
462+
// 10. Twist mahalanobis distance diagnostic
463+
{
464+
diagnostic_msgs::msg::DiagnosticStatus status = check_measurement_mahalanobis_gate(
465+
"twist", twist_diag_info_.is_passed_mahalanobis_gate, twist_diag_info_.mahalanobis_distance,
466+
params_.twist_gate_dist);
467+
status.name =
468+
"localization: " + std::string(this->get_name()) + ": twist_mahalanobis_distance";
469+
status.hardware_id = this->get_name();
470+
diag_msg.status.push_back(status);
430471
}
431472

432-
// 4. Covariance ellipse diagnostics (cov_ellipse_...)
473+
// 11. Covariance ellipse long axis diagnostic
433474
{
434475
geometry_msgs::msg::PoseWithCovariance pose_cov;
435476
pose_cov.pose = current_ekf_pose.pose;
436477
pose_cov.covariance = ekf_module_->get_current_pose_covariance();
437478
const autoware::localization_util::Ellipse ellipse =
438479
autoware::localization_util::calculate_xy_ellipse(pose_cov, params_.ellipse_scale);
439480

440-
std::vector<diagnostic_msgs::msg::DiagnosticStatus> covariance_diag_array;
441-
covariance_diag_array.push_back(check_covariance_ellipse(
481+
diagnostic_msgs::msg::DiagnosticStatus status = check_covariance_ellipse(
442482
"cov_ellipse_long_axis", ellipse.long_radius, params_.warn_ellipse_size,
443-
params_.error_ellipse_size));
444-
covariance_diag_array.push_back(check_covariance_ellipse(
483+
params_.error_ellipse_size);
484+
status.name =
485+
"localization: " + std::string(this->get_name()) + ": cov_ellipse_long_axis_size";
486+
status.hardware_id = this->get_name();
487+
diag_msg.status.push_back(status);
488+
}
489+
490+
// 12. Covariance ellipse lateral direction diagnostic
491+
{
492+
geometry_msgs::msg::PoseWithCovariance pose_cov;
493+
pose_cov.pose = current_ekf_pose.pose;
494+
pose_cov.covariance = ekf_module_->get_current_pose_covariance();
495+
const autoware::localization_util::Ellipse ellipse =
496+
autoware::localization_util::calculate_xy_ellipse(pose_cov, params_.ellipse_scale);
497+
498+
diagnostic_msgs::msg::DiagnosticStatus status = check_covariance_ellipse(
445499
"cov_ellipse_lateral_direction", ellipse.size_lateral_direction,
446-
params_.warn_ellipse_size_lateral_direction, params_.error_ellipse_size_lateral_direction));
447-
448-
diagnostic_msgs::msg::DiagnosticStatus covariance_status =
449-
merge_diagnostic_status(covariance_diag_array);
450-
covariance_status.name =
451-
"localization: " + std::string(this->get_name()) + ": covariance_ellipse";
452-
covariance_status.hardware_id = this->get_name();
453-
diag_msg.status.push_back(covariance_status);
500+
params_.warn_ellipse_size_lateral_direction, params_.error_ellipse_size_lateral_direction);
501+
status.name =
502+
"localization: " + std::string(this->get_name()) + ": cov_ellipse_lateral_direction_size";
503+
status.hardware_id = this->get_name();
504+
diag_msg.status.push_back(status);
454505
}
455506
}
456507

0 commit comments

Comments
 (0)