remote

3. REMOTESTEUERUNG

 

 

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.

Damit er remotegesteuert funktioniert, musst du auf dem Pi2Go den sogenannten Brickgate-Server starten. Um den Brickgate-Server zu starten, drückst du den Button so lange, bis HOLd angezeigt wird.  
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()    
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Statt wie vorhin den Download-Button zu klicken, klickst du jetzt den grünen Run-Button. Es erscheint ein Dialogfenster, wo du die IP-Adresse des Pi2Go eingeben musst.

 


Nach dem Klicken des OK-Buttons öffnet sich ein weiteres Dialogfenster.

 

Falls die Verbindung hergestellt werden kann, so startet nach kurzer Zeit das Programm und im Dialogfenster wird eine Erfolgsmeldung ausgeschrieben. Auf dem Pi2Go-Display erscheint kurz Conn.

 

Misslingt die Verbindung, so siehst du die nebenstehende Meldung und du musst nach der Ursache suchen. (Meist ist der Brickgate-Server nicht gestartet oder die WLAN-Verbindung nicht erstellt.)

 

Ein Programm im Remote Modus wird durch Schliessen des Dialogfensters beendet. Die Verbindung zum Roboter wird automatisch unterbrochen.

 

 

 

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:


In einer while-Schleife prüfst du mit einer geschachtelten if-Struktur ständig,  ob eine der Cursortasten oder die Enter-Taste gedrückt wurde. Je nachdem wird dem Fahrwerk der entsprechende Befehl gesendet. Du brichst die while-Schleife und damit das Programm ab, wenn die Escape-Taste gedrückt wurde.

 

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()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

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

 

 

1a)

Erstelle wieder einen lustigen Parcours und versuche, ihn mit der PC-Fernsteuerung zu durchlaufen. Verwende dazu für die Links- bzw. Rechtsdrehung den Befehl gear.left() bzw. gear.right(). Du kannst auch mit gear.setSpeed(speed) und einem Wert von speed zwischen 0 und 100 die Geschwindigkeit ändern und einen Wettbewerb veranstalten, wer den Parcours in kürzester Zeit durchläuft.

1b)

Verwende wie in Kapitel 1 das Hintergrundbild bg.gif und führe das Spiel im Simulationsmodus durch.

RobotContext.setStartPosition(310, 480)
RobotContext.useBackground("sprites/bg.gif")

1c)

Erstelle ein eigenes Hintergrundbild für das Spiel.

2.

Schreibe ein Programm, bei dem du mit den Up- und Down-Tasten die Vorwärts-Geschwindigkeit des Roboters wählen kannst. Beachte, dass eine mit gear.setSpeed() gesetzte Geschwindigkeit erst beim nächsten Bewegungsbefehl übernommen wird und dass bei negativen Geschwindigkeiten der Roboter rückwärts fährt. Die Left- und Right-Tasten sollen den Roboter auf  Links- bzw. Rechtsbogen bewegen. Durchfahre damit wieder einen Parcours.

Anleitung: Es ist eine gute Idee, das Programm zuerst im Simulationsmodus zu entwickeln. Setze beim Start die Geschwindigkeit auf 0.

3*.

Erfinde ein eigenes Fernsteuerungsprogramm.

 

   

 

3-1
Didaktische Hinweise:

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.

3-2
Fachliche Hinweise:

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.

3-3
Fachliche Hinweise:

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.

1-1
Fachliche Hinweise:

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.