@@ -10,6 +10,7 @@ Localization::Localization(
1010 is_cancel_requested_(false ),
1111 state_(LocalizationTaskState::INITIALIZATION),
1212 localization_state_(LocalizationInitializationState::UNKNOWN),
13+ localization_topic_health_(false ),
1314 localization_quality_(false ),
1415 localization_start_time_(rclcpp::Time(0 ))
1516{
@@ -20,10 +21,15 @@ Localization::Localization(
2021 " /api/localization/initialization_state" , rclcpp::QoS (1 ).transient_local (),
2122 std::bind (&Localization::localizationStateCallback, this , std::placeholders::_1));
2223
23- localization_quality_subscriber_ = node_->create_subscription <ModeChangeAvailable>(
24- " /system/component_state_monitor/component/autonomous/localization" ,
24+ localization_topic_health_subscriber_ = node_->create_subscription <ModeChangeAvailable>(
25+ " /system/component_state_monitor/component/autonomous/localization" , // This topic only reports normality of frequency of topics, lacking information on localization quality itself.
2526 rclcpp::QoS (1 ).transient_local (),
26- std::bind (&Localization::localizationQualityCallback, this , std::placeholders::_1));
27+ std::bind (&Localization::localizationTopicHealthCallback, this , std::placeholders::_1));
28+
29+ localization_quality_subscriber_ = node_->create_subscription <std_msgs::msg::Bool>(
30+ " /fault_detection/localization_state" , // good if true; info taken from /diagnostics
31+ 10 ,
32+ std::bind (&Localization::localizationQualityCallback, this , std::placeholders::_1));
2733
2834 current_gate_mode_publisher_ = node_->create_publisher <tier4_control_msgs::msg::GateMode>(
2935 " /input/current_gate_mode" , rclcpp::QoS{1 });
@@ -113,7 +119,7 @@ void Localization::execute(
113119 if (
114120 node_->get_clock ()->now ().seconds () - localization_start_time_.seconds () >
115121 LOC_WAIT_TIMEOUT_S) {
116- if (localization_quality_) {
122+ if (localization_topic_health_ && localization_quality_) {
117123 success = true ;
118124 RCLCPP_INFO (node_->get_logger (), " [AVI7] Localization state: %d" , localization_state_);
119125 } else {
@@ -141,9 +147,15 @@ void Localization::cancel()
141147
142148// make it a callback to update the status
143149
144- void Localization::localizationQualityCallback (const ModeChangeAvailable & msg)
150+ void Localization::localizationTopicHealthCallback (const ModeChangeAvailable & msg)
151+ {
152+ localization_topic_health_ = msg.available ;
153+ RCLCPP_INFO (node_->get_logger (), " [AVI11] localizationTopicHealthCallback: localization_topic_health_%d" , localization_topic_health_);
154+ }
155+
156+ void Localization::localizationQualityCallback (const Bool & msg)
145157{
146- localization_quality_ = msg.available ;
158+ localization_quality_ = msg.data ;
147159 RCLCPP_INFO (node_->get_logger (), " [AVI11] localizationQualityCallback: localization_quality_%d" , localization_quality_);
148160}
149161
0 commit comments