Skip to content

Commit 029bf66

Browse files
Merge pull request #11 from Futu-reADS/FDV-634
Added localization quality check using topic from diagnostics
2 parents e1b3eea + 0fe8d0b commit 029bf66

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

include/autoware_bridge/localization.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>
1212
#include <tier4_system_msgs/msg/mode_change_available.hpp>
1313
#include <tier4_control_msgs/msg/gate_mode.hpp>
14+
#include <std_msgs/msg/bool.hpp>
1415

1516
#include <atomic>
1617
#include <memory>
@@ -38,6 +39,7 @@ class Localization : public BaseTask
3839
using PoseStamped = geometry_msgs::msg::PoseStamped;
3940
using PoseWithCovarianceStamped = geometry_msgs::msg::PoseWithCovarianceStamped;
4041
using GateMode = tier4_control_msgs::msg::GateMode;
42+
using Bool = std_msgs::msg::Bool;
4143

4244
private:
4345
//rclcpp::Node::SharedPtr node_;
@@ -47,6 +49,7 @@ class Localization : public BaseTask
4749

4850
LocalizationTaskState state_;
4951
uint16_t localization_state_;
52+
bool localization_topic_health_;
5053
bool localization_quality_;
5154
rclcpp::Time localization_start_time_;
5255

@@ -57,7 +60,8 @@ class Localization : public BaseTask
5760
void pubInitPose(const geometry_msgs::msg::PoseStamped & init_pose);
5861

5962
// callbacks
60-
void localizationQualityCallback(const ModeChangeAvailable & msg);
63+
void localizationTopicHealthCallback(const ModeChangeAvailable & msg);
64+
void localizationQualityCallback(const Bool & msg);
6165
void localizationStateCallback(const LocalizationInitializationState & msg);
6266

6367
// Publisher
@@ -67,7 +71,9 @@ class Localization : public BaseTask
6771

6872
// Subscriber
6973
rclcpp::Subscription<LocalizationInitializationState>::SharedPtr localization_state_subscriber_;
70-
rclcpp::Subscription<ModeChangeAvailable>::SharedPtr localization_quality_subscriber_;
74+
rclcpp::Subscription<ModeChangeAvailable>::SharedPtr localization_topic_health_subscriber_;
75+
rclcpp::Subscription<Bool>::SharedPtr localization_quality_subscriber_; // subscribe info from /diagnostics
76+
7177
};
7278

7379
#endif // LOCALIZATION_HPP

src/localization.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)