-====== 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: # 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() 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: # 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)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)) 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