Deutsch English |
DU LERNST HIER... |
wie der Roboter mit seinen Infrarotsensoren die Helligkeit der Unterlage erkennen kann. |
WIE FUNKTIONIERT EIN INFRAROTSENSOR? |
Da das Infrarottlicht an hellen bzw. dunklen Flächen unterschiedlich reflektiert, können die Sensoren zwischen einer dunklen und hellen Unterlage unterscheiden und geben einen digitalen Wert 0 (dunkel) oder 1 (hell) zurück. Der mbRobot verfügt über 2 Infrarotsensoren (irLeft, irRight). Man findet sie auf der unteren Seite des Boards. Der Maqueen Plus V2 verfügt über 5 Infrarotsensoren (irL1, irL2, irL3, irR1, irR2, irM), der Maqueen Plus sogar über 6 Infrarotsensoren (irL1, irL2, irL3, irR1, irR2, irL3, irR3), wobei irLeft = irL1 und irRight = irR1. Damit können alle nachfolgende Programme für alle Modelle verwendet werden. |
MUSTERBEISPIELE |
from mbrobot import * #from mbrobot_plus import * repeat: v = irLeft.read_digital() 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 mbrobot 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 mbrobot import * #from mbrobot_plus import * #RobotContext.useBackground("sprites/trail.gif") setSpeed(30) repeat: vR = irRight.read_digital() vL = irLeft.read_digital() 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 musst du die Zeile mit RobotContest aktivieren und verwendest das Hintergrundbild trail.gif. Im Realmodus musst du diese Zeile wieder daktivieren. Je nach grösse der nachgebauten Vorlage musst du die Geschwindigkeit und den Radius der Kreisbögen anpassen. Beispiel 3: Quadrat fahren
from mbrobot import * #from mbrobot_plus 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 = irRight.read_digital() vL = irLeft.read_digital() if vL == 1 and vR == 1: left() delay(500) else: keepOnTrack() delay(100) Für die Simulation verwendest du das Hintergrundbild field1.gif. Der Maquen Plus verfügt über sechs Infrarotsensoren. Ihre Bezeichnung siehst du unten auf dem Chassis. Die Werte 0 (dunkel) bzw. 1 (hell) geben sie zurück mit den Befehlen:
from mbrobot import * setSpeed(30) repeat: vR = irRight.read_digital() vL = irLeft.read_digital() d = getDistance() if d < 20: stop() left() delay(1500) stop() else: 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) elif vL == 1 and vR == 1: backward() delay(100) Die Sensorwerte werden alle 100 Millisekunden in der gleichen repeat-Schleife abgefragt. Der Programmblock nach else entspricht dem Programmcode im Beispiel 2. |
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. Es können mehrere verschiedene Sensoren gleichzeitig verwendet werden. |
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 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 ...