Description
from (#47 )
This is in the context of our exemplary case of the
laser_driver
error. We want to elaborate on the layered approach we discussed in the last MROS meeting. This is how I interpret our desired design (please comment if something is not correct or clear):
- First the
laser_driver
code for handling errors tries to recover from the error in theErrorProcessing
transition state.(from here it is a related but different issue)
- If it does not succeed (I guess that means node does not transition to
Active
), theModeManager
tries to recover from the error using thefeature/rules
. For this, @jginesclavero is adding a rule in the SystemModes file of our system.- If there is no rule, or there is but after applying it the alternative
MODE(s)
of thelaser_driver
are not reached either, theModeManager
reports to theMROS Metacontroller
that the corresponding (sub)system(s) MODE(s) are not reachable.
(see issue for the continuation of the handling of errors at the higher layers)
continuation
Currently this will be implemented in a passive way, by offering that information (see #43)
But, since the current target MODE
cannot be reached... we were thinking (in a discussion with TUD and URJC) if the ModeManager
should report this actively system wide, for the operator or any supervisory system (e.g. MROS Metacontroller
) to handle it.
Proposal: Since not being able to reach the target MODE
is a deviation of expected and desired behaviour, we propose that the ModeManager
uses diagnostics
to report this. The MROS Metacontroller
will subscribe such diagnostic messages.
(@fmrico @jginesclavero @marioney please comment if I missed something or did not convey it correctly)
What do you think @norro ?