User Tools

Site Tools


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:

class MyCondition : public Condition {
  MyCondition() : { }                 // initialize any attributes necessary
  bool validate() {return yourTest;}  // implement whatever your condition should check

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.

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

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: 2019/03/28 13:22 by graf