lehrkraefte:blc:informatik:glf24:robotik:pruegli-challenge

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf24:robotik:pruegli-challenge [2024/12/14 16:26] Ivo Blöchligerlehrkraefte: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:blc:informatik:glf22:robotik-mit-vscode:challenge.svg}}
 +
 +===== Programmierung =====
 +  * Legen Sie ein neues Projekt mit Namen ''bruegli'' an.
 +  * In der neu erzeugten Datei ''main.py'' fügen Sie folgenden Code ein:
 +<code python>
 +# Helligkeitssensor
 +licht = ColorSensor(Port.S3)             # Bitte Anschluss-Nummer überprüfen.
 +
 +# Distanzsensor
 +ultraschall = UltrasonicSensor(Port.S2)  # Bitte Anschluss überprüfen
 +
 +# Motoren
 +links = Motor(Port.A)
 +rechts = Motor(Port.B)
 +fahrwerk = DriveBase(links, rechts, 55, 135)  # Motor links, Motor rechts, Raddurchmesser (in mm), Radabstand (in mm)
 +
 +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, -42)  # Hier den Winkel anpassen. Auf jeden Fall negativ.
 +
 +def heberAuf():
 +    heber.run_target(20, 0)   # Zurück auf Startposition
 +    
 +    
 +heberAb()
 +wait(2000)   # 2s warten
 +heberAuf()
 +
 +</code>
 +
 +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, löschen Sie die letzten drei Zeilen (die nur zum Testen da sind) und fügen Sie folgenden Code hinzu:
 +
 +<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, testBis):
 +    while testBis():
 +        hell = licht.reflection()
 +        omega = ((hellMax-hell)/(hellMax-hellMin)*2-1)*omegaMax*seite
 +        fahrwerk.drive(speed, omega)
 +    fahrwerk.stop()
 +
 +def fahren(testBis):
 +    while testBis():
 +        pass
 +    fahrwerk.stop()
 +    
 +def ultraschallGroesser(limit):
 +    def testBis():
 +       d = ultraschall.distance()
 +       return d==0 or d>limit
 +    return testBis
 +    
 +def tachometerKleiner(limit):
 +    fahrwerk.reset()  # Tachometer auf Null setzen
 +    def testBis():
 +       d = fahrwerk.distance()
 +       return abs(d)<abs(limit)
 +    return testBis
 +    
 +def helligkeitGroesser(limit):
 +    def testBis():
 +       hell = licht.reflection()
 +       return hell>limit
 +    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, bis Helligkeit kleiner als 20
 +# fahrwerk.drive(150,0)
 +# fahren(helligkeitGroesser(20))
 +
 +</code>
 +
 +
 +Lösen Sie die Challenge mit folgenden Elementen:
 +  * ''fahrwerk.straight(-200)'' (20cm rückwärts fahren)
 +  * ''fahrwerk.turn(90)'' (90° drehen)
 +  * ''fahren(helligkeitGroesser(20))'' weiter fahren (nach drive-Kommando), bis Helligkeit kleiner als 20
 +  * ''folgen(1, tachometerKleiner(100))'' 10cm der Linie folgen
 +  * ''folgen(1, ultraschallGroesser(100))'' Der Linie folgen, bis 10cm vor die Wand
 +