@@ -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