2. Bewegung wiederholen


Es liegt im Wesen von Robotern, die Anweisungen mehrmals zu wiederholen. Dazu kann man for- oder while-Schleifen verwenden.

Beispiel 1: Mit einer for-Schleife Quadrat fahren

 

# Ro2a.py

from simrobot import *
#from ev3robot import *
#from nxtrobot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
#gear.setSpeed(30)

for n in range(4):
   gear.forward(2000)
   gear.right(550)
robot.exit()
Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

for n in range(4): Die nachfolgenden eingerückten Befehle werden 4 mal wiederholt. Erklärungen zu Wiederholungsschleifen findet man im Kapitel Turtlegrafik.
gear.setSpeed(30): Falls sich der realer Roboter zu schnell bewegt, kann die Geschwindigkeit mit setSpeed() reduziert werden. Default Geschwindigkeit ist 50. Bei dieser Geschwindigkeit ergibt right(550) bei der Simulation ziemlich genau den rechten Winkel. Beim echten Roboter muss je nach Bodenbelag die Geschwindigkeit angepasst werden

 

Beispiel 2: Roboter auf Kreisbogen bewegen.

Mit den Befehlen rightArc(radius, dauer) bzw. leftArc(radius, dauer) kann man den Roboter auf kreisförmigen Bahnen bewegen.

 

 
# Ro2b.py

from simrobot import *
#from ev3robot import *
#from nxtrobot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)

for n in range(2):
   gear.rightArc(0.1, 2700)
   gear.leftArc(0.1, 2700)
robot.exit()
Programmcode markieren (Ctrl+C kopieren)

Erklärungen zum Programmcode:

rightArc(0.1, 2700) : Der Roboter bewegt sich während 2700 Millisekunden auf einem Kreisbogen mit dem Radius 0.1 m

 

Beispiel 3: "Endlose" while-Schleife
Der Roboter bewegt sich auf einem Linksbogen so lange, bis das Programm mit ESCAPE-Taste abgebrochen wird.

Mit gear.leftArc(0.3) wird der Roboter in Bewegung auf einem Linksbogen versetzt und bewegt sich so lange, bis das Programm abgebrochen wird. Im autonomen Modus kann das Programm durch Drücken des Escape-Buttons auf dem EV3 oder NXT beendet werden.
 

Im direkten Modus wird das Programm entweder durch Schliessen der Connection-Box oder mit ESCAPE-Taste auf der Tastatur beendet werden. Im Simulationsmodus kann man das Grafikfenster schliessen oder Taste ESCAPE drücken.

 


 

# Ro2c.py

from simrobot import *
#from ev3robot import *
#from nxtrobot import *
  
robot = LegoRobot()
gear = Gear();
robot.addPart(gear);

gear.leftArc(0.3)

while not robot.isEscapeHit():
   pass
robot.exit()     
   
Programmcode markieren (Ctrl+C kopieren)

Erklärungen zum Programmcode:

leftArc(0.3): der Roboter wird in die Bewegung auf dem Kreibogen mit dem Radius 0.3 versetzt
while not robot.isEscapeHit(): Endlose while-Schleife. Der Roboter bewegt sich so lange, bis das Programm abgebrochen wird
pass: So lange die Schleifenbedingung nicht erfüllt ist, passiert nichts - der Roboter bleibt in der Bewegung
Falls ein Programm im autonomen Modus in Folge von Programmfehlern "hängen" bleibt, kann es durch gleichzeitiges Drücken des Escape- und Enter-Buttons auf dem EV3 beendet werden. Dabei wird aber auch das BrickGate-Programm beendet und muss danach neu gestartet werden.  

 


Aufgaben: Serie 2

1)

Ein Roboter soll nacheinander 4 Orte erreichen, indem er zuerst vorwärts bis zum ersten Ort fährt, kehrt um 180° und fährt zum Ausgangspunkt zurück. Danach fährt er auf gleiche Weise zu den übrigen drei Stellen, die vom Ausgangspunkt gleich entfernt sind.

 

 

 

2)
Verwende for- oder while-Schleife, um einen Weg, der aus drei Bogen besteht, zu programmieren

 

3)
Verwende "endlose" while-Schleife und lasse den Roboter auf einer 8er-Bahn fahren  

4)

Der Roboter soll sich auf einer Spiralbahn bewegen. Verwende eine repeat-Schleife und vergrössere nach jedem Schleifendurchlauf den Radius im Befehl rightArc(radius).

Löse die Aufgabe zuerst im Simulationsmodus. Mit dem Befehl
RobotContext.enableTrace(True)
kannst du die Spuren des Roboters imd Grafikfenster anzeigen lassen. (Diese Zeile muss im Programm gerade nach der Importzeile stehen).