Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projekte2014:beerbot:dokumentation

Dokumentation

Was soll der BeerBot können?

Der Roboter kann mithilfe einer Thermalkamera und eines eine kalte Bierflasche im Raum lokalisieren. Er soll sich dann auf die Flasche zubewegen, die Bierflasche einladen und sie anschließend öffnen.
Minimale Anforderung ist, dass der Roboter die Bierflasche in einem „künstlichen“ Raum ohne andere Gegenstände erkennen und einladen kann. Eine mögliche Erweiterung wäre ein Ultraschall-Abstandssensor, mit Hilfe dessen der Roboter auch Hindernissen im Raum erkennen und ihnen ausweichen kann.

Einleitung

Die Idee einen Roboter zu bauen, der Bierflaschen im Raum finden und diese dann öffnen kann, fanden wir aus mehreren Gründen interessant. Unser grundsätzlicher Anspruch an einen Roboter war, dass dieser sich autonom in einem Raum bewegen kann und nach Möglichkeit mit einem Objekt in diesem Raum interagieren kann. Beide Anforderungen werden durch den BeerBot erfüllt, wobei die mechanische Komplexität der Aufgabenstellung relativ groß ist. Ein entscheidender Faktor war auch, dass das Konzept einen recht hohen Unterhaltungsfaktor bietet, sodass die Motivation an dem Projekt zu arbeiten und sich damit zu beschäftigen aufrechterhalten wurde.
Am Anfang hatten wir noch deutlich umfangreichere Vorstellungen davon, was der Roboter können soll. Beispielsweise das Apportieren der Flasche oder das Erkennen und Öffnen verschiedener Flaschentypen. Diese Ideen haben jedoch schon früh als unrealistisch verworfen und haben uns auf ein reduziertes Konzept geeinigt.
Dieses Konzept beschränkt die Erkennung auf künstliche Räume ohne zusätzliche Objekte (also Hindernisse oder andere Kältequellen) und funktioniert nur mit kalten Bierflaschen. Außerdem müssen die Flaschen die Standardform haben (z.B. Sternburg).

Ähnliche Projekte:
http://mil.ufl.edu/5666/papers/IMDL_Report_Spring_02/jean-philippe_clerc/abor.pdf
http://www.dailymotion.com/video/x3thh4_beer_tech

Überblick

Komponenten und Problemfelder

Der Roboter besteht aus verschiedenen Komponenten bzw. Baugruppen, die jeweils zur Lösung einer Teilaufgabe dienen:

Fahrwerk
Ermöglicht dem Roboter sich im Raum zu bewegen.

Schwenkbare Thermalkamera
Dient zur Erkennung der Bierflaschen

Kontaktsensoren
Tastschalter für die Feinausrichtung und zur Überprüfung, ob das Bier eingeladen ist.

Fixierungsmechanismus (Schranken)
Ist notwendig um Öffnungsmechanismus ausrechend Gegendruck zu bieten.

Öffnungmechanismus
Öffnet das Bier mit Hilfe eines Hebels und zwei Hubmagneten

Insgesamt gab es bezogen auf alle Komponenten mehrere Problemfelder, die jeweils unterschiedlich komplex sind:

  • Mechanische Konstruktion (Mechanik und Elektrotechnik)
  • Ansteuerung der Bauteile und Informationsverabeitung (Elektrotechnik und Software)
  • Interaktion mit den anderen Komponenten (Software)

Wie eingangs erwähnt wurden einige Anforderungen schon früh verworfen, da ihr Komplexitätsgrad unsere Möglichkeiten während eines Semesters deutlich überschreitet. Dazu gehört das Öffnen verschiedener Flaschentypen und das Erkennen warmer Flaschen.
Möchte man, dass der Roboter auch nicht kalte Flaschen öffnen kann, so muss die Erkennung der Flasche nach einem anderen Prinzip funktionieren. Eine Erkennung mit einer „normalen“ optischen Kamera wäre hier denkbar. Dies erfordert aber sowohl sehr komplizierte Algorithmen als auch mehr Rechenleistung, weshalb dies für uns nicht in Frage kam.
Soll der Roboter auch andere, spezielle Flaschentypen öffnen, dann muss die Öffnungsmechanik noch einmal komplett neu konzipiert werden. Die mechanischen Anforderungen sind jedoch bereits bei einem Flaschentyp relativ groß und würden bei einer flexibelen Lösung noch deutlich größer. Dementsprechend haben wir auch darauf verzichtet.
Vergleichsweise einfach ist zu realisieren, dass der Roboter (nicht kalten) Hindernissen im Raum ausweichen kann. Ein Ansatz für eine Lösung mit Hilfe eines Ultraschallsensors ist im Code auch schon enthalten und auch auf der Platine sind schon die entsprechenden Anschlüsse vorhanden. Jedoch hatten wir zum Ende des Projekts leider nicht mehr ausreichend Zeit, um diese Funktion noch mit einzubauen und auszutesten.

