kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Untersuchung der Anforderungen an eine für die COACH-Vehikel zu entwickelnde Skriptsprache

  • Die Resourcen auf dem verwendeten Mikrocontroller sind sehr begrenzt.
  • Durch die Verwendung einer Vielzahl an Klassen sind sie zudem bereits fast erschöpft.
  • Ein Compiler greift in der Regel von vorne beginnend kleinste nicht weiter zerlegbare Einheiten des Quelltextes ab und überführt sie zunächst in eine Baumstruktur.
  • Schlüsselwörter müssen erkannt werden, die Syntax überprüft werden und nach einer optimalen Umsetzung in Maschinensprache gesucht werden.
  • Von diesen und vielen weiteren Arbeitsschritten werden bei den Interpretern von Skriptsprachen i.d.R. nur ein Teil umgesetzt.
  • Skriptsprachen sind oft nur der Kitt zwischen kompilierten Komponenten und können entsprechend einfacher auf die konkreten Bedürfnisse abgestimmt werden.
  • So auch in unserem speziellen Fall:
  • In der Endlos-While-Schleife des Hauptprogramms für den Mikrocontroller wird typischerweise eine Folge von Funktionen aufgerufen.
  • Diese Funktionen benötigen entweder Übergabeparameter und/oder liefern Ergebnisse zurück.
  • Es besteht kein Interesse daran, das, was diese Funktionen machen (Sensordaten lesen, Motor-PWM-Signal einstellen etc.) durch Skripte zu realisieren.
  • Vielmehr wird es eher darum gehen, die Abfolge und Art und Weise, wie die verfügbaren Funktionen aufgerufen werden flexibel festlegen zu können.
  • Dies würde ausreichen, um einen einfachen Reflex-Agenten realisieren zu können.
  • Die Programmstruktur könnte sich leicht an dem Konzept der Synchronen Programmierung (s. Echtzeitsysteme) orientieren.
  • Auf den Mirkocontroller angewendet, gibt es hier eine feste Dauer eines Durchlaufs der Endlosschleife.
  • Und in jedem Zyklus kann ein anderer Befehl, d.h. der Aufruf einer anderen Funktion erfolgen.
  • Eine bestimmte Anzahl an Schleifendurchläufen würde dann einem vollen Zyklus entsprechen.
  • Man kann sich dabei an der gewünschten Reaktionszeit des Vehikels orientieren:
  • Angenommen diese würde mit 1/5 (0,2s) Sekunde angesetzt, dann stünden bei einer Dauer eines Schleifendurchlaufs von 1ms (0,001s) 200 Funktionsaufrufe zu Verfügung.
  • Es kann dabei Funktionen geben, die innerhalb eines Zyklus oft aufgerufen werden, wie das Auffrischen der Anzeige oder das Aktualisieren der Sensordaten (neuen Wert in einen "Ringspeicher" holen).
  • Andere werden nur einmal innerhalb eines Zyklus aufgerufen, wie z.B. das Setzen eines neuen PWM-Antriebssignals (vergl. nachfolgendes Schema zu Synchroner Programmierung).
Synchrone Programmierung.

Bild 0-1: Synchrone Programmierung.

  • Dieses Verschränken von häufig aufgerufenen Prozessen mit seltener benutzten Funktionen, entspricht in etwa dem Schema, das wir vom Scheduling bei RTAI-Linux kennengelernt haben:
Verteilung der Prozessorzeit bei RTAI-Linux.

Bild 0-2: Verteilung der Prozessorzeit bei RTAI-Linux.

  • Soll aber mehr als ein einfacher Reflexagent umgesetzt werden, so benötigt man auch ein "Gedächtnis", in dem im einfachsten Fall vergangene Sensorwerte und resultierende Aktionen gespeichert werden, um diese bei der Planung des Verhaltens verwenden zu können.
  • Damit wäre in einfacher Weise ein Erfahrungsspeicher umsetzbar.
  • Ein Integralanteil bei einem PID-Regler ist auch schon eine Art "Erfahrungsspeicher": Hier wirkt sich die in die Vergangenheit zurückliegende Regelabweichung auf das aktuelle Verhalten aus.
  • Zur Orientierung sollen im nachfolgenden Kapitel die Typen von Agentensystemen besprochen werden.