Skip to content

Commit 4e25b8b

Browse files
committed
introduce mrm_by_fatal_error flag
1 parent 0487475 commit 4e25b8b

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

system/diagnostic_graph_aggregator/src/node/recovery.cpp

+21-10
Original file line numberDiff line numberDiff line change
@@ -39,38 +39,49 @@ RecoveryNode::RecoveryNode() : Node("recovery")
3939

4040
fatal_error_ = false;
4141
mrm_occur_ = false;
42+
autonomous_available_ = false;
43+
mrm_by_fatal_error_ = false;
4244
}
4345

4446
void RecoveryNode::on_graph(const DiagnosticGraph::ConstSharedPtr msg)
4547
{
46-
bool autonomous_available = false;
4748
for (const auto & node : msg->nodes) {
4849
if (node.status.name == "/autoware/modes/autonomous") {
49-
autonomous_available = node.status.level == DiagnosticStatus::OK;
50+
autonomous_available_ = node.status.level == DiagnosticStatus::OK;
5051
}
5152
// aggregate non-recoverable error
5253
if (node.status.name == "/autoware/fatal_error/autonomous_available") {
5354
if (node.status.level != DiagnosticStatus::OK){
5455
fatal_error_ = true;
56+
} else {
57+
fatal_error_ = false;
5558
}
5659
}
5760
}
5861

59-
// 1. Not emergency
60-
// 2. Non-recovoerable errors have not happened
61-
// 3. on MRM
62-
if (autonomous_available && !fatal_error_ && mrm_occur_){
63-
clear_mrm();
64-
}
6562
}
6663

6764
void RecoveryNode::on_aw_state(const AutowareState::ConstSharedPtr msg){
68-
if (msg->state != AutowareState::DRIVING)
69-
fatal_error_ = false;
65+
auto_driving_ = msg->state == AutowareState::DRIVING;
7066
}
7167

7268
void RecoveryNode::on_mrm_state(const MrmState::ConstSharedPtr msg){
69+
// set flag if mrm happened by fatal error
70+
if (msg->state != MrmState::NORMAL && fatal_error_){
71+
mrm_by_fatal_error_ = true;
72+
}
73+
// reset flag if recoverd (transition from mrm to normal)
74+
if (mrm_occur_ && msg->state == MrmState::NORMAL){
75+
mrm_by_fatal_error_ = false;
76+
}
7377
mrm_occur_ = msg->state != MrmState::NORMAL;
78+
// 1. Not emergency
79+
// 2. Non-recovoerable MRM have not happened
80+
// 3. on MRM
81+
// 4. on autonomous driving
82+
if (autonomous_available_ && !mrm_by_fatal_error_ && mrm_occur_ && auto_driving_){
83+
clear_mrm();
84+
}
7485
}
7586

7687
void RecoveryNode::clear_mrm(){

system/diagnostic_graph_aggregator/src/node/recovery.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ class RecoveryNode : public rclcpp::Node
4545
using MrmState = autoware_adapi_v1_msgs::msg::MrmState;
4646

4747
bool fatal_error_;
48+
bool autonomous_available_;
4849
bool mrm_occur_;
50+
bool auto_driving_;
51+
bool mrm_by_fatal_error_;
4952
rclcpp::Subscription<DiagnosticGraph>::SharedPtr sub_graph_;
5053
rclcpp::Subscription<AutowareState>::SharedPtr sub_aw_state_;
5154
rclcpp::Subscription<MrmState>::SharedPtr sub_mrm_state_;

0 commit comments

Comments
 (0)