Darstellung des Programmablaufs

Zustandsdiagramm

Das Diagramm gibt einen Überblick über die verschiedenen Phasen, die der Roboter durchläuft und welche Bedingungen erfüllt sein müssen, damit der Roboter in die verschiedenen Phasen wechselt. Wenn keine Übergangsbedingung angegeben ist findet zwischen den Prozessschritten entweder keine Entscheidung statt, oder es handelt sich um den Übergang, der ausgeführt wird, wenn keine der anderen Bedingungen zutrifft.

Interessant sind vor allem die ersten drei Phasen. Genauerer Erläuterung bedarf vor allem Phase 3. In Phase 3 findet die Feinannäherung an die Flasche statt, sobald diese entweder aus dem Blickfeld der Thermalkamera verschwunden ist (weil der Roboter zu nah an die Flasche herangefahren ist und sie sich im toten Winkel befindet) oder die Flasche einen der beiden unteren Kontaktsensoren berührt. Eigentlich sollten dies zwei getrennte Phasen sein. Da jedoch die Kontaktsensoren nicht korrekt ausgewertet werden, funktioniert die darauf basierte Feinjustierung (siehe „adjustPosition()“ Funktion im Main Sketch des Quellcodes) nicht. Die jetzt verwendete Methode ist nur ein Workaround, der natürlich nicht gleichwertig präzise funktioniert.

Detailbeschreibung der einzelnen Systembestandteile

Bewegung im Raum: Fahrwerk

Der Roboter wird von zwei Stepper Motoren (SY42STH47-1206A) angetrieben. Aus Gründen der Stabilisation ist am hinteren Teil des Gehäuses ein Stützrad befestigt, dass um 360° geschwenkt werden kann. Mithilfe zweier Stepper Motor Drivers (A4988) können die beiden Motoren sehr einfach über jeweils zwei digitale Pins des Arduinos (bzw. Teensys) angesteuert werden. Dabei gibt es einen „Richtungs-Pin“ und einen „Schritt-Pin“. Der „Schritt-Pin“ hat zwei Zustände (HIGH und LOW), für Vorwärts und Rückwärts, die bei dem jeweiligen Bewegungsschritt ausgewählt werden. Wenn der „Schritt-Pin“ mit einem kurzen Spannungspuls (mindestens 1 µs) angesteuert wird, mach der Motor einen Schritt. Die Motoren werden bei diesem Projekt ausschließlich im „Full-Step-Mode“ betrieben, bei dem die Länge eines Schrittes 1,8° beträgt. Zweihundert Schritte sind also eine ganze Umdrehung der Räder. Um möglichst präzise Drehungen durchführen zu können wurde der Radabstand sowie der Raddurchmesser gemessen. So kann die Strecke berechnet werden, die mit einem Schritt des Motors (1,8°) zurückgelegt wird.

Um die Annäherung an eine Flasche zu realisieren, wird die „Blickrichtung“ des Roboters an die, mit der Thermalkamera gefundenen, Position der Flasche angepasst. Wurde eine Flasche nach einem „Sweep“ der Thermalkamera gefunden, dreht sich der Roboter um einen kleinen Winkel in die Richtung der Flasche. Daraufhin fährt er eine kleine Strecke geradeaus und der „Sweep“ wird wiederholt. Wird hier keine Flasche gefunden, dreht sich der Beerbot kleinschrittig zu der letzten gefundenen Position und wiederholt den „Sweep“ nach jeder Drehung (s. Zustandsdiagramm). Im Idealfall befindet sich die Flasche nach einigen Wiederholungen geradeaus vor dem Roboter und kann einfach eingefahren werden.


Thermalkamera: Erkennung der Bierflasche

