Upload
annice
View
55
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Roboter im Labyrinth
“Schweizer Jugend forscht”Studienwoche Informatik
Barbara Rubi, Fabienne Schwab, Shuyang Xu
Inhalt der Präsentation
o Ziel des Projektso Grundsätzlicheso Vorgeheno Problemeo Erfolgeo Visioneno 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}
'variabelni VAR BYTE 'loop zählere1 VAR BYTE 'ergebnis ausgelesen von sensor 3e2 VAR BYTE 'ergebnis ausgelesen von sensor 2e3 VAR BYTE 'ergebnis ausgelesen von sensor 1steps VAR BYTE 'Anzahl Schrittezaehler VAR BYTE 'Anzahl Korr
HIGH 10HIGH 12HIGH 14
'---------------------------------------------
LOOP:IF IN0=0 THEN StartGOTO LOOP
Start:Pause 1000
Sensor:'sensor messung startene1=0e2=0e3=0LOW 10LOW 12LOW 14pause 80
'sensor daten auslesenFOR i= 0 TO 7PULSOUT 10,70PULSOUT 12,70PULSOUT 14,70e1=e1*2+IN11e2=e2*2+IN13e3=e3*2+IN15NEXT
e1=65535/(10*e1)-(287/10)e2=65535/(9*e2)-(275/9)e3=65535/(7*e3)-(298/7)
HIGH 10HIGH 12HIGH 14
DEBUG "sensor3 ",DEC5 e1,CRDEBUG "sensor2 ",DEC5 e2,CRDEBUG "sensor1 ",DEC5 e3,CRDEBUG CR
'------------------------------------------------
'fallunterscheidungIF zaehler > 8 THEN GERADEIF e1 > 30 THEN LINKSIF e3 < 30 THEN RECHTSIF e1 < 19 THEN DISTKORR1IF e1 > 25 THEN DISTKORR2IF (e1-e2) > 65515 THEN RECHTSKORR IF (e1-e2) < 2 THEN GERADEIF (e1-e2) < 60000 THEN LINKSKORR
GOTO GERADE '-------------------------------------------------
LINKS:
HIGH 3 'kurzes stueck geradePAUSE 200LOW 3
LOW 6LOW 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 129 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
HIGH 3PAUSE 200LOW 3
LOW 6HIGH 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 99 'linksdrehung
PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
HIGH 3 'kurzes stueck geradePAUSE 200LOW 3
LOW 6LOW 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 169 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
GOTO Sensor
'--------------------------------------------------
RECHTS:
HIGH 3PAUSE 200LOW 3
LOW 6LOW 1LOW 5
HIGH 2HIGH 4
FOR i=0 TO 92 'rechtsdrehung
PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT GOTO Sensor
'-------------------------------------------------
GERADE:
zaehler = 0
HIGH 3PAUSE 200LOW 3
LOW 6LOW 1HIGH 5HIGH 2HIGH 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),crzaehler = 1+zaehler
PAUSE 200LOW 3
LOW 6HIGH 1HIGH 5HIGH 2HIGH 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),crzaehler = 1+zaehlerHIGH 3PAUSE 200LOW 3
LOW 6LOW 1LOW 5HIGH 2HIGH 4
FOR i=0 TO 4 'rechtsdrehung
PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT GOTO Sensor
'----------------------------------------------------------------
DISTKORR1:
LOW 6LOW 1LOW 5HIGH 2HIGH 4
FOR i=0 TO 15 'rechtsdrehung
PULSOUT 2,13 PULSOUT 4,13 PAUSE 20NEXT
HIGH 3PAUSE 200LOW 3
LOW 6LOW 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 80 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
HIGH 3PAUSE 200LOW 3
LOW 6HIGH 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 15 'linksdrehung
PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
GOTO Sensor
DISTKORR2:
HIGH 3PAUSE 200LOW 3
LOW 6HIGH 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 15 'linksdrehung
PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
HIGH 3PAUSE 200LOW 3
LOW 6LOW 1HIGH 5HIGH 2HIGH 4
FOR i=0 TO 80 PULSOUT 2,13 PULSOUT 4,13 PAUSE 20
NEXT
HIGH 3PAUSE 200LOW 3
LOW 6LOW 1LOW 5HIGH 2HIGH 4
FOR i=0 TO 12 'rechtsdrehung
Herzlichen Dank für Ihre Aufmerksamkeit
Auf Wiedersehen
Hauptprogramm (Sensor):Startet Messung, liest Sensordaten S1,S2,S3 ein
Zaehler >8?
Sensor3 >30 cm?
Sensor1 <30cm?
Sensor3 <19cm?
Sensor3 >25cm?
(Sensor3 -Sensor2 ) >
65515?
Nein
Nein
Nein
Nein
6,5cm gerade fahren
90-Grad-Linksdrehung
90-Grad-Rechtsdrehung
Zu nahe Distanzkorrigieren
Zu weite Distanzkorrigieren
Korrektur nach rechts
Ja
Ja
Ja
Ja
Ja
Ja
S3
S1
S2
Messrichtung S3
Messrichtung S2
Messrichtung S
1
STAMPY
(Sensor3 - Sensor2) < 2cm?
Nein
Nein
6,5cm gerade fahren
Korrektur nach links
Ja
Ja
Nein
(Sensor3 – Sensor2) < 60000?
Sicherheitsfunktion, um Endlosschlaufen abzubrechen
Hauptprogramm (Sensor):Startet Messung, liest Sensordaten S1,S2,S3 ein
Zaehler >8?
Sensor3 >30 cm?
Sensor1 <30cm?
Sensor3 <19cm?
Sensor3 >25cm?
(Sensor3 -Sensor2 ) >
65515?
Nein
Nein
Nein
Nein
6,5cm gerade fahren
90-Grad-Linksdrehung
90-Grad-Rechtsdrehung
Zu nahe Distanzkorrigieren
Zu weite Distanzkorrigieren
Korrektur nach rechts
Ja
Ja
Ja
Ja
Ja
Ja
S3
S1
S2
Messrichtung S3
Messrichtung S2
Messrichtung S
1
STAMPY
(Sensor3 - Sensor2) < 2cm?
Nein
Nein
6,5cm gerade fahren
Korrektur nach links
Ja
Ja
Nein
(Sensor3 – Sensor2) < 60000?
Fall1: Sieht Sensor 3 keine Wand, dreht sich der Roboter nach links
Keine Wand
Ecke
Hauptprogramm (Sensor):Startet Messung, liest Sensordaten S1,S2,S3 ein
Zaehler >8?
Sensor3 >30 cm?
Sensor1 <30cm?
Sensor3 <19cm?
Sensor3 >25cm?
(Sensor3 -Sensor2 ) >
65515?
Nein
Nein
Nein
Nein
6,5cm gerade fahren
90-Grad-Linksdrehung
90-Grad-Rechtsdrehung
Zu nahe Distanzkorrigieren
Zu weite Distanzkorrigieren
Korrektur nach rechts
Ja
Ja
Ja
Ja
Ja
Ja
S3
S1
S2
Messrichtung S3
Messrichtung S2
Messrichtung S
1
STAMPY
(Sensor3 - Sensor2) < 2cm?
Nein
Nein
6,5cm gerade fahren
Korrektur nach links
Ja
Ja
Nein
(Sensor3 – Sensor2) < 60000?
Fall2: Sieht Sensor 1 eine Wand, dreht sich der Roboter nach rechts
Wand
Hauptprogramm (Sensor):Startet Messung, liest Sensordaten S1,S2,S3 ein
Zaehler >8?
Sensor3 >30 cm?
Sensor1 <30cm?
Sensor3 <19cm?
Sensor3 >25cm?
(Sensor3 -Sensor2 ) >
65515?
Nein
Nein
Nein
Nein
6,5cm gerade fahren
90-Grad-Linksdrehung
90-Grad-Rechtsdrehung
Zu nahe Distanzkorrigieren
Zu weite Distanzkorrigieren
Korrektur nach rechts
Ja
Ja
Ja
Ja
Ja
Ja
S3
S1
S2
Messrichtung S3
Messrichtung S2
Messrichtung S
1
STAMPY
(Sensor3 - Sensor2) < 2cm?
Nein
Nein
6,5cm gerade fahren
Korrektur nach links
Ja
Ja
Nein
(Sensor3 – Sensor2) < 60000?
Der Roboter entscheidet, ob er den Winkel oder den Abstand zur Wand korrigieren soll und korrigiert ihn falls noetig
Hauptprogramm (Sensor):Startet Messung, liest Sensordaten S1,S2,S3 ein
Zaehler >8?
Sensor3 >30 cm?
Sensor1 <30cm?
Sensor3 <19cm?
Sensor3 >25cm?
(Sensor3 -Sensor2 ) >
65515?
Nein
Nein
Nein
Nein
6,5cm gerade fahren
90-Grad-Linksdrehung
90-Grad-Rechtsdrehung
Zu nahe Distanzkorrigieren
Zu weite Distanzkorrigieren
Korrektur nach rechts
Ja
Ja
Ja
Ja
Ja
Ja
S3
S1
S2
Messrichtung S3
Messrichtung S2
Messrichtung S
1
STAMPY
(Sensor3 - Sensor2) < 2cm?
Nein
Nein
6,5cm gerade fahren
Korrektur nach links
Ja
Ja
Nein
(Sensor3 – Sensor2) < 60000?
Nachdem eine Entscheidung zu einer Aktion gefuehrt hat (z.B. der Roboter hat sich nach rechts gedreht), startet wieder das Hauptprogramm.