Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf24:robotik:pruegli-challenge [2024/12/17 07:10] – Ivo Blöchliger | lehrkraefte:blc:informatik:glf24:robotik:pruegli-challenge [2024/12/17 07:17] (current) – [Programmierung] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | -====== Brügeli-Challenge ====== | ||
| + | * Ein weisses, grosses Blatt Papier (wird geliefert), liegt wie im folgenden Bild am Boden. | ||
| + | * Der Roboter startet auf dem Blatt ungefähr an der Position mit der ungefähren Richtung wie im folgenden Bild. | ||
| + | * Der Roboter soll sein Ziel auch finden, wenn die Position und Richtung leicht geändert werden (+/- 10cm), (+/- 20˚) | ||
| + | * Das Brügeli liegt auf 2 Kartonblöcken mit beiden Enden auf. | ||
| + | * Positionieren Sie das Brügeli so, dass wenn der Roboter mit dem Lichtsensor auf der Kante des Blatts steht, dass er es mit dem Heber gut zwischen den Kartonblöcken greifen kann. | ||
| + | * Das Brügeli soll bei der Ecke vom Blatt wie unten abgebildet abgeladen werden. | ||
| + | {{lehrkraefte: | ||
| + | |||
| + | ===== Programmierung ===== | ||
| + | * Legen Sie ein neues Projekt mit Namen '' | ||
| + | * In der neu erzeugten Datei '' | ||
| + | <code python> | ||
| + | # Helligkeitssensor | ||
| + | licht = ColorSensor(Port.S3) | ||
| + | |||
| + | # Distanzsensor | ||
| + | ultraschall = UltrasonicSensor(Port.S2) | ||
| + | |||
| + | # Motoren | ||
| + | links = Motor(Port.A) | ||
| + | rechts = Motor(Port.B) | ||
| + | fahrwerk = DriveBase(links, | ||
| + | |||
| + | heber = Motor(Port.C) | ||
| + | |||
| + | # Parameter fürs das Folgen von Linien: | ||
| + | hellMin = 10 # Helligkeit auf dunkler Seite | ||
| + | hellMax = 80 # Helligkeit auf heller Seite | ||
| + | omegaMax = 30 # Maximal Drehgeschwindigkeit beim Linienfolgen | ||
| + | speed = 100 # Vorwärtsgeschwindigkeit beim Linienfolgen. | ||
| + | |||
| + | ######## | ||
| + | # TODO # | ||
| + | ######## | ||
| + | def heberAb(): | ||
| + | heber.run_target(20, | ||
| + | |||
| + | def heberAuf(): | ||
| + | heber.run_target(20, | ||
| + | | ||
| + | | ||
| + | heberAb() | ||
| + | wait(2000) | ||
| + | heberAuf() | ||
| + | |||
| + | </ | ||
| + | |||
| + | Der Roboter soll mit dem Heber oben starten. Finden Sie dann eine geeignete Winkelposition für den Heber, um das Brügeli aufladen zu können. | ||
| + | |||
| + | Wenn das funktioniert, | ||
| + | |||
| + | <code python> | ||
| + | |||
| + | # Folgt der Linie auf der einen (seite=1) oder anderen Seite (seite=-1) | ||
| + | # testBis ist eine Funktion, die True (weiter folgen) oder False (anhalten und nicht mehr folgen) zurückgibt | ||
| + | def folgen(seite, | ||
| + | while testBis(): | ||
| + | hell = licht.reflection() | ||
| + | omega = ((hellMax-hell)/ | ||
| + | fahrwerk.drive(speed, | ||
| + | fahrwerk.stop() | ||
| + | |||
| + | def fahren(testBis): | ||
| + | while testBis(): | ||
| + | pass | ||
| + | fahrwerk.stop() | ||
| + | | ||
| + | def ultraschallGroesser(limit): | ||
| + | def testBis(): | ||
| + | d = ultraschall.distance() | ||
| + | | ||
| + | return testBis | ||
| + | | ||
| + | def tachometerKleiner(limit): | ||
| + | fahrwerk.reset() | ||
| + | def testBis(): | ||
| + | d = fahrwerk.distance() | ||
| + | | ||
| + | return testBis | ||
| + | | ||
| + | def helligkeitGroesser(limit): | ||
| + | def testBis(): | ||
| + | hell = licht.reflection() | ||
| + | | ||
| + | return testBis | ||
| + | |||
| + | |||
| + | # Während 10cm einer Linie folgen, dann stoppen | ||
| + | # folgen(1, ultraschallGroesser(100)) | ||
| + | |||
| + | # Der Linie folgen, bis der Roboter 20 cm vor einer Wand steht. | ||
| + | # folgen(1, tachometerKleiner(200)) | ||
| + | |||
| + | # Weiterfahren, | ||
| + | # fahrwerk.drive(150, | ||
| + | # fahren(helligkeitGroesser(20)) | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Lösen Sie die Challenge mit folgenden Elementen: | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||