Die Bierflasche wird anhand ihrer kalten Temperatur von einer Thermalkamera (Melexis90620) erkannt. Diese ist auf einem Servo befestigt und schwenkt beim Fahren umher, um einen möglichst breiten Bereich abdecken zu können. Der Servo ist wiederum über dem Flaschenturm befestigt, dem vordersten Teil des Roboters. Die Thermalkamera zeichnet Temperaturen eines rechteckiges Feldes in einem 16×4-Pixelarray auf. Sie deckt einen Winkelbereich von 60° horizontal und 16,4° vertikal ab.

Wir entschieden uns für eine Thermalkamera, da so eine eindeutige, einfache Erkennung der Flasche ermöglicht werden konnte. Alternativen wie eine optische Kamera oder ein Ultraschallsensor schlossen wir wegen des Aufwands aus. Unsere Thermalkamera wurde über die i²c-Bibliothek (Link) und die von Felix eigens geschriebene teensy3_Melexis90620.h-Bibliothek (Link) angesteuert.

Die Thermalkamera wirkt in zwei Phasen mit: In der Suchphase (Phase 1) und in der Phase des Grobausrichtens und Daraufzufahrens (Phase 2).

Ausformuliert steht in unserem Quellcode Folgendes:

Phase 1:

Die Thermalkamera schwenkt auf dem Servo halbkreisförmig hin und zurück. Je nach Einstellung werden nach x° alle Temperaturen der 64 Pixel abgefragt. Wenn eine Temperatur innerhalb der zwei mittleren Reihen unter der von uns gewählten Grenze liegt, wird Phase 2 eingeleitet. Wir fragen nur die zwei mittleren Reihen ab, damit die Position (Winkel) des Servos mit der Position der Flasche übereinstimmt.

Phase 2:

Die Thermalkamera schwenkt wieder. Wenn eine kalte Quelle gefunden wird, wird der Winkel an das Fahrwerk übergeben, was dann über die Bewegung entscheidet (rechts, links, geradeaus). Nach jeder Bewegung wird dieser Vorgang wiederholt bis die kalte Flasche sich nicht mehr im Blickfeld der Thermalkamera und direkt vor dem Roboter befindet. Dann wird Phase 3 eingeleitet (Feinausrichtung).

Wir haben als Messgrenze den Wert 19 gewählt, jedoch muss man den Wert von der Wärme der Flasche abhängig machen, da sonst die Erkennung nicht mehr oder nur eingeschränkt funktioniert. Messdaten die dieses Wert unterschreiten, sind in den Abbildungen grün umrandet. Wenn keine Flasche im Blickfeld ist, können Messdaten so aussehen:

Wenn eine Flasche im Blickfeld ist, können Messdaten so aussehen:


Kontaktsensoren

Es wurden vier Taster bei dem Roboter verwendet. Ein Paar ist im oberen Teil des Flaschenturms bei dem Öffnungsmechanismus angebracht, sodass sie gedrückt werden wenn ein Bier erfolgreich eingeladen wurde. Des Weiteren wurde an die Blätter des Tasterpaars ein offener Stromkreis gelötet, welcher geschlossen wird sobald sich ein leitender Kronkorken dazwischen befindet. So wird geprüft, ob das eingeladene Bier bereits geöffnet wurde. Ein weiteres Paar ist unten links und rechts von dem Flaschenturm befestigt. Diese sollen dienen zur Kurskorrektur bei dem Einladen der Flasche. Wenn einer der beiden gedrückt wird soll der Roboter sich ein wenig in die entgegengesetzte Richtung drehen um eine Umstoßen der Flasche zu vermeiden.

Es kam zu einigen Komplikationen bei der Nutzung der verbauten Kontaktsensoren. Wenn der Roboter im Prozess des Einladens der Flasche mit einem der Sensoren gegen die Flasche fährt, geben jeweils beide Sensoren eines Paares den Status HIGH zurück. Die Ursache dieses Problems haben wir nicht herausgefunden. Es ist jedoch nur für das untere Paar relevant. Das untere Paar wird derzeit nur dazu verwendet, um zu überprüfen, ob der Roboter die Flasche bereits erreicht hat und nicht zur Feinausrichtung. Bei dem Oberen Sensoren Paar ist das Problem irrelevant, da diese von vornerein beide gedrückt werden.


