Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf20:robotik:pruegeli-challenge [2021/05/25 19:22] Ivo Blöchliger created |
lehrkraefte:blc:informatik:glf20:robotik:pruegeli-challenge [2021/05/31 08:26] (current) Ivo Blöchliger [Aufgaben] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Neue Elemente ===== | ===== Neue Elemente ===== | ||
- | Es gibt noch zwei neue Elemente: Der Ultraschall-Distanzsensor und der dritte Motor, um die Ladegabel | + | Es gibt noch zwei neue Elemente |
==== Ultraschall-Distanzsensor ==== | ==== Ultraschall-Distanzsensor ==== | ||
Der Ultraschallsensor wird wie folgt initialisiert: | Der Ultraschallsensor wird wie folgt initialisiert: | ||
<code python> | <code python> | ||
# Ultraschall Distanzsensor hinzufuegen | # Ultraschall Distanzsensor hinzufuegen | ||
- | us = UltrasonicSensor(SensorPort.S4) | + | us = UltrasonicSensor(SensorPort.S2) # Kontrollieren, |
robot.addPart(us) | robot.addPart(us) | ||
+ | |||
</ | </ | ||
Line 18: | Line 19: | ||
Kann keine Distanz ermittelt werden, wird 0 (Null) als Wert geliefert. D.h. die Werte sind nur dann sinnvoll wenn '' | Kann keine Distanz ermittelt werden, wird 0 (Null) als Wert geliefert. D.h. die Werte sind nur dann sinnvoll wenn '' | ||
- | ==== Gabel-Motor ==== | + | ==== Heber-Motor ==== |
Initialisierung: | Initialisierung: | ||
<code python> | <code python> | ||
Line 30: | Line 31: | ||
Verwendung: | Verwendung: | ||
<code python> | <code python> | ||
- | # Heber runter | + | ########################################################################## |
- | heber.continueTo(-140) | + | ### Sicherstellen, |
- | Tools.delay(500) | + | ########################################################################## |
+ | |||
+ | # Heber in eine gegebene Position fahren. | ||
+ | def heberPosition(position): | ||
+ | | ||
+ | Tools.delay(500) | ||
+ | |||
+ | |||
+ | # Funktionen aufrufen: | ||
+ | heberPosition(-140) | ||
+ | heberPosition(0) | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Aufgaben ===== | ||
+ | Sie programmieren und testen Programmteile, | ||
+ | |||
+ | Das Programm soll wie folgt organisiert werden: | ||
+ | <code python> | ||
+ | # imports | ||
+ | |||
+ | # Initialiserung des Roboters, Motoren, Sensoren | ||
+ | |||
+ | # Definition der Funktionen wie z.B. | ||
+ | |||
+ | def heberPosition(position): | ||
+ | # ... | ||
+ | |||
+ | def folgenBisWand(distanz): | ||
+ | # ... | ||
+ | |||
+ | def wenden(): | ||
+ | # ... | ||
+ | |||
+ | # Ganz unten, Start vom eigentlichen Programm: | ||
+ | |||
+ | folgenBisWand(20) | ||
+ | heberPosition(-100) | ||
+ | folgenBisWand(10) | ||
+ | heberPosition(-60) | ||
+ | rueckwartsFahren() | ||
+ | wenden() | ||
+ | heberPosition(-160) | ||
+ | </ | ||
+ | |||
+ | ==== Challenge ==== | ||
+ | Der Roboter soll ein Schoggi-Prügeli holen und bringen, wie in [[https:// | ||
+ | |||
+ | **Wichtig: | ||
+ | |||
+ | Der Roboter folgt der Linie, bis er nah genug an der Wand ist, lädt das Prügeli auf, fährt rückwärts, | ||
+ | |||
+ | Positionieren Sie die rechte Auflage fast am Rand des Papiers und das Prügeli so weit vorne wie möglich. | ||
+ | {{lehrkraefte: | ||
+ | |||
+ | ==== Bis auf eine Distanz geradeaus fahren ==== | ||
+ | <WRAP todo> | ||
+ | Messen Sie die geeignete Distanz von Sensor zur Wand, damit das Prügeli gut aufgeladen werden kann. Tragen Sie dann diese Distanz im Code unten ein und testen Sie | ||
+ | <code python> | ||
+ | def fahrenBisWand(): | ||
+ | gear.setSpeed(20) | ||
+ | gear.forward() | ||
+ | while True: | ||
+ | dist = us.getDistance() | ||
+ | if dist>0 and dist< | ||
+ | break | ||
+ | gear.stop() | ||
+ | |||
+ | # Funktionen aufrufen | ||
+ | fahrenBisWand() | ||
+ | </ | ||
+ | Erweitern Sie das Programm so, dass der Heber erst runter geht, dann der Roboter fährt und am Schluss der Heber das Prügeli hoch hebt. | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Dem Rand folgen, bis zu einer Distanz ==== | ||
+ | <WRAP todo> | ||
+ | Schreiben Sie eine Funktion, damit der Roboter dem Rand folgt, bis zu einen bestimmten Distanz. | ||
+ | <code python> | ||
+ | def folgenBisWand(): | ||
+ | while True: | ||
+ | # Folgen | ||
+ | # Distanz überprüfen | ||
+ | </ | ||
+ | Zusätzlich können Sie die Geschwindigkeit in Abhängigkeit der Distanz anpassen: | ||
+ | * zuerst maximale Geschwindigkeit, | ||
+ | * Dann die Geschwindigkeit bis etwa 5 reduzieren, je näher man der gewünschten Distanz kommt (verwenden Sie dazu unsere Funktion linear für die Umrechnung) | ||
+ | |||
+ | <code python> | ||
+ | def linear(a, | ||
+ | return (x-a)/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Challenges ===== | ||
+ | Jetzt sollten Sie die Challenge 1 lösen können. | ||
+ | |||
+ | ==== Challenge 2 ==== | ||
+ | {{lehrkraefte: | ||
+ | |||
+ | Der Roboter startet beim grünen Pfeil, folgt der Linie bis vor die Mauer, fährt dann schräg daran vorbei bis zum Rand, dann wie Challange 1 | ||
+ | |||
+ | ==== Challenge 3 ==== | ||
+ | Wie Challenge 2, das Prügeli soll aber im rechten unteren Ecken (beim Startpunkt) abgelegt werden. | ||
- | # Heber wieder hoch | ||
- | heber.continueTo(0) | ||
- | Tools.delay(500) | ||
- | </code python> | ||