DU LERNST HIER... |
wie der Roboter mit seinen Infrarotsensoren die Helligkeit der Unterlage erkennen kann. |
WIE FUNKTIONIERT EIN INFRAROTSENSOR? |
Die Infrarotsensoren können die Änderungen im näheren Sichtfeld registrieren und werden in der Praxis häufig als Bewegungsmelder eingesetzt. Der Callibot verfügt über 2 Infrarotsensoren. Man findet sie auf der unteren Seite des Boards. Da das Infrarotlicht an hellen bzw. dunklen Flächen unterschiedlich reflektiert, können diese Sensoren zwischen einer hellen und dunklen Unterlage unterscheiden und geben einen digitalen Wert 0 (dunkel) oder 1 (hell) zurück. |
MUSTERBEISPIELE |
from callibot import * setSpeed(30) repeat: v = irLeftValue() if v == 0: rightArc(0.1) else: leftArc(0.1) delay(100) Du kannst das Programm auch im Simulationsmodus ausführen. Dazu musst du nach der Zeite from callibot import * folgende zwei Zeilen einfügen: RobotContext.useBackground("sprites/blackarea.gif")
RobotContext.setStartPosition(430, 350)
Die erste Zeile fügt das Hintergrundbild "blackarea.gif" hinzu, die zweite Zeile bestimmt die Position, an der der Roboter zu Beginn erscheint. (Das Grafikfenster ist 500 x 500 Pixel gross, die Koordinate (0,0) ist oben links). Alle Bilder, die in den Beispielen und Aufgaben verwendet werden, sind in der TigerJython-Distribution enthalten (Bilderbibliothek). Du kannst auch eigene Hintergrundbilder verwenden
Wenn du das Programm danach wieder im Realmodus ausführen willst, musst du die Zeilen mit RobotContext deaktivieren (# voranstellen). Du siehst bereits im Simulationsmodus, dass die Robotersteuerung vom Radius des Links- bzw. Rechtsbogen abhängig ist. Ist er zu klein (z.B. 0.05), bewegt sich der Roboter sehr langsam und unruhig. Ist er zu gross (z.B. 0.6), so verliert er oft die Spur.
from callibot import * #RobotContext.useBackground("sprites/trail.gif") setSpeed(20) repeat: vR = irRightValue() vL = irLeftValue() if vL == 0 and vR == 0: forward() elif vL == 1 and vR == 0: rightArc(0.1) elif vL == 0 and vR == 1: leftArc(0.1) delay(100) Für die Simulation verwendest du das Hintergrundbild trail.gif. Im Realmodus musst du je nach grösse der nachgebauten Vorlage die Geschwindigkeit und den Radius der Kreisbögen anpassen. Beispiel 3: Quadrat fahren
from callibot import * RobotContext.useBackground("sprites/field1.gif") RobotContext.setStartPosition(380, 400) def keepOnTrack(): if vL == 0 and vR == 0: forward() elif vL == 0 and vR == 1: leftArc(0.1) elif vL == 1 and vR == 0: rightArc(0.1) repeat: vR = irRightValue() vL = irLeftValue() if vL == 1 and vR == 1: left() delay(500) else: keepOnTrack() delay(100) Für die Simulation verwendest du das Hintergrundbild field1.gif. |
MERKE DIR... |
Mit den Inrarotsensoren kannst du die Helligkeit der Unterlage messen. Der Befehl irLeft.read_digital() liefert den Wert des linken Infrarotsensors, als Wert 0, falls die Unterlage dunkel oder 1, falls sie hell ist. |
ZUM SELBST LÖSEN |
|
Einige Hintergrundbilder für die Simulation stehen im TigerJython zur Verfügung (siehe "Hilfe/APLU-Dokumentation/Bilderbibliothek").
Du kannst auch eigene Hintergrundbilder erstellen. Sie müssen 500x500 Pixel gross und im gif- oder png-Format sein. Du kannst sie im beliebigen Ordner auf deinem Computer speichern. Im Programm gibst du du den Pfad der Bilddatei an:
Unter Windows z.B.
RobotContext.useBackground("c:/users/UrsMeier/desktop/bilder/mybackgroundgif")
oder RobotContext.useBackground("d:/bilder/bild.gif")
Unter MacOS z.B.
RobotContext.useBackground("/Users/UrsMeier/Desktop/Bilder/mybackground.gif")
Unter Windows kannst du die eigenen Hintergrundbilder auch im Unterverzeichnis sprites des Unterverzeichnisses /bin des Installationsverzeichnisses speichern. Dann werden die Bilder mit
RobotContext.useBackground("sprites/mybackground.gif")
automatisch in deinem Programm integriert.
Zu Beginn wird die Zustandsvariable s auf null gesetzt. In der while-Schleife schaltet man den Zustand um:
....
s = 0
forward()
repeat:
v = irLeft.read_digital()
if v == 0 and s == 0: # Bei Haltestelle s = 1 ... if v == 1 and s == 1: # Auf weisser Zwischenfahrt s = 2 if v == 0 and s == 2: # Am Endbahnhof ...