Fixierungsmechanismus

Der Fixierungsmechanismus (Phase 4) wird durch zwei Druckschalter und zwei Schranken, welche mit zwei Servos bedient werden, realisiert.

Die Druckschalter geben ein Signal wenn sie gedrückt werden. Wenn die Flasche vollständig im Flaschenturm steht, betätigt der Flaschenkopf die Druckschalter. Das Signal der Schalter veranlasst die Servos sich in die Position zu drehen, in der die Schranken geschlossen sind. Wenn dies geschehen ist, wird Phase 5 eingeleitet. Die obere Schranke mehrmals geöffnet und geschlossen, da sie sich beim ersten Mal häufig verhakt. Durch mehrmaliges Schließen wird die Flasche noch ein Stück weiter in den Flaschenbehälter hineingeschoben, sodass sich die Schranke dann schließen kann.


Öffnungsmechanismus

Der Öffnungsmechanismus (Phase 5) wird mit einem Flaschenöffner, welcher an einem Hebel befestigt ist, und zwei „Pushern“, welche den Hebel betätigen, realisiert.

Die zeitgleich betätigten Pusher drücken den Hebel an dem langen Ende schlagartig hinunter. Das führt zu einer hohen Hebelwirkung und das kurze Ende mit dem Flaschenöffner verfügt über genügend Kraft den Kronkorken von der Flasche zu schlagen.

Mithilfe des Datenblattes der Pusher (ZMF-2551d.002) wurde die maximal am kurzen Arm wirkende Kraft berechnet. Die gemachten Erfahrungen mit den Pushern ergeben, dass die wirkende Kraft maximal ist, wenn diese weit ausgefahren sind. Die wird unterstützt durch die Physik eines Eisenkerns in einer Spule. Es befindet sich ein größerer Teil des Eisenkernes in der Spule, wenn der Pusher weiter ausgefahren ist. Das Datenblatt suggeriert jedoch das entgegengesetzte. Aufgrund dieses Missverständnisses wurde das Kraft-Weg Diagramm des Datenblatts auf zwei verschiedene Arten ausgewertet. Also wurden zwei Ergebnisse für die Wirkende Kraft berechnet. Die Formel des Hebelgesetzes wurde verwendet um die am kurzen Arm wirkende Kraft $F_2$ zu berechnen:

${F_2} = \frac{r_1 \ \times \ F_1}{r_2}$

Die hier verwendeten Werte sind in der obigen Skizze eingezeichnet.

Für Pusher 1 (s. Skizze) wurden folgende Werte berechnet:

Wenn davon ausgegangen wird, dass die Kraft des Pushers zunimmt je weiter er ausgefahren ist (Erfahrungswert), ergibt sich folgendes Ergebnis für die am kurzen Arm wirkende Kraft:

${F_2} = \frac{0,08\ m\ \times \ 42\ N}{0,04\ m} \ \approx 84 \ N$

Wenn das Kraft-Weg Diagramm des Datenblatts so ausgelesen wird, wie es den Anschein erweckt:

${F_2} = \frac{0,08\ m\ \times \ 3\ N}{0,04\ m} \ \approx 10,8 \ N$

Für Pusher 2 ergeben sich die Werte:

Nach den gemachten Erfahrungen:

${F'_2} = \frac{0,13\ m\ \times \ 30\ N}{0,04\ m} \ \approx 97,5 \ N$

Und nach der anderen Auswertung des Datenblatts:

${F'_2} = \frac{0,13\ m\ \times \ 5\ N}{0,04\ m} \ \approx 32,5 \ N$

Bei den Ergebnissen handelt es sich um eine grobe Hochrechnung. Eine präzise berechnung der Gesamtkraft ist komplexer. Es soll mit diesen Berechnungen jedoch lediglich eine einfache Darstellung geliefert werden.

Hardwaredokumentation

Grundkonstruktion

Konstruktionsskizzen

Ansicht von der Seite Ansicht von vorne Ansicht von oben

Schaltplan

Materialliste

Bauteil Anzahl
Rad (d = 9 cm) 2
Stützrad 1
Stepper Motor (SY42STH47-1206A) 2
Thermalkamera (Melexis MLX90620) 1
Servo 3
Pusher/Hubmagneten (ZMF-2551d.002) 2
Tastsensoren 4
Stepper Motor Driver (A4988) 2
Relaiscontroller 1
Platine 1
Teensy 3.0 Microcontroller 1
LiPo-Akku 14,6V 1
LiPo-Akku 8V
Diverse Elektronische Bauteile (s. Schaltplan)
Für den Bau des Gehäuses
Holz
Schrauben
Muttern
Gewindestangen

Pinbelegungstabelle

In der folgenden Tabelle ist aufgelistet, welche Signalleitung welches Bauteils an an welchen Pin des Teensy angeschlossen sind.

Bauteil Signalfunktion Pinnummer
Ultraschallsensor (nicht verbaut) Trigger 0
Echo 1
Stepper Motor Driver links Direction 2
Step 3
Stepper Motor Driver rechts Direction 4
Step 5
Taster oben rechts 6
Taster oben links 7
Taster unten links 8
Stromfluss zwischen Taster oben links und oben rechts 9
Servo Ultraschallsensor (nicht verbaut) PWM 11
Servo Schranke unten PWM 12
Servo Schranke oben PWM 13
Servo Thermalkamera PWM 14
Taster unten rechts 15
Thermalkamera SDA Digital Input/Output 18
Thermalkamera SLC Serial Clock Input 19

Alle Pins werden als Digitalpins verwendet.
Die Thermalkamera muss an Pin 18 und Pin 19 angeschlossen werden, da dies die I²C Pins des Teensy sind.

Software

Eigener Quellcode

3rd party libraries

i2c_t3

teensy3_Melexis90620

Library to control the Melexis90620 thermal camera

https://github.com/Zapalot/teensy3_Melexis90620

NewPing

Library for improved usage of an ultrasonic distance sensor with a Teensy.

https://github.com/PaulStoffregen/NewPing

Einrichten des Roboters

Damit der Beerbot Einsatzbereit ist werden zuerst die drei Akkus angeschlossen. Ein 14,8 V Akku für das Fahrwerk, ein 7,8 V Akku für den Teensy und ein weiterer 7,8 V Akku für die beiden Pusher. Die Software wird auf den Teensy geladen und der Funktionsaufruf der „main1()“ Funktion wird in die „loop()“ Funktion geschrieben.

Ergebnis und Diskussion

Das gesetzte Ziel des Projekts war einen Roboter zu bauen, der in einem barrierefreien Testraum ein kühles Bier aufspüren kann und dieses dann öffnet. Nun ist es zum jetzigen Zeitpunkt gelungen, dass der Roboter ein kühles Bier finden und einladen kann. Es gibt jedoch mehrere Möglichkeiten der Optimierung. Zum einen bedarf es einer Verbesserung des Algorithmus, außerdem ist die Erkennung der Thermalkamera nicht vollständig zuverlässig.

Aufgrund des Zeitmangels konnten wir keine systematischen Tests durchführen. So war es uns nicht möglich die Probleme weiter zu isolieren und festzustellen unter welchen Bedingungen der Prozess erfolgreich abläuft. Um die Genauigkeit des Fahrwerks zu erhöhen gibt es die Möglichkeit die Schrittweite der Motoren an den Stepper Motor Drivern zu verändern (Halb-, Viertel-, Achtel- und Sechszehntel-Schritt).

Bei dem Öffnungsmechanismus sind auch zum Ende noch Probleme vorhanden. Der Weg auf dem die Pusher Kraft auf den Hebel ausüben scheint zu kurz zu sein. Eine verschlossene Flasche wird noch nicht konsistent geöffnet. Es gelingt zum Teil bei mehreren Versuchen. Eine Verlängerung des Kraftweges der Pusher sowie eine Optimierung und Stabilisation des Öffnungsmechanismus könnte zu einer Lösung dieser Probleme führen. Außerdem sind die Schranken, die das Bier feststellen, nicht ohne Fehler. Diese könnten also in Richtung eines engeren Einschließens der Flasche optimiert werden.

Eine weitere Möglichkeit wäre eine Alternative Lösung zum Öffnen der Flasche, beispielsweise mithilfe einer Feder die von einem Motor langsam gespannt wird und zum Öffnen schnell entspannt wird.

Abschlusspräsentation

Unsere Abschlusspräsentation für das Semesterprojekt: beerbot.ppt

projekte2014/beerbot/dokumentation.txt · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)