Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
projekte2014:menscheninteraktionsgeraet [2014/08/16 17:30] zeitlos |
projekte2014:menscheninteraktionsgeraet [2016/01/21 12:45] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | <note tip>Hier scheint nichts passiert zu sein - da müsst ihr echt nochmal ranklotzen! (Felix)</note> | + | ====== Trinkspiel-Bot ====== |
- | {{:projekte2014:menscheninteraktionsgeraet:abschlussbericht.pdf|}} | + | |
- | ====== Roboter, der mit Menschen Interagiert ====== | + | |
**Einleitung** | **Einleitung** | ||
Zeile 24: | Zeile 22: | ||
**Umsetzung** | **Umsetzung** | ||
- | - Einführung | + | |
+ | |||
+ | 1.) Einführung | ||
Für unsere Idee verwenden wir die Kinect Kamera und ein im Labor vorhandenes fahrbares Gestell. | Für unsere Idee verwenden wir die Kinect Kamera und ein im Labor vorhandenes fahrbares Gestell. | ||
Zeile 31: | Zeile 31: | ||
Um den Code zu verstehen, war es zuerst nötig diesen zu analysieren. | Um den Code zu verstehen, war es zuerst nötig diesen zu analysieren. | ||
- | - Personenerkennung/Kommunikation | + | 2.) Personenerkennung/Kommunikation |
Für die Personenerkennung verwenden wir die Bibliothek SimpleOnenNI. Der Code trackt bereits eine Person und gibt diese anschließend auf dem Bildschirm des Notebooks aus. Der Code kann das Skelett einer Person erkennen und anschließend einen Mittelpunkt des menschlichen Körpers erzeugen. | Für die Personenerkennung verwenden wir die Bibliothek SimpleOnenNI. Der Code trackt bereits eine Person und gibt diese anschließend auf dem Bildschirm des Notebooks aus. Der Code kann das Skelett einer Person erkennen und anschließend einen Mittelpunkt des menschlichen Körpers erzeugen. | ||
Zeile 37: | Zeile 37: | ||
Es ist somit nötig, dass eine Kommunikation zwischen dem Arduino und dem Processing Programm konfiguriert wird. Damit sich unser Konstrukt zu einer Person hinbewegen kann, senden wir vom Processing Programm die Koordinaten des Mittelpunktes an den Arduino,welcher wiederum die erhaltenen Daten so verarbeitet, dass das Fahrgestell sich zu der Per- son fortbewegen kann. Aufgrund des kartesischen Koordinatensystems der Kinect, können wir den Winkel berechnen und diesen zusammen mit der Distanz an den Arduino senden. | Es ist somit nötig, dass eine Kommunikation zwischen dem Arduino und dem Processing Programm konfiguriert wird. Damit sich unser Konstrukt zu einer Person hinbewegen kann, senden wir vom Processing Programm die Koordinaten des Mittelpunktes an den Arduino,welcher wiederum die erhaltenen Daten so verarbeitet, dass das Fahrgestell sich zu der Per- son fortbewegen kann. Aufgrund des kartesischen Koordinatensystems der Kinect, können wir den Winkel berechnen und diesen zusammen mit der Distanz an den Arduino senden. | ||
+ | {{ :projekte2014:kinect_system.png?200 |}} | ||
+ | In der oberen Abbildung ist das Koordinatensystem nochmals veranschaulicht. | ||
+ | Für die serielle Schnittstelle haben wir bereits ein Beispiel auf der Mint Wiki-Seite, was die benötigte Kommunikation aufbaut. | ||
+ | Es wird ArduPar auf dem Arduino installiert und anschließend das Code-Beispiel so verändert, dass die Koordinaten empfangen werden können. | ||
+ | Dazu erzeugt man ein Objekt des Typs ArduPar und verwendet die write Methode, die dann das Objekt auf den Port schreibt. Das Objekt beinhaltet dabei z. B. den gewüschten Wert. | ||
+ | Das Objekt kann dann vom Arduino mit der read Methode gelesen werden. | ||
- | Projektstrukturplan | + | 3.) Personenerkennung/Kommunikation |
- | + | | |
- | * Roboter * Aufbau * Befestigung/Installation * Laptop, Kinect, Taster, Arduino | + | 3.1) Motorsteuerung |
- | * Hardware * Verbindung Arduino mit Motoren, Kinect, Laptop | + | |
- | | + | Für die Fortbewegung wird ein 9 V Akku benutzt. Um das Gestell mit den Motoren anzu- steuern, wurde dafür wieder eine Bibliothek von der Wiki-Seite benutzt. Die Steuerung der Motoren erfolgt über den TReX. Dieser reguliert die Stromzufuhr des Akkus an die Motoren, um die Drehzahl zu beeeinflussen. Der TReX kommuniziert mit dem Arduino Uno über UART. In der unteren Abbildung ist die benötigte Verbindung zwischen Arduino und TReX dargestellt. |
- | * Erkennung von Menschen * Kinect * Ansteuerung von Kinect | + | |
- | + | ||
- | * Hinfahren * Wegberechung * Programmierung mit Processing | + | |
- | * Datenverarbeitung von Kinect | + | |
- | * Wegfindung * Programmierung mit Processing | + | |
- | * Ansteuerung der Motoren | + | |
- | * Reaktion auf Taster | + | |
- | + | ||
- | * Interaktion mit Menschen * Ansprechen von Menschen * Tonausgabe/Textausgabe | + | |
- | * Startbildschirm/Quiz/Pong* Programmierung des Startbildschirm | + | |
- | * Programmierung des Quiz * Single-/Multiplayer | + | |
- | * Programmierung von Pong * Single-/Multiplayer | + | |
- | + | ||
- | * Belohnung * Ausgabe des Shots * Mechanisch ansteuerbare Halterung einer Flasche | + | |
- | * Programmierung der Halterung | + | |
- | **Risikoanalyse** | + | {{ :projekte2014:trex.png?200 |}} |
- | *keine Erkennung von Menschen von Kinect | + | Die verwendeten Pins vom Arduino sind D12 und D13, da neben der 13 sich GND befindet |
- | *keine Wegfindung | + | und mit einem 3 Pin-Kabel beides sich leicht verbinden lässt, wie in der weiteren Abbildung verdeutlicht: |
- | *Konsequenz -> Scheiterung des Projekts | + | |
- | * Belohung | + | {{ :projekte2014:trex_und_arduino.jpg?200 |}} |
- | * Keine Ausgabe von Shots | + | |
- | * Konsequenz -> eingeschränkte Belohnung | + | |
- | * Plan B: Erzeugung von Melodie, nach Interaktion | + | |
- | * Gehäuse | + | Da bereits eine Bibliothek vorhanden ist, können wir die vorgegebenen Methoden, die einen Parameter für die Intensität erhalten, verwenden, um vorwärts, rückwärts, rechts oder links zu fahren. |
- | * Zeitfaktor fürs Gehäuse | + | Es gibt 2 Möglichkeiten, damit sich das Gerät nach rechts oder links hinbewegt. Zu Beginn haben wir die rechte und linke Seite entgegengesetzt drehen lassen. So rotiert das Gestell auf einem Punkt entweder nach rechts oder links. Danach bewegt sich das Gerät vorwärts. Aufgrund aber der schlechten Handhabung, der Instabilität des Kamera-Trackings und von Vibrationen, wurden Funktionen geschrieben, die das Gerät Kurven fahren lässt, um diese Probleme zu umgehen. |
- | * Gewichtverteilung/Gleichgewicht | + | |
- | * Konsequenz -> kein schönes Gehäuse | + | |
- | * Plan B: einfaches Gehäuse | + | |
- | * fortgeschrittene Wegfindung | + | 3.2) Bewegung in Abhängigkeit des Winkels |
- | * Konsequenz -> keine optimale Wegfindung | + | |
- | * Plan B: Präsentation vom Projekt im leeren Raum | + | |
+ | {{ :projekte2014:winkel.png?200 |}} | ||
- | **Zeitplan** | + | Dieses Bild soll verdeutlichen wie der Roboter zu seinem Ziel kommt. Es ist eine Draufsicht auf die Kinect Kamera bzw. dem ganzen Roboter. Durch die Mitte der Kamera legt Processing ein kartesisches Koordinatensystem. Wenn Kinect eine Person erkennt kann Processing den Anteil auf der z- bzw. x-Achse ausgeben. Diese beiden Informationen und der rechte Winkel reichen aus, um den Winkel Gamma zu berechnen. Umso größer dieser Winkel ist ums so mehr Geschwindigkeit wird auf die linken bzw. rechten Motoren aufaddiert. Diese Rechnung wird immer wieder ausgeführt, sodass der Winkel immer kleiner und die Geschwindigkeit immer niedriger wird, bis der Roboter im besten Fall sein Ziel mit einem Winkel von 0° erreicht. |
- | * 1. Woche: Installation von Software(für Kinect)/Einarbeitung in Kinect | + | 4.) Gehäuse |
- | * 2. Woche: "Erkennung von Menschen" programmieren/Ansteuerung von Motoren | + | |
- | * 3. Woche: Verknüpfung von Kinect und Motorsteuerung | + | |
- | * 4. Woche: Optimierung vom Code (Unterscheidung von mehreren Menschen) | + | |
- | * 5. Woche: Programmierung von Pong und Quiz/Kommunikation zwischen PC und µC | + | |
- | * 6./7. Woche: Planung und Aufbau von Belohnungseinheit | + | |
- | * 8. Woche: Planung und Aufbau vom Gehäuse | + | |
+ | Damit sich der Roboter im Raum frei bewegen kann, schrauben wir auf der gelochten Metall- platte des fahrbahren Untersatz 3 Holzstäbe von ungefähr 80 cm Höhe, um eine angenehme Höhe für den Benutzer zu erreichen. Auf diesen 3 Stäbe wurde eine dünne Holzplatte von 30 cm x 30 cm Fläche angebracht, auf dem sich der Laptop befinden wird. Für die Kamera wird ebenfalls ein Holzstab von 35 cm Höhe angeschraubt, worauf dann die Kamera befestigt wird. Da bei dieser Konstruktion der Roboter leicht nach rechts oder links kippen kann, wurden Stützräder, rechts, links und hinten angebracht. Die Konstruktion ist in den unteren beiden Abbildungen zu sehen. | ||
- | **Das Zustandsautomatendiagramm unseres Roboters:** | + | {{ :projekte2014:trinkbot.jpg?200 |}} |
+ | {{ :projekte2014:stuetzraeder.jpg?200 |}} | ||
- | {{:projekte2014:zustaende.png?500 |}} | + | Der Holzstab für die Kamera wurde nochmals an die Platte befestigt, indem rechts und links Holzblöcke angebracht und miteinaner mit Schrauben verbunden wurden, um das Schwanken zu reduzieren. |
+ | Die Kamera wurde fest an den Holzstab getapet, damit die Konstruktion stabiler wird. | ||
+ | {{ :projekte2014:kinect_tape.jpg?200 |}} | ||
+ | |||
+ | Mit dieser Konstruktion entstand ein robustes Gehäuse. Um aber das Schwanken der Kamera zu reduzieren, damit das Tracking besser funktioniert, wurden funktionen geschrieben, die ein langsames Anfahren und leichtes bremsen ermöglichen. | ||
+ | |||
+ | 5.) Elektronik | ||
+ | |||
+ | 5.1) Schalter | ||
+ | |||
+ | Wir haben einen Schalter eingebaut, damit die Stromzufuhr vom Akku zu dem TReX, der die Stromstärke regelt, getrennt werden kann. Einen Vorteil hat dies, dass falls das Gerät in die falsche Richtung fährt, es einfach ausgeschaltet werden kann. | ||
+ | Der Schaltplan dazu: | ||
+ | |||
+ | {{ :projekte2014:schalter.png?200 |}} | ||
+ | |||
+ | Man muss das Kabel zwischen dem Akku und dem TRex durchtrennen und dort einen Schalter an den durchtrennten Kabelenden anlöten, der beim Betätigen den Stromkreis wieder schließt. Der Schalter wurde oben auf der Platte angebracht: | ||
+ | |||
+ | {{ :projekte2014:fancy_schalter.jpg?200 |}} | ||
+ | |||
+ | 5.2) Akkuversorgung für die Kinect Kamera | ||
+ | |||
+ | Die Kinect Kamera benötigt eine 12 V Versorgung, die sonst über eine Steckdose erfolgt. Da aber unser Gerät mobil unterwegs ist, ist es nötig dafür einen Akku zu benutzen. Im Labor sind nur 9 V Akkus vorhanden, weshalb eine Schaltung benötigt wird, die die Spannung auf 12 V erhöhen kann. Dafür wird ein Hochsetzsteller verwendet. Der Schaltplan dazu verdeutlicht die benötigte Schaltung: | ||
+ | |||
+ | {{ :projekte2014:hochsetzsteller.png?200 |}} | ||
+ | |||
+ | Der Hochsetzer erhöht die 9 V, indem die Spule, die ein Stromspeicher ist, den Kondensator auflädt, bis die 12 V erreicht sind. Die Diode sperrt den Strom in Richtung Spule, sodass die Entladung nur am Widerstand erfolgt. Der Schalter, der einen Transistor darstellt, schließt sich, sobald der Spannungswert am Kondensator sinkt, damit dieser wieder seine 12 V Span- nung hat. Wenn der Transistor geschlossen ist, kann sich der Kondensator entladen, da der Strom von der Spule zur Masse fließt. So entsteht ein Spannungs-Rippel am Kondensator, der so gering ist, dass man von einer Gleichspannung ausgehen kann. | ||
+ | |||
+ | Das Kabel wird durchgeschnitten und anschließend an einem männlichen Stecker angelötet. | ||
+ | |||
+ | {{ :projekte2014:kabel.png?200 |}} | ||
+ | |||
+ | Das weiße Ende wird an den Schirm vom Stecker angelötet, das rote wird mit der Mitte des Steckers verbunden. | ||
+ | |||
+ | {{ :projekte2014:hochsetzsteller.jpg?200 |}} | ||
+ | |||
+ | Unser Hochsetzsteller in der oberen Abbildung hat 3 Anschlüsse. Die schwarze Verbindung ist für Masse, rot für die Eingangsspannung und gelb für die Ausgangsspannung. Bevor die Verbindungen gemacht werden, muss der Hochsetzsteller mit einem Potentiometer auf 12 V Ausgangsspan- nung eingestellt werden. Hierbei wird die Eingangsspannung mithilfe einer Spannungsquelle auf 3V gesetzt und anschließend mit einem Multimeter die Ausgangsspannung gemessen. Am Potentiometer wird so lange gedreht, bis man die 12 V erreicht hat. | ||
+ | |||
+ | Das schwarze Ende vom weiblichen Steckerkabel wird mit der Masse vom Hochsetzsteller verbunden, ebenfalls der Minus Anschluss vom Akku. Der Pluspol von der Batterie kommt an den Eingang des Hochsetzstellers. Die Ausgangsspannung wird wieder mit der Mitte des weiblichen Steckers verbunden. Somit können beide Stecker miteinander verbunden werden und es liegen 12 V an der Kinect Kamera an. | ||
+ | |||
+ | {{ :projekte2014:akku_stecker.jpg?200 |}} | ||
+ | |||
+ | So kann dann das andere Ende des weiblichen Stecker mit dem Akku verbunden werden. | ||
+ | |||
+ | {{ :projekte2014:akku.jpg?200 |}} | ||
+ | |||
+ | Mit diesem Aufbau kann sich unser Roboter mobil im Raum fortbewegen. | ||
+ | |||
+ | 6) Pong | ||
+ | |||
+ | Um einen Indikator dafür zu haben wer die Belohnung bekommt oder ob überhaupt eine Belohnung ausgegeben werden darf, entschieden wir uns das Spiel Pong in Processing zu implementieren. Bevor das eigentliche Spiel startet, ist es möglich aus zwei verschiedenen Darstellungsarten zu wählen. Im nächsten Bild wird kurz die Steuerung erklärt dann wird ge- spielt. Im Game Over Bildschirm wird letztendlich der Gewinner festgelegt. Um ein Spiel bzw. um Animation darstellen zu können ist es nötig aufeinanderfolgende Frames zu berechnen. Einen Rahmen dafür gibt die Draw-Funktion von Processing. Für jedes neue Bild müssen die Parameter des Balls bzw. der Pongschläger neu berechnet und dargestellt werden. Damit die Kollision zwischen Ball und Schläger stimmt müssen Außerdem Hitboxen festgelegt werden. Um das Spiel noch etwas interessanter zu gestalten wird die Geschwindigkeit des Balls von Zeit zu Zeit erhöht und je nach Spieldarstellung auch die Größe des Balls. | ||
+ | |||
+ | **Ergebnis** | ||
+ | |||
+ | Wir haben es geschafft einen Roboter zu bauen, der ein stabiles Gehäuse hat und in der Lage ist, Menschen zu erkennen und zu diesen hinzufahren. Nachdem dies ausgeführt wurde, startet ein Menü, wo man Pong auswählen kann. Nachdem man gespielt hat, wird angezeigt, ob man gewonnen oder verloren hat. | ||
+ | Uns ist es jedoch nicht gelungen danach ein Belohnungssystem zu bauen, dass z. B. ein Ge- tränk bereitstellt. Zudem müsste noch ein System entwickelt werden, dass Objekte erkennt und diese umfährt. Beides ist machbar, leider haben wir es in der vorgegebenen Zeit nicht geschafft, aufgrund von Problemen mit dem fahrbahren Untersatz, da die erste Vorgehens- weise der Bewegungssteuerung zwar funktionierte, jedoch mit erheblichen Komplikationen. Außerdem nahm es viel Zeit in Ansprch einen neu geschriebenen Code zu testen, da jedesmal compiliert und hochgeladen werden musste. | ||
+ | |||
+ | Der Abschlussbericht ist ebenfalls als PDF Datei vorhanden, worin sich das Quellenverzeichnis und kommentierter Code befindet. | ||
+ | |||
+ | {{:projekte2014:menscheninteraktionsgeraet:abschlussbericht.pdf|}} | ||
- | unser Code bis jetzt: | + | {{:projekte2014:menscheninteraktionsgeraet:code.zip|}} |
- | {{:projekte2014:menscheninteraktinsroboter_code.zip|{{:projekte2014:menscheninteraktinsroboter_code.zip|}}}} | + |