Roboter steuern mit ROBOprogy


zur homepage

Lichtquellen suchen, ohne gestört zu werden

Soll der Roboter Lichtquellen (z.B. Fussbälle oder Bojen) suchen, muss er die Richtung feststellen können, aus der das Licht kommt. Dazu benötigt man im einfachsten Fall zwei Phototransistoren an der Frontseite des Roboters in etwa 3 cm Abstand, die durch einen Schattengeber (schwarzer Papierstreifen) getrennt sind. Liegt die Lichtquelle genau in Fahrtrichtung, empfangen beide Phototransistoren gleiches Signal und der Roboter kann gerade darauf zu fahren. Leuchtet die Lichtquelle mehr von links, empfängt der rechte Phototransistor ein schwächeres Signal und der Roboter muss nach links drehen.

Diese einfache Anordnung reagiert auf jede Lichtquelle gleich gut und lässt sich deshalb leicht durch die Sonne oder die Raumbeleuchtung irritieren. Tests haben ergeben, dass Farbfilter kaum Abhilfe schaffen. Bewährt haben sich dagegen LEDs, die auf bekannten Frequenzen zwischen 5 Hz und 5000 Hz blinken, aber Vielfache von 50 Hz vermeiden, da sonst Leuchtstofflampen sehr stören.

Im Roboter kann man nach den Phototransistoren selektive Verstärker einsetzen, deren Frequenz auf die Blinklichter abgestimmt ist. Bei ausreichender Trennschärfe lässt sich das System kaum noch stören. Nachteilig ist, dass eine zusätzliche Platine erforderlich ist und der Dynamikbereich - der Unterschied zwischen zwischen größtem und kleinsten Abstand zur Lichtquelle - relativ gering ist.

Im ROBOprogy wird diese Aufgabe auf ganz andere Art gelöst: Die beiden beiden Phototransistoren werden unmittelbar an die Analog-Eingänge des ROBOprogy angeschlossen, alles andere wird durch eingebaute Software erledigt. Per Fourieranalyse werden aus dem empfangenen Signalgemisch nur die gewünschten Frequenzanteile schmalbandig gefiltert und ausgewertet. Konstante Raumhelligkeit oder Signale abweichender Frequenz stören nicht mehr. Es genügt, die Signale der Phototransistoren beim ROBOprogy an die Eingänge 5ADC und 6ADC anzuschließen und die Software per Befehl einzuschalten. Eine recht einfache, aber empfindliche Schaltung (für einen Kanal) kann etwa so aussehen:

Entfernt man den 100nF-Kondensator, sinkt die Verstärkung und der Phototransistor wird auch unmittelbar vor dem Ziel nicht übersteuert. Für gehobene Ansprüche in Sachen Übersteuerungsfestigkeit sollte man eine aufwendigere Schaltung mit Photodiode und (selektivem) OP-Verstärker verwenden, notfalls mit Regelung der Verstärkung. Selbstverständlich kann man statt Phototransistoren auch Mikrofone (mit Verstärker) verwenden, dann reagiert der ROBOprogy auf ganz bestimmte Frequenzen. Diese können durchaus im Kilohertzbereich liegen, wie die folgende Tabelle zeigt.

Um den Zeitbedarf für die Fourieranalyse zu reduzieren, ist die Auswertung an den Rechnertakt gekoppelt. Deshalb kann nur zwischen den Frequenzen 10,4 Hz; 20,8 Hz; 62,5 Hz oder 125 Hz gewählt werden. Falls den Eingängen 5ADC/6ADC kein (analoges) Frequenzfilter oder zumindest ein RC-Tiefpass vorgeschaltet ist, folgt aus dem Abtasttheorem, dass auch bei deutlich höheren Frequenzen "Empfang" möglich ist. Diese liegen entweder bei (125 Hz, 875 Hz, 1125 Hz, 1875 Hz, 2125 Hz, ....) oder bei (62 Hz, 938 Hz, 1063 Hz, 1938 Hz, 2063 Hz, ...) oder bei (21 Hz, 145 Hz, 187 Hz, 312 Hz, 354 Hz, ...) oder bei (10 Hz, 156 Hz, 177 Hz, 323 Hz, 344 Hz, ...)

Die Empfangsfrequenzen lassen sich per Befehl umschalten, damit unterschiedliche Ziele angepeilt werden können. Wenn mindestens drei Bojen am Spielfeldrand Fixpunkte liefern, lässt sich auch die Position des Roboters auf dem Spielfeld bestimmen.

Das relativ komplexe Programm ist vollständig in Assemblersprache geschrieben und kann mit dem Befehl conf! eingeschaltet werden. Die Berechnungen werden immer simultan für beide Kanäle durchgeführt und sind nach 100 ms (für 21 Hz und 125 Hz) bzw. 580 ms (für 10 Hz und 62 Hz) beendet. Dann stehen beide Resultate (Werte im Bereich 01..255) zur Verfügung und können mit dem Befehl 56ampl@@ auf das Stack geholt und vom ausgewertet werden. Aus der größten Amplitude folgt, wie nahe der Roboter am Blinker ist, aus dem Unterschied folgt die Richtung. Das Forth-Hauptprogramm braucht nur noch die Werte zu vergleichen und die Motordrehzahlen geeignet zu ändern, damit der Roboter in die korrekte Richtung fährt. Dann kann es wieder andere Aufgaben erledigen, beispielsweise Berührungssensoren überwachen.


09.09.2009   Herbert Weidner

zur homepage