21 from cob_msgs.msg
import EmergencyStopState
22 from diagnostic_msgs.msg
import DiagnosticArray, DiagnosticStatus
23 from std_srvs.srv
import Trigger, TriggerResponse
25 from simple_script_server
import *
31 now = rospy.Time.now()
40 rospy.Service(
'~enable',Trigger,self.
enable_cb)
41 rospy.Service(
'~disable',Trigger,self.
disable_cb)
47 if msg.emergency_state == EmergencyStopState.EMFREE
and self.
em_state != EmergencyStopState.EMFREE:
49 rospy.loginfo(
"auto_recover from emergency state is disabled")
51 rospy.loginfo(
"auto_recover from emergency state")
53 self.
em_state = copy.deepcopy(msg.emergency_state)
58 for status
in msg.status:
60 if status.name.lower().startswith(self.
components[component].lower())
and status.level > DiagnosticStatus.OK
and self.
em_state == EmergencyStopState.EMFREE
and (rospy.Time.now() - self.
components_recover_time[component] > rospy.Duration(10)):
61 rospy.loginfo(
"auto_recover from diagnostic failure")
64 rospy.loginfo_once(
"auto_recover from diagnostic failure is disabled")
71 return TriggerResponse(
True,
"auto recover enabled")
78 return TriggerResponse(
True,
"auto recover disabled")
90 for component
in components:
91 handle = sss.recover(component)
92 if not (handle.get_error_code() == 0):
93 rospy.logerr(
"[auto_recover]: Could not recover %s", component)
95 rospy.loginfo(
"[auto_recover]: Component %s recovered successfully", component)