DU LERNST HIER... |
wie ein Roboterprogramm, das auf dem PC läuft, den Roboter steuern kann (wir nennen dies den "Remote Modus"). Die Programme im Remote Modus sind exakt die gleichen wie im autonomen Modus, sie werden aber auf dem PC mit dem grünen Run-Button gestartet. Da die Programme im Remote und autonomen Modus die gleichen sind, nennen wir sie auch "Programme für den Realmodus". |
MUSTERBEISPIEL |
Um zu zeigen, dass du Programme zwischen den verschiedenen Modi austauschen kannst, nehmen wir das Musterbeispiel aus Kapitel 1. Der Roboter soll die Bewegung aber viel mal wiederholen. Das kannst du mit einer for-Schleife programmieren. Mit for i in range(4): werden die nachfolgenden eingerückten Zeilen 4 mal wiederholt. Normalerweise ist der Pi2Go nach dem Booten bereit, autonome Programme auszuführen.
from raspisim import * #from raspibrick import * robot = Robot() gear = Gear() for i in range(4): gear.forward(2000) gear.left(550) gear.backward(2000) robot.exit()
|
MERKE DIR... |
Im Remote-Modus wird das Programm im TigerJython mit dem grünen Run-Button gestartet und auf dem PC ausgeführt. Während der Programmausführung werden die Befehle via WLAN zum Roboter gesendet. Da die Programme auf diese Art schneller ausgeführt werden, kannst du während der Programmentwicklung den Remote-Modus verwenden und anschliessen das Programm unverändert im autonomen Modus auf den Pi2Go herunterladen. |
FERNSTEUERUNG MIT DER TASTATUR |
Im Remote Modus kannst du den Roboter mit der Tastatur (oder mit einem anderen am PC angeschlossenen Eingabegerät, z.B. der Maus oder einem Touchscreen) fernsteuern, indem du die entsprechenden Befehle an den Roboter sendest. Im folgenden Programm macht es Spass, mit den Cursortasten den Roboter zu bewegen. Das Programmkonzept ist wichtig und du solltest es dir gut merken. Es funktioniert so:
from raspisim import * # from raspibrick import * robot = Robot() gear = Gear() while not robot.isEscapeHit(): if robot.isDownHit(): gear.backward() elif robot.isUpHit(): gear.forward() elif robot.isLeftHit(): gear.leftArc(0.1) elif robot.isRightHit(): gear.rightArc(0.1) elif robot.isEnterHit(): gear.stop() robot.exit() |
MERKE DIR... |
Wir werden diese Programm-Konstruktion mit der while-Schleife, die mit der Escape-Taste (bzw. im autonomen Mode mit der Taste des Pi2Go) abgebrochen werden kann, noch sehr oft verwenden. Bevor ein Programm im Remote Modus gestartet wird, muss der Brickgate-Server gestartet sein und auf dem Display HOLd erscheinen. Du kannst den Brickgate-Server beenden, indem du die Taste lange drückst. Der Roboter ist nun wieder für den autonomen Modus bereit. |
ZUM SELBST LÖSEN |
|
Der autonome Modus entspricht eher der üblichen Vorstellung eines Roboters, der nach seiner Programmierung keine Verbindung zu einem externen Computer mehr benötigt. Er ist auch der der bevorzugte Modus für Roboter-Wettbewerbe.
Für die Programmentwicklung und Demonstrationen ist der Remote Modus hingegen sehr praktisch, da die Programme nicht heruntergeladen werden und deswegen schneller starten. Zudem muss am Roboter selbst weniger manipuliert werden.
Der Brickgate-Server ist ein TCP-Socket-Server, der auf IP Port 1299 die vom PC gesendeten Befehle empfängt und die entsprechenden autonomen Funktionen aufruft. Falls diese einen Rückgabewert haben, wird dieser an den PC zurück gesendet.
Man nennt eine solche Schleife auch Event-Loop, da getestet wird, welcher der Tastenevents seit dem letzten Durchlauf aufgetreten ist. Die Funktion isNNHit() prüft nämlich nicht, ob die Taste gerade im Augenblick des Aufrufs gedrückt ist, sondern ob seit dem letzten Aufruf der Funktion die Taste irgend einmal gedrückt wurde. Dieses Verfahren hat grosse Vorteile, denn es gehen kein Tastenevents "verloren", weil das Programm das Drücken der Taste verpasst.
Wenn ein Roboter bestimmte Befehle mehrmals wiederholen muss, kannst du die betreffenden Programmzeilen zu einem Programmblock zusammenfassen und diesen mit einer for-Schleife mehrmals durchlaufen. Die Zeilen im Programmblock müssen eingerückt sein und am Ende der for-Anweisung muss ein Doppelpunkt sein.
for i in range(n): Befehl 1 Befehl 2 ......
Hier werden die eingerückten Zeilen n mal wiederholt, wobei n eine beliebige positive ganze Zahl ist. Mehr dazu findest du im Kapitel while&for im Teil Turtlegrafik.
Beachte, dass du bei der Robotik für die Wiederholung repeat nicht verwenden darfst.