Der Teppich-Krieger, c't 1/96, S. 290, ae
------------------------------------------------------

Gezeigt wird die Steuerung eines Roboters (Bausatz Rug Warrior) mit Interactive C.

Roboter.c  (Quelltext in Interactive C)



--------------------------------------------------------

Aufgabenstellung: Suchen einer Lichtquelle

Es soll ein Programm erstellt werden, das den Roboter eine helle Lichtquelle am Rand der 
Versuchsflche finden lt. Wnden und eventuellen Hindernissen soll mit Hilfe der Infrarot-
Sensoren und notfalls mit Hilfe der Bumper ausgewichen werden. Beim Erreichen des Ziels soll der 
Roboter anhalten und ein akustisches Signal geben.

a) Idee: Das Fahrzeug soll sich an der linken Wand entlang "tasten", bis die Lichtquelle erreicht ist.

 
b) Programmentwurf mit Subsumption Logic

Das Programm wird somit ber vier verschiedene Verhaltensweisen verfgen, die als parallele 
Prozesse ablaufen und unabhngig voneinander programmiert werden knnen. Drei 
Verhalten/Prozesse erhalten Daten von verschiedenen Sensoren; der vierte erzeugt Steuerbefehle 
ohne Sensordaten.

Die Idee ist folgende: falls nichts anderes vorliegt soll der Roboter geradeaus fahren (Proze mit 
niedrigster Prioritt). Falls die Infrarot-Sensoren ein Hindernis in ca. 20 cm Entfernung melden soll 
rechtzeitig ausgewichen werden. Sollte wider Erwarten dennoch eine Kollision mit einem Hindernis 
erfolgen (Ansprechen der Bumper), so soll der Roboter kurz anhalten, zurcksetzen, nach rechts 
drehen und in die vernderte Fahrtrichtung weiterfahren. Wurde mit Hilfe der Fotozellen die 
Lichtquelle erkannt (z.B. fester Schwellwert), so stoppt der Roboter und spielt eine kurze Melodie ab.

Kommentare zum Programm:

main

Im Hauptprogramm werden 5 Prozesse gestartet: die 4 Prozesse aus dem Subsumption-Diagramm 
("cruise" fr geradeausfahren, "photo" fr Auslesen der Fotozellen, "ir" fr Abfrage der Infrarot-
Sensoren und ggf. Kurven fahren, "bump" fr Reagieren auf Kollisionen), sowie ein weiterer Prozess 
"motor_control" fr die Konfliktauflsung zwischen den Prozessen ("S"-Knoten im Subsumption-
Diagramm)

motor_control

Jeder der vier Verhaltensprozesse setzt ein Flag (z.B. bump_active fr Proze "bump"), welches 
angibt ob der jeweilige Proze aktiv wurde (z.B. Hindernis berhrt bei "bump") und die 
Motorsteuerung bernehmen will. In zwei weiteren globalen Variablen bergibt jeder Proze die 
gewnschte Linear- und Drehgeschwindigkeit (z.B. bump_t und bump_r fr Proze "bump").
Die Kaskadenstruktur im Subsumption-Diagramm ist hier durch ein entsprechendes geschachteltes 
IF-Konstrukt realisiert. Proze "photo" hat somit die hchste Prioritt, Proze "cruise" die niedrigste. 
Zur Kontrolle wird in der LCD-Anzeige der gerade aktive Proze angezeigt.
Falls "photo" aktiv ist wird der Roboter angehalten, die Zielmelodie gespielt und das Programm durch 
"busy wait" angehalten.

cruise

Die Default-Verhaltensweise ist immer aktiv (Flag ist stndig gleich 1) und will stndig eine leichte 
Linkskurve fahren. In Verbindung mit "ir" entsteht so ein "Tasten" entlang der Wand.

photo

Die Verhaltensweise liest die Helligkeitswerte des linken und rechten Fotowiderstand aus. Wird der 
gegebenen Schwellwert berschritten, wird das Verhalten aktiv.

bump

Es werden stndig die Bumperzustnde ausgelesen. Falls der linke Bumper anspricht wird etwas 
zurckgesetzt und anschlieend nach rechts gedreht - beim rechten Bumper umgekehrt. Sollte der 
hintere Bumper ansprechen, dreht sich der Roboter auf der Stelle.

ir
Es werden beide Infrarot-Sensoren ausgelesen. Wenn der linke Sensor anspricht, wird eine 
Rechtskurve gefahren, wenn der rechts Sensor anspricht eine Linkskurve.


