User Tools

Site Tools


eeros_architecture:sequencer:monitors

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
eeros_architecture:sequencer:monitors [2017/08/10 08:28] – created grafeeros_architecture:sequencer:monitors [2019/03/28 13:22] – [Define your own Condition] graf
Line 1: Line 1:
 ====== Conditions and Monitors ====== ====== Conditions and Monitors ======
 +A monitor allows to supervise certain conditions of a robot during a sequence. Examples could include the following situations:
 +  * A sequence steers a robot along a given path. A monitors checks for obstacles. As soon as an obstacle is close enough, the monitor causes a predefined exception sequence to be executed. 
 +  * A sequence takes too long to run due to some erroneous behavior. A monitor checks for timeout and either restarts or aborts the sequence or switches to an exception sequence.
 +  * A sequence moves a robot arm. While moving the arm looses its load. A monitor checks for this load to be present and aborts the sequence.
  
 +All these situations have in common, that a user does want to check for a given set of conditions during the running of the sequence (including subsequences or steps).
 +
 +===== Define your own Condition =====
 +Implement your condition by extending the class ''Condition'' as given below:
 +<code cpp>
 +class MyCondition : public Condition {
 +public:
 +  MyCondition() : { }                 // initialize any attributes necessary
 +  bool validate() {return yourTest; // implement whatever your condition should check
 +};
 +</code>
 +The method //validate// must return ''true'' in order for the monitor checking this condition to fire. 
 +
 +IMPORTANT Every Sequence or step already has a timeout condition (of class ''ConditionTimeout''). It allows for checking a maximum duration of execution. Also, every sequence has an abort condition (of class ''ConditionAbort''). This condition makes it possible to abort a sequence, e.g. by pressing ''Ctrl-C''.
 +===== Assign a Condition to a Monitor =====
 +The second step is to define a monitor and assign it a condition.
 +<code cpp>
 +SequenceA seq(...);                                                 // define a sequence
 +MyCondition myCondition;                                            // and a condition
 +Monitor myMonitor("myMon", &seq, myCondition, SequenceProp::abort); // create an associated monitor
 +setExceptionSequence(exceptionSeq);                                 // choose a sequence to run in case of a condition to become false
 +seq.addMonitor(&myMonitor);                                         // and add it to the sequence
 +</code>
 +IMPORTANT Here again, every sequence or step already has a timeout monitor which helps to check its associated timeout condition. A second monitor checks the abort condition.
eeros_architecture/sequencer/monitors.txt · Last modified: 2021/10/20 16:07 by ursgraf