next up previous contents
Nächste Seite: Das Multi-Roboter-System Aufwärts: Die GOLOG Prozedur-Bibliotheken Vorherige Seite: Modellierungskriterien   Inhalt


Eine einfache Bibliothek

Die im Rahmen dieses Projekts erstellte Prozedur-Bibliothek arbeitet nach dem zweiten Prinzip. Interaktionselemente können aber im Rahmen der Ausführung eines Kommandos auftreten. Sie werden teilweise dazu genutzt um fehlende Parameter eines Befehls aus der Kontrollstruktur heraus zu ermitteln. Eine Auflösung von Widersprüchen durch Interaktion ist noch nicht integriert. Die Erstellung eines solchen Planungssystems würde den Rahmen dieser Diplomarbeit sprengen.

  proc \( control(e) \)
  (1)   \( <Continue\rightarrow ResetStop> \)
    \( \rangle \rangle \) while \( Stopped \) do \( wait(time) \)
  (2) \( \rangle \rangle \) \( <\exists p.CoffeeReq(p)\rightarrow \)
             \( \pi p.\{BestCoffeeReqToServe(p)?;deliverCoffee(p)\}> \)
  (3) \( \rangle \rangle \) \( <\exists p.LetterReq(p)\rightarrow \)
             \( \pi p.\{BestLetterReqToServe(p)?;deliverLetter(p)\}> \)
  ...   ... (alle weiteren zugelassenen Aufgaben)
  (n) \( \rangle \rangle \) \( robotPos\neq Home\rightarrow goHome \)
  end
       
  proc  \( deliverCoffee(p) \)
    \( \neg Holding(coffee)?;\, getCoffeeFrom(CoffeeRoom); \)
    \( goTo(p); \)
    \( askIfWantsMilk(p); \)
    \( askIfWantsSugar(p); \)
    \( putInCoffee(p,wantsSugar(p),wantsMilk(p)); \)
    \( giveCoffee(p); \)
  end

Diese einfache Bibliothek hat einen ähnlichen Aufbau wie das obige Beispiel (siehe 3.3). Auf höchster Ebene werden priorisierte Stopp- und Weiter-Befehle verarbeitet. Darunter werden die definierten Aufgaben priorisiert verarbeitet. Für eine gleichberechtigte nebenläufige Verarbeitung müssten zusätzliche Fluenten verwaltet werden, da sich ansonsten zwei Aufgaben immer wieder gegenseitig stören könnten. Als Beispiel nehmen wir an, es liegt ein Kaffeeauftrag (I) für Position 1 und ein Briefauftrag (II) für Position 2 vor. Zunächst könnte I einen go-Gefehl zur Kaffeeküche absetzen, der Kaffee wurde aber noch nicht aufgeladen. Nun setzt II aber einen go-Befehl zu Position 2 ab. Wenn danach Auftrag I wieder aktiv ist, so muß der go-Befehl erneut abgesetzt werden. Die Prozedur \( deliverCoffee(p) \) sei hier exemplarisch für die Realisierung der Aufgaben angegeben. Sie wird aktiviert, sobald eine exogene Aktion den Fluenten \( CoffeeReq(p) \) setzt und in den oberen Ebenen keine Aufgaben mehr zu erfüllen sind. Der beste Auftrag in diesem Zusammenhang ist der am längsten existierende Auftrag. Solange CARL nicht bereits einen Kaffee aufgeladen hat, kann der benötigte Kaffee an der Kaffeemaschine geholt werden. Bei den Prozeduren \( askIfWantsMilk(p) \) und \( askIfWantsSugar(p) \) handelt es sich um Interaktionen mit dem Benutzer, die die Werte der Fluenten \( wantsSugar(p) \) und \( wantsMilk(p) \) abfragen. Dementsprechend kann Milch und Zucker in den Kaffee getan werden. Innerhalb dieser Struktur ist die Erweiterung um neue Aufgaben sehr einfach zu realisieren, da sie modular auf einer beliebigen Prioritätsebene eingefügt werden können.


next up previous contents
Nächste Seite: Das Multi-Roboter-System Aufwärts: Die GOLOG Prozedur-Bibliotheken Vorherige Seite: Modellierungskriterien   Inhalt

2001-01-04