Mission monitor sequencer: Difference between revisions

From Rsewiki
(New page: ===Introduction=== This plug-in implements a a language that is a mixture of a rule-based and a sequential based language. The idea is that a number of situations need permanent - or semi...)
 
Line 1: Line 1:
===Introduction===
===Introduction===


This plug-in implements a a language that is a mixture of a rule-based and a sequential based language. The idea is that a number of situations need permanent - or semi permanent - monitoring to get a good situation awareness for the root, but a large number of the robot tasks are better described by a sequential language.
This plug-in implements a a language that is a mixture of a rule-based and a sequential based language. The idea is that a number of situations need permanent - or semi permanent - monitoring to get a good situation awareness for the root, and at the same time a large number of the robot tasks are better described by a sequential language.


This implementation attempts to cover this gab.
This implementation attempts to cover this gab.

Revision as of 07:56, 15 August 2008

Introduction

This plug-in implements a a language that is a mixture of a rule-based and a sequential based language. The idea is that a number of situations need permanent - or semi permanent - monitoring to get a good situation awareness for the root, and at the same time a large number of the robot tasks are better described by a sequential language.

This implementation attempts to cover this gab.

Language

An example function could look like this:

<?xml version="1.0" ?>
<plan name="planB" full="true">
   <init>
       gateFound = false
       <plan name="straight" if="not gateFound and odoPose.tripB < 100.0">
           odoPose.tripB = odoPose.tripB + 15.1;
           if (odoPose.tripB > 80.0) break "planB"
       </plan>
   </init>
   print("started")
   enable("straight")         # active - or until disabled.
   odoPose.tripB = 100.1
   wait(1) : false;
   odoPose.tripB = 0.4
   wait(99) : gateFound
   print("wait expired!!! - block print")
   <commands to="smr.send">
       # through gate, turn right and re-find line near wall
       'followline "bm" @v0.3: ($drivendist >0.37)'
       'turn 90' + ' slut'
   </commands>
   <post>
       print("finsihed gate-on-the-loose")
   </post>
</plan>
<plan name="planMain" full="default">
   <init>
       powHi = 13.9
       powLo = powHi - 3.5
       <plan name="powerMon" if="power.low()">
           print("Stopping - out of power")
           break pit
       </plan>
       energy = 66;
   </init>
   enable("powerMon")
   <commands to="print">
       # through gate, turn right and re-find line near wall
       'followline "bm" @v0.3: ($drivendist >0.37)'
       'turn 90' + ' slut'
   </commands>
   wait(20) : false
   planB()
   <post>
       print("finished OK")
   </post>
</plan>

A number of these plans can be started (enabled) simultaniously, an can in principle be total independant. I.e.one can control the robot arm whele another controls the navigation.