Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

abgeschlossene_projekte:a_maze_sing

Projektdokumentation A_Maze_Sing

Kurzbeschreibung:

In unserem Projekt haben wir versucht, einen Roboter zu entwickeln, der durch ein Labyrinth fahren kann, ohne an die Wände des Labyrinths zu stoßen. Unser Roboter empfängt Befehle in Form von Signalen durch einen Laptop, der mithilfe einer seriellen Schnittstelle die Daten an unseren Laptop sendet. Durch diese Befehle, weis unser Roboter welchen Weg er fahren muss, um schnellstmöglich am Ziel des Labyrinths anzukommen. Sobald er am Ziel angekommen ist, spielt er eine Melodie ab, um zu zeigen, dass er erfolgreich war.

Ein Projekt von Ole Putzkammer und Justus Andrä
- WiSe 15/16 - TU Berlin -

Themenbeschreibung/Einleitung

Der Roboter sollte zu aller erst Gegenstände und Wände (allgemein Hindernisse) vor und seitlich von ihm erkennen um diese zu umfahren und ihnen selbstständig auszuweichen. Dabei ist es jedoch nicht ganz geblieben. Mittlerweile soll er sich nur noch durch ein Labyrinth navigieren können. Dafür bleibt er vor einer Mauer mit einem gewissen Abstand stehen, und fährt dann an dieser vorbei bzw. sucht sich einen anderen Weg, indem er sich in eine andere Richtung dreht. Diesen Weg fährt er dann, bis er auf eine neues Hindernis(Wand) trifft. So fährt er dann durch das Labyrinth. Da der Roboter sich immer um 90 Grad dreht, wenn er auf eine Wand stößt, an der er nicht vorbei kann, ist er somit nur an rechteckige Labyrinthe angepasst. Die Steuerbefehle, damit sich der Roboter in Bewegung setzt, sollen dem Roboter mithilfe einer seriellen Schnittstelle zugeschickt werden. Der Roboter kann so Daten eines Laptops (der Skycamgruppe) empfangen und diese dann weiter verarbeiten um bestimmte Befehle - wie zum Beispiel, drehe dich um 90° auszuführen. In unserem Fall schickt der Laptop Daten an den Roboter, damit dieser den kürzesten Weg vom Start bis zum Ziel eines selbst generierten Schwarz-Weiß Labyrinthes fährt.

Überblick über das Gesamtsystem

Unser Projekt war in 2 Teilgruppen aufgeteilt. Einmal unsere Gruppe A_Maze_Sing und zweitens die Gruppe der Skycam. Wir haben uns mit dem mechanischen Teil, dem Bauen des Roboters und der Aufgabe ihn zum laufen zu bringen beschäftigt. Unser Roboter wird durch 2 Steppermotoren betrieben, die wiederum über 2 Treiber ( pololu a4988) laufen. Über einen Mikrocontroller, den Arduino Nano werden dann die jeweiligen Bewegungsbefehle an die Treiber weitergeleitet, welche die Steppermotoren daraufhin ansprechen. Dadurch fangen diese an sich zu drehen und damit der Roboter beginnt seine Bewegung. Damit das alles funktioniert, brauchen Arduino und pololu a4988 Strom. Dieser wird über einen Akku, in unserem Fall einen LiPo-Akku bereitgestellt. Währenddessen, hat sich die Skycam-Gruppe damit beschäftigt das Programm zu schreiben, mit dem sie das Labyrinth, welches unser Roboter durchfahren soll zu erstellen. Unsere beiden Gruppen zusammen haben sich außerdem damit beschäftigt, wie wir eine serielle Schnittstelle zwischen unserem Roboter und deren „Skycam“ erzeugen, damit der Roboter Befehle eines Laptops empfangen kann, um den kürzesten Weg durch das, von der Skycam-Gruppe erstellte Labyrinth, zu fahren.

Einzelne Abschnitte zur Beschreibung von Details der einzelnen Systembestandteile

Eine Schwierigkeit war, dass sich der Roboter um 90 Grad drehen muss. Da wir sogenannte Stepper-Motoren verwenden, mussten wir herausfinden, wie viele Steps der Roboter machen muss, damit er sich um genau 90 Grad dreht. Dazu mussten wir unter anderem in Erfahrung bringen, wie viele Steps der Motor machen muss um eine komplette Drehung des Rades durchzuführen.

Zuerst haben wir den Durchmesser eines Rades des Roboters(9 cm), und den Abstand zwischen den 2 Rädern gemessen (10 cm). Damit ist der Radius eines Rades des Roboters 4.5cm. Desweiteren haben wir im Internet nach unseren Steppermotoren gesucht und herausgefunden, dass sie 200 Steps für eine „Revolution“, also eine Umdrehung (360°) eines Rades auf dem Steppermotor brauchen. Somit ist 1 Step = 1.8°, da : $a=\frac{200}{360°} = 1.8°$

Jetzt muss der Umfang eines 360°- Kreises des Roboters berechnet werden. Dafür benutzen wir die 10cm Abstand zwischen den 2 Rädern, die wir ausgemessen hatten, als Radius, da sich der Roboter ja um eins der Räder dreht, wenn er seine Ausrichtung wechselt indem er sich dreht. Die Formel für den Umfang (2π * r) lautet in diesem Fall also: $U_{360°-Drehung} = 2π * 10cm = 62.83cm$

Diese 62.83cm müssen jetzt durch 4 geteilt werden, damit man den Umfang einer 90°-Drehung herausbekommt. $U_{90°}=\frac{62.83cm}{4} = 15.7cm$

Somit ist eine 90°-Drehung des Roboters 15.7cm lang bzw 0.5π im Bogenmaß.

Als nächstes mussten wir den Umfang eines Rades bzw die Länge einer kompletten Radumdrehung berechnen. Hier haben wir dann den ausgemessenen Radius eines Rades (4.5cm) benutzt. $U_{Rad} = 2π * 4.5cm = 28.27cm$

Damit ist der Umfang eines Rades, also eine 360°-Drehung 28.27cm lang. Das muss jetzt auf 1° umgerechnet werden, damit wir danach die Länge für einen Step, der ja 1.8° einer Umdrehung war, ausrechnen können. Also muss 28.27cm durch 360° geteilt werden, damit wir die Länge wir 1° herausbekommen. $U_{1°} = \frac{28.27}{360°} = 0.079cm$

0.079cm muss jetzt mal 1.8 gerechnet werden, da 0.079cm die Länge für 1° ist, aber wir die Länge für 1.8° brauchen. $U_{1.8°} = 0.079cm * 1.8 = 0.1414cm$ = 1 Step

Jetzt teilen wir den Umfang des ganzen Roboters für 90° durch den Umfang für 1.8° eines Rades und bekommen dadurch die Anzahl der benötigten Steps für eine 90°-Drehung des Roboters.

S = Steps für 90°-Drehung / $S = \frac{15.7cm}{0.1414cm} = 111.1111.. = 112 $ = 112 Steps

Somit muss der Roboter 112 Steps machen, damit er eine genaue 90°-Drehung um eines der beiden Räder durchführt.

Wenn man dem Roboter um eine andere Gradzahl drehen lassen will, kann man das jetzt einfacher mit einer Umrechnungszahl tun. Dafür teilt man 112 Steps : 90° und erhält 1.24. Mit dieser Umrechnungszahl, 1.24, kann man jetzt eine beliege Gradzahl nehmen und sie dann in Steps umrechnen.

Technische Daten, Bauteile, Pins, etc.

  • Arduino Nano
  • runde/ovale Holzplatte als „Körper“ des Roboters
  • 2x Stepper-Motoren
  • 3x Ultraschallsensoren
  • 2x Steckbretter
  • 2x pololu a4988
  • 3x Räder (2 an den Stepper-Motoren, 1 „Einkaufswagenrad“)
  • Kabel
  • Kondensatoren
  • (Piezo)
  • LiPo-Akku

Pinbelegungstabelle:

Bauteile Signalfunktion Pinnummer
Ultraschallsensor Trigger 2
Echo 3
Ultraschallsensor Trigger 4
Echo 5
Stepper Motor Driver Rechts Step 7
Stepper Motor Driver Links Step 8
Stepper Motor Driver Rechts Direction 9
Stepper Motor Driver Links Direction 10
Piezo Buzzerpin 11

Ergebnis und Diskussion

Letztendlich haben wir das Projekt mit einem Roboter beendet, der sich um genau 90° drehen kann und ansonsten vorwärts oder rückwärts fahren kann. Außerdem kann er eine Melodie abspielen, und in einem bestimmten Abstand vor einem Hindernis anhalten. Fehlend ist einmal die Schnittstelle, mit der wir dem Roboter die Bewegungsbefehle geben würden, und die Verbindung der einzelnen Quellcodes zu einem einzigen, der funktioniert.

Es gibt für unsere Gruppenarbeit einige Verbesserungsmöglichkeiten, die wir in Zukunft berücksichtigen sollten. Unter anderem sollte sich die Planung und die Zeiteinteilung verbessern, damit wir in der uns gegebenen Zeit effektiv arbeiten können und so zu einem besseren Ergebnis kommen können. Außerdem sollte man vielleicht versuchen, eine Grundlage zu schaffen, mit der man dann weiter arbeiten kann, auch wenn ein Gruppenmitglied ausfällt.

Code und Rohdaten

abgeschlossene_projekte/a_maze_sing.txt · Zuletzt geändert: 2016/06/15 16:38 von c.jaedicke