Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose2016:findobotpublic:start

findoBOT Projektdokumentation

Ein Projekt von André Bertholdt, Lisa Heimburger, Julia Henkel, Tobias Rieper und Anne Wulfhorst.


fibo_oben.jpg
findoBOT

Einleitung

Der Roboter „findoBot“ ortet ein Handy auf dem Boden im Raum, nimmt es auf und bringt es zum Ausgangspunkt zurück. Dazu empfängt findobot ein vom Handy ausgesendetes Audiosignal und bewegt sich durch dessen Analyse in Richtung des Handy. Der Roboter bringt das Handy über denselben Weg zum Startpunkt zurück. Er bewegt sich mit elektromotorbetriebenen Rädern und die Energie dafür sowie auch für den Mikrochip wird von einem Akku bereitgestellt.

Methodik

Ziele

  • findobot soll das Audiosignal anhand von Mikrofonen empfangen und durch die Signalverarbeitung mit einem Mikrochip (Teensy) die Richtung des Handys ermitteln
  • er soll sich auf dem Boden mit elektromotorbetriebenen Rädern auf das Handy zubewegen und es dann mit einer Schiebekonstruktion zum Ausgangspunkt zurückschieben
  • er soll Hindernisse umfahren können (nicht umgesetzt)
  • es soll eine Handyapp entwickelt werden, um das Audiosignal abzuspielen (nicht umgesetzt)

Erwartete Herausforderungen

  • das Audiosignal muss eindeutig erkannt werden, d.h. die richtige Frequenz muss aus den Umgebungsgeräuschen herausgefiltert werden und die Richtung des Handy bestimmt werden
  • die dafür benötigte FFT (Fast Fourier Transformation) ist mathematisch anspruchsvoll
  • Die Ortung muss relativ genau sein, um zu erkenn wann das Handy erreicht ist
  • während der Bewegung können Hindernisse auftreten, die mit Hilfe von Ultraschallsensoren umfahren werden sollten
  • möglichst genaue Umrechnung von Winkeln in Drehbewegung, um das Handy zu erreichen und wieder denselben weg zurückzubringen
  • Speichern des Weges, um den Rückweg bestimmen zu können

Planung

Die Gruppe wurde in zwei Teams eingeteilt, von denen sich eines mit der Konstruktion sowie Motorisierung des Roboters und eines mit der Signalverarbeitung des Audiosignals beschäftigte. In den ersten Arbeitsstunden wurde Recherchearbeit im Internet geleistet, um passende Technik und Codes für die Problemlösung zu finden, ebenso standen die Tutoren beratend bei und gaben technische Empfehlungen. Von den Tutoren kam z.B. der Tipp, dass man die Audiosignale mit Hilfe der Fourier-Transformation verarbeiten kann, um entsprechende Informationen zur Identifikation und für die Ortung des Signals zu bekommen. Ebenso wurde der Teensy-Chip empfohlen, da dieser eine stärkere Rechenleistung als der Arduino aufweist. Bei der Konstruktion des Roboters wurden teilweise Roboter aus den vergangenen Jahren zur Planungsorientierung benutzt. Die gesamten technischen Bestandteile wurden aus dem Bestand des Robotiklabors bezogen.

Umsetzung

Konstruktion

verwendete Bauteile

Bauteil Anzahl
Steppermotor (Polulu) 2
Stepper Motorteiber (Polulu A4988) 2
Rad (d = 9 cm) 2
Stützrad 1
Mikrofon 3
Spannungsregulator (LM-2940) 1
Kondensator (100 μF) 4
Teensy 3.1 (Microcontroller) 1
Akku 8 V 1
Breadboard 2

Zusammenbau

  • Mechanik:

Das Roboter-Grundgerüst besteht aus einer kreisrunden Holzplatte auf deren Unterseite die zwei Steppermotoren, die zwei Räder, das Stützrad und die zwei hölzernen Schiebeleisten befestigt sind. Die Steppermotoren wurden mit Kabelbindern befestigt, das Stützrad und die Leisten mit Schrauben. Steppermotoren sind Elektromotoren, die sich sehr präzise auch um kleine Schritte (steps) bzw. Winkel drehen können, d.h. eine ganze Umdrehung ist in eine modellabhängige Anzahl von steps eingeteilt, durch die man die Räder beliebig genau steuern kann. Durch die zwei seitlichen Räder und das hintere Stützrad ist es möglich, dass findobot sich auf der Stelle drehen kann indem sich beide Räder im oder gegen den Uhrzeigersinn drehen, dadurch ist eine einfache Berechnung des Drehwinkels möglich, wie im nächsten Abschnitt beschrieben wird. Auf der Oberseite der Platte befinden sich die Breadboards inklusive Mikrochips, der Akku und die Mikrofonhalterung mit den 3 Mikros; hier ist alles mit flexiblen Klettklebern befestigt. Die Abstände der Mikrofone wurden so gewählt, dass eine optimale Aufnahme und Analyse der Schallwellen gewährleistet ist.


findoBOT von oben:
fibo_oben_beschriftet.jpg

findoBOT von unten:
fibo_unten_beschriftet.jpg

findoBOT von vorne:
fibo_vorderansicht.jpg

  • Elektronik:

Schaltplan
fibo_schaltplan.jpg

Pinbelegungstabelle

Bauteil Signalfunktion Pinnummer
Stepper Motortreiber links Step 23
Direction 22
Stepper Motortreiber rechts Step 2
Direction 3
Mikrofon links Signal Output 15
Mikrofon vorne Signal Output 14
Mikrofon rechts Signal Output 16


Software

Signalverarbeitung
Das Prinzip der Phasenverschiebung ist das folgende:

$ \Delta s= \Delta s1 - \Delta s2 $

$ \alpha = arccos(\frac{\Delta s}{d}) $

$ \varphi = 90° - \alpha $

$ \Delta ac = proj_{\vec{c} \rightarrow \vec{a}} $

$ \Delta ab = proj_{\vec{b} \rightarrow \vec{a}} $

$ proj_{\vec{b} \rightarrow \vec{a}} |\vec{a}| = proj_{\vec{a} \rightarrow \vec{b}} |\vec{b}| $

$ \leftrightarrow proj_{\vec{a} \rightarrow \vec{b}} = proj_{\vec{b} \rightarrow \vec{a}} \frac{|\vec{a}|}{|\vec{b}|} $

analog: $ \qquad proj_{\vec{a} \rightarrow \vec{c}} = proj_{\vec{c} \rightarrow \vec{a}} \frac{|\vec{a}|}{|\vec{c}|} $


$ tan(\gamma) = \frac{proj_{\vec{a} \rightarrow \vec{b}}}{proj_{\vec{a} \rightarrow \vec{c}}} = \frac{\Delta ab \frac{|\vec{a}|}{|\vec{b}|}}{\Delta ac \frac{|\vec{a}|}{|\vec{c}|}} $

$ |\vec{b}| = |\vec{c}| \leftrightarrow \gamma = arctan(\frac{\Delta ab}{\Delta ac}) $


Der Winkel bei einem Versuchsaufbau mit zwei Mikros leitet sich wie folgt her:

$ sin(x+y)=sin(x)cos(\varphi)+cos(x)sin(\varphi) $

$ \int_{0}^{2\pi} sin(x)sin(x+y)dx $ Skalarprodukt aus Messwerten und Vergleichswerten

$ =\int_{0}^{2\pi} sin^2(x)cos(\varphi)+sin(x)con(x)sin(\varphi)dx $

$ =\pi cos(\varphi) \rightarrow $ Sinusskalarprodukt


$ \int_{0}^{2\pi} cos(x)sin(x+y) dx $

$ =\int_{0}^{2\pi} sin(x)cos(\varphi)+cos^2(x)sin(\varphi)dx $

$ =\pi sin(\varphi) \rightarrow $ Cosinusskalarprodukt


$ \rightarrow \frac{sp_1}{sp_2}=\frac{\pi sin(\varphi)}{\pi cos(\varphi)}=tan(\varphi) $

$ \rightarrow \varphi =arctan2(\frac{cosSP}{sinSP}) $

Bei der Winkelmessung in der Praxis stellten wir leider erst sehr spät fest, dass der Roboter selbst mit seinen Versuchsaufbauten das Messsignal beeinflusste. Das lässt sich deutlich in den durch ein Oszilloskop dargestellten Daten mit möglichst freier Umgebung (erste Abb.) bzw. mit einem Blatt hinter dem rechten Mikroskop (pink). Der Schall kam hierbei von links und wurde damit vom Blatt reflektiert, d. h. die Phasenverschiebung ist verfälscht, weil der Schall länger braucht, bis er vom Mikro eingefangen wird.
Aus diesem Grund mussten wir die Mikros vorlagern vor den Fibo, um Beeinträchtigungen durch die Aufbauten des Roboters zu minimieren.

Bewegung

Die Codes für die Bewegungsprogrammierung werden mit Arduinosoftware in einer vereinfachten Form von C++ geschrieben. Es wird bei diesem Projekt zwar ein „Teensy“-Mikrocontroller verwendet, jedoch ist die Programmierung der Arduinosoftware damit kompatibel. Damit der Roboter aus dem durch die Signalverarbeitung erhaltenen Lagewinkel eine Drehung in Richtung Handy vornehmen kann, muss dem Roboter mitgeteilt werden, wieviele steps die Räder machen müssen, um den Roboter um einen bestimmten Winkel auf der Stelle zu drehen. Dazu muss bekannt sein, aus wievielen steps eine Radumdrehung bzw. aus wievielen steps eine Roboterumdrehung besteht.

  • Kreisdrehung: Bereits im vorigen Kapitel wurde erwähnt, dass sich findobot durch die beiden seitlichen Räder und dem Stützrad auf der Stelle drehen kann, d.h. wenn sich beide Räder im oder gegen den Uhrzeigersinn drehen, so dreht sich der Roboter im Kreis. Da die Daten aus dem technischen Datenblatt der Steppermotoren (0,9°Radumdrehung/step) nicht mit dem beobachteten Drehungsverhalten übereinstimmten oder falsch interpretiert wurden, musste das Team die Werte experimentell ermitteln. Dabei kam man auf einen Wert von 1600 steps/Radumdrehung, wobei eine Radumdrehung (Radumfang=28,3 cm) beider Räder wiederum einer Roboterdrehung von ca. 97° entspricht (Roboterumfang=104,6 cm) und daraus folgt, dass sich der Roboter durch eine Radumdrehung beider Räder von 17 steps um ca. 1° dreht.
  • Vorwärtsbewegung: Bei der Vorwärtsbewegung muss sich ein Rad im und ein Rad gegen den Uhrzeigersinn bewegen und aus dem Radumfang lässt sich ebenso darauf schließen, dass sich der Roboter bei einer Vorwärtsumdrehung beider Räder ca. 28,3 cm weit bewegt.

Der von den Mikrofonen ermittelte Winkel, indem das Handy zum Roboter liegt, ist leider nicht exakt genug, um mit ihm sofort das Handy zu finden. Deshalb bewegt sich der Roboter mit einem festen Winkel von 30° nach rechts oder links. Die Richtung, in der er sich drehen muss, ermittelt er daraus, ob der errechnete Winkel größer gleich Null (hier erfolgt eine Rechtsdrehung) oder kleiner Null (hier folgt eine Linksdrehung) ist. So kann der Roboter die grobe Richtung, in der das Handy liegt, gut finden und fährt dann meistens mit abwechselnden Rechts- und Linksdrehungen quasi geradeaus auf das Handy zu. Da sich der Roboter nicht zu Beginn bereits um einen festen Winkel dreht und dann geradeaus auf das Handy zufährt, haben kleine Mess- oder Rechenungenauigkeiten keinen negativen Einfluss und somit verfehlt der Roboter das Handy nicht. Er ermittelt den Winkel des Handys immer wieder neu und kann es auch noch finden, wenn es den ursprünglichen Platz verlässt und an einem neuen Ort gefunden werden muss.

Damit der findobot auch den Rückweg finden kann, wird jede ausgeführte Bewegung als Zahl in einem Array gespeichert. Um Arbeit zu sparen, wird immer die Zahl für das Gegenteil der gerade ausgeführten Bewegung gespeichert. Sobald der Roboter das Handy dann gefunden hat, kann das Array rückwärts aufgerufen werden. Dadurch fährt der findobot genau den Weg zurück, auf dem er zum Handy gefunden hat und kommt zu seinem Ausgangspunkt zurück. Dies kann der findobot mit dem von den Mirkofonen errechenten Winkeln leider noch nicht, da wir bisher kein aussagekräftiges und immer zutreffendes Kriterium gefunden haben, was eindeutig zeigt, dass das Handy gefunden wurde.

Ergebnisse

Präsentation im Wisschenschaftsfenster

Im Rahmen des Wissenschaftsfensters wurden alle fortgeschrittenen Forschungsergebnisse der MINTgrün-Labore präsentiert. Auch der findoBOT wurde vorgestellt. Die PowerPoint-Präsentation als Download: findobot.pptx

Aktueller Stand

Der findoBOT kann eine Audioquelle auf einer Frequenz von 440Hz eindeutig erkennen, sich in Richtung dieser ausrichten und dorthin fahren. Da die Problematik mit den Mikrofonen erst spät gelöst werden konnte, wurde parallel bereits ein erweitertes Programm geschrieben, dass mit Zufallszahlen diesen Prozess simuliert und anschließend zum Ausgangspunkt zurückfahren kann (er könnte ein Handy einsammeln und zum Besitzer zurückfahren). Da dieses aber noch angepasst werden müsste, gibt es im Anhang zwei Programme. Das andere erfüllt den bereits genannten Zweck, findet aber noch nicht zurück und bewegt sich noch sehr unelegant.

Zielerreichung

Das selbst gesetzte Ziel wurde hinreichend erfüllt. Die Hinderniserkennung und -Umfahrung wird vermutlich nicht mehr im Zeitraum fertiggestellt werden können, dafür aber eine Zusammenführung der bisher zwei Programme zu einem.

Probleme

Große Probleme haben die korrekte Auswertung der Mikrofondaten bereitet, sowie die mutmaßlich falschen Zahlen zur Anzahl der Schritte einer vollen Umdrehung der Räder, die daraufhin nochmal selbst ermittelt werden mussten. Weitere gelöste Schwierigkeiten waren eine effiziente Sammlung der vom findoBOT erzeugten Daten, mit welchen man den Roboter letztendlich zu seinem ursprünglichen Stadort zurückschicken konnte, sowie eine clevere Umgehensweise mit der Geschwindigkeit, sodass der findoBOT nicht beim Losfahren stockte, er aber auch nicht die gesamte Zeit über zu langsam fuhr.

Anhänge

Unser kommentierter Quellcode zum Download: fibo_quellcode.zip

projektesose2016/findobotpublic/start.txt · Zuletzt geändert: 2016/10/27 14:16 von c.jaedicke