@@ -39,38 +39,49 @@ RecoveryNode::RecoveryNode() : Node("recovery")
39
39
40
40
fatal_error_ = false ;
41
41
mrm_occur_ = false ;
42
+ autonomous_available_ = false ;
43
+ mrm_by_fatal_error_ = false ;
42
44
}
43
45
44
46
void RecoveryNode::on_graph (const DiagnosticGraph::ConstSharedPtr msg)
45
47
{
46
- bool autonomous_available = false ;
47
48
for (const auto & node : msg->nodes ) {
48
49
if (node.status .name == " /autoware/modes/autonomous" ) {
49
- autonomous_available = node.status .level == DiagnosticStatus::OK;
50
+ autonomous_available_ = node.status .level == DiagnosticStatus::OK;
50
51
}
51
52
// aggregate non-recoverable error
52
53
if (node.status .name == " /autoware/fatal_error/autonomous_available" ) {
53
54
if (node.status .level != DiagnosticStatus::OK){
54
55
fatal_error_ = true ;
56
+ } else {
57
+ fatal_error_ = false ;
55
58
}
56
59
}
57
60
}
58
61
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
- }
65
62
}
66
63
67
64
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;
70
66
}
71
67
72
68
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
+ }
73
77
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
+ }
74
85
}
75
86
76
87
void RecoveryNode::clear_mrm (){
0 commit comments