250 likes | 385 Views
Roboter im Labyrinth. “ Schweizer Jugend forscht” Studienwoche Informatik Barbara Rubi, Fabienne Schwab, Shuyang Xu. Inhalt der Präsentation. Ziel des Projekts Grundsätzliches Vorgehen Probleme Erfolge Visionen Demonstration. Ziel des Projekts.
E N D
Roboter im Labyrinth “Schweizer Jugend forscht” Studienwoche Informatik Barbara Rubi, Fabienne Schwab, Shuyang Xu
Inhalt der Präsentation • Ziel des Projekts • Grundsätzliches • Vorgehen • Probleme • Erfolge • Visionen • Demonstration
Ziel des Projekts Ein Roboter soll so programmiert werden, dass er selbstständig aus einem Labyrinth herausfindet.
Grundsätzliches • Ein Roboter findet sicher aus einem Labyrinth (ohne Inseln), indem er immer rechts oder links der Wand entlang fährt. • Er braucht mindestens drei Entfernungs-sensoren, um in allen Situationen die richtige Entscheidung treffen zu können.
Vorgehen • Datenaustausch zwischen Roboter und Computer herstellen • Ermittlung von möglichen Situationen im Labyrinth • Zeichnen eines Flow-Charts • Zerlegen des Problems in Einzelprogramme • Zusammenfügen des Hauptprogramms • Testen im Labyrinth • Anbringen von Verbesserungen, Änderungen und Ergänzungen
Probleme • Eichung der Sensoren erfordert präzise Messungen • Korrektur von Fehlpositionen • Optimale Abfolge von Entscheidungsschritten erarbeiten
Erfolge • erste präzise Linkskurve • korrekte Entscheidung der Situation • gelungene Korrektur der Fehlpositionen • erster erfolgreicher Durchlauf des Labyrinths
Visionen • Überwindung eines Labyrinths mit Inseln • Anwendung in der Forschung, Haushalt etc. (z.B. Minensucher, Staubsauger, Rasenmäher usw.)
Wir danken … • …der FHBB für die Idee des Projekts und die Bereitstellung des Roboters • …der Stiftung Schweizer Jugend forscht • …unseren Betreuern Andreas Kiebele und Radolf von Salis
'{$STAMP BS2} 'variabeln i VAR BYTE 'loop zähler e1 VAR BYTE 'ergebnis ausgelesen von sensor 3 e2 VAR BYTE 'ergebnis ausgelesen von sensor 2 e3 VAR BYTE 'ergebnis ausgelesen von sensor 1 steps VAR BYTE 'Anzahl Schritte zaehler VAR BYTE 'Anzahl Korr HIGH 10 HIGH 12 HIGH 14 '--------------------------------------------- LOOP: IF IN0=0 THEN Start GOTO LOOP Start: Pause 1000 Sensor: 'sensor messung starten e1=0 e2=0 e3=0 LOW 10 LOW 12 LOW 14 pause 80 'sensor daten auslesen FOR i= 0 TO 7 PULSOUT 10,70 PULSOUT 12,70 PULSOUT 14,70 e1=e1*2+IN11 e2=e2*2+IN13 e3=e3*2+IN15 NEXT
e1=65535/(10*e1)-(287/10) e2=65535/(9*e2)-(275/9) e3=65535/(7*e3)-(298/7) HIGH 10 HIGH 12 HIGH 14 DEBUG "sensor3 ",DEC5 e1,CR DEBUG "sensor2 ",DEC5 e2,CR DEBUG "sensor1 ",DEC5 e3,CR DEBUG CR '------------------------------------------------ 'fallunterscheidung IF zaehler > 8 THEN GERADE IF e1 > 30 THEN LINKS IF e3 < 30 THEN RECHTS IF e1 < 19 THEN DISTKORR1 IF e1 > 25 THEN DISTKORR2 IF (e1-e2) > 65515 THEN RECHTSKORR IF (e1-e2) < 2 THEN GERADE IF (e1-e2) < 60000 THEN LINKSKORR GOTO GERADE '------------------------------------------------- LINKS: HIGH 3 'kurzes stueck gerade PAUSE 200 LOW 3 LOW 6 LOW 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 129 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT
HIGH 3 PAUSE 200 LOW 3 LOW 6 HIGH 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 99 'linksdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT HIGH 3 'kurzes stueck gerade PAUSE 200 LOW 3 LOW 6 LOW 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 169 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT GOTO Sensor '-------------------------------------------------- RECHTS: HIGH 3 PAUSE 200 LOW 3 LOW 6 LOW 1 LOW 5
HIGH 2 HIGH 4 FOR i=0 TO 92 'rechtsdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT GOTO Sensor '------------------------------------------------- GERADE: zaehler = 0 HIGH 3 PAUSE 200 LOW 3 LOW 6 LOW 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 49 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT GOTO Sensor '--------------------------------------------------- LINKSKORR: debug "links e1-e2 ",dec (e1-e2),cr zaehler = 1+zaehler
PAUSE 200 LOW 3 LOW 6 HIGH 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 4 'linksdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT GOTO Sensor '----------------------------------------------------------- RECHTSKORR: debug "rechts e1-e2 ",dec (e1-e2),cr zaehler = 1+zaehler HIGH 3 PAUSE 200 LOW 3 LOW 6 LOW 1 LOW 5 HIGH 2 HIGH 4 FOR i=0 TO 4 'rechtsdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT GOTO Sensor '---------------------------------------------------------------- DISTKORR1:
LOW 6 LOW 1 LOW 5 HIGH 2 HIGH 4 FOR i=0 TO 15 'rechtsdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT HIGH 3 PAUSE 200 LOW 3 LOW 6 LOW 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 80 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT HIGH 3 PAUSE 200 LOW 3 LOW 6 HIGH 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 15 'linksdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT GOTO Sensor
DISTKORR2: HIGH 3 PAUSE 200 LOW 3 LOW 6 HIGH 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 15 'linksdrehung PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT HIGH 3 PAUSE 200 LOW 3 LOW 6 LOW 1 HIGH 5 HIGH 2 HIGH 4 FOR i=0 TO 80 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20 NEXT HIGH 3 PAUSE 200 LOW 3 LOW 6 LOW 1 LOW 5 HIGH 2 HIGH 4 FOR i=0 TO 12 'rechtsdrehung
Sensor1 < 30cm? Hauptprogramm (Sensor): Startet Messung, liest Sicherheitsfunktion, um Endlosschlaufen abzubrechen Sensordaten S1,S2,S3 ein Zaehler > Sensor3 > Zu weite Distanz Ja 6,5cm gerade fahren Ja 8? 25cm? korrigieren Nein ( Sensor3 - Nein Sensor3 > Ja Ja 90-Grad-Linksdrehung Korrektur nach rechts Sensor2 ) > 30 cm? 65515? Nein (Sensor3 - Nein Sensor2) < 2cm? Ja 90-Grad-Rechtsdrehung Ja 6,5cm gerade fahren Nein Nein Zu nahe Distanz Sensor3 < Ja (Sensor3– Sensor2) < 60000? korrigieren 19cm? Ja Korrektur nach links Nein Messrichtung S3 S3 Messrichtung S1 Messrichtung S2 S2 STAMPY S1
Sensor1 < 30cm? Hauptprogramm (Sensor): Startet Messung, liest Fall1: Sieht Sensor 3 keine Wand, dreht sich der Roboter nach links Sensordaten S1,S2,S3 ein Zaehler > Sensor3 > Zu weite Distanz Ja 6,5cm gerade fahren Ja 8? 25cm? korrigieren Nein ( Sensor3 - Nein Sensor3 > Ja Ja 90-Grad-Linksdrehung Korrektur nach rechts Sensor2 ) > 30 cm? 65515? Nein (Sensor3 - Nein Sensor2) < 2cm? Ja 90-Grad-Rechtsdrehung Ja 6,5cm gerade fahren Nein Nein Zu nahe Distanz Sensor3 < Ja (Sensor3– Sensor2) < 60000? korrigieren 19cm? Ja Korrektur nach links Nein Keine Wand Messrichtung S3 S3 Messrichtung S1 Ecke Messrichtung S2 S2 STAMPY S1
Sensor1 < 30cm? Hauptprogramm (Sensor): Startet Messung, liest Sensordaten S1,S2,S3 ein Zaehler > Sensor3 > Zu weite Distanz Ja 6,5cm gerade fahren Ja 8? 25cm? korrigieren Nein ( Sensor3 - Nein Sensor3 > Ja Ja 90-Grad-Linksdrehung Korrektur nach rechts Sensor2 ) > 30 cm? 65515? Nein (Sensor3 - Nein Sensor2) < 2cm? Ja 90-Grad-Rechtsdrehung Ja 6,5cm gerade fahren Nein Nein Zu nahe Distanz Sensor3 < Ja (Sensor3– Sensor2) < 60000? korrigieren 19cm? Ja Korrektur nach links Nein Wand Fall2: Sieht Sensor 1 eine Wand, dreht sich der Roboter nach rechts Messrichtung S3 S3 Messrichtung S1 Messrichtung S2 S2 STAMPY S1
Sensor1 < 30cm? Hauptprogramm (Sensor): Startet Messung, liest Sensordaten S1,S2,S3 ein Zaehler > Sensor3 > Zu weite Distanz Ja 6,5cm gerade fahren Ja 8? 25cm? korrigieren Nein ( Sensor3 - Nein Sensor3 > Ja Ja 90-Grad-Linksdrehung Korrektur nach rechts Sensor2 ) > 30 cm? 65515? Nein (Sensor3 - Nein Sensor2) < 2cm? Ja 90-Grad-Rechtsdrehung Ja 6,5cm gerade fahren Nein Nein Zu nahe Distanz Sensor3 < Ja (Sensor3– Sensor2) < 60000? korrigieren 19cm? Ja Korrektur nach links Nein Der Roboter entscheidet, ob er den Winkel oder den Abstand zur Wand korrigieren soll und korrigiert ihn falls noetig Messrichtung S3 S3 Messrichtung S1 Messrichtung S2 S2 STAMPY S1
Sensor1 < 30cm? Hauptprogramm (Sensor): Startet Messung, liest Sensordaten S1,S2,S3 ein Zaehler > Sensor3 > Zu weite Distanz Ja 6,5cm gerade fahren Ja 8? 25cm? korrigieren Nein ( Sensor3 - Nein Sensor3 > Ja Ja 90-Grad-Linksdrehung Korrektur nach rechts Sensor2 ) > 30 cm? 65515? Nein (Sensor3 - Nein Sensor2) < 2cm? Ja 90-Grad-Rechtsdrehung Ja 6,5cm gerade fahren Nein Nein Zu nahe Distanz Sensor3 < Ja (Sensor3– Sensor2) < 60000? korrigieren 19cm? Ja Korrektur nach links Nein Nachdem eine Entscheidung zu einer Aktion gefuehrt hat (z.B. der Roboter hat sich nach rechts gedreht), startet wieder das Hauptprogramm. Messrichtung S3 S3 Messrichtung S1 Messrichtung S2 S2 STAMPY S1