Projekt 15: Gestenerkennung der Kinect zur Ansteuerung von LED, Servos u.s.w.: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
[[Datei:Xbox-One-Kinect.jpg|thumb|right|500px|Kinect V2]]
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2017|WS 17/18: Fachpraktikum Elektrotechnik (MTR)]]
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2017|WS 17/18: Fachpraktikum Elektrotechnik (MTR)]]



Version vom 16. Januar 2018, 18:06 Uhr

Kinect V2

→ zurück zur Übersicht: WS 17/18: Fachpraktikum Elektrotechnik (MTR)


In Bearbeitung

Autoren: Torben Müller,Jerome Wolf

Professor: Prof. Dr. Mirek Göbel

Einleitung

Dieser Wiki Artikel behandelt das Projekt 15 Gestensteuerung der Kinect der Studenten Torben Müller und Jerome Wolf im Rahmen des WS 17/18: Fachpraktikum Elektrotechnik (MTR) aus dem 5. Semester Mechatronik und stellt eine nachhaltige Dokumentation über Vorgehensweise der Bearbeitung und Inhalt des Projektes dar. Die Aufgabe besteht darin, den Kinect V2 Sensor mit Hilfe von Matlab zur Ansteuerung verschiedener Aktuatoren zu verwenden und somit Bewegungen in echte Reaktionen zu transformieren.


Erwartungen an die Projektlösung:

  • Einarbeitung mittels Kinect Toolbox für Matlab
  • Konzeption eines Aufbaus und der passenden Beweungen dazu
  • Realisierung des Aufbaus mit Arduino Uni und prototypischem "shield"
  • Einlesender Skelett-Punkte über die Kinect-Kamera
  • Umrechnen/Verarbeiten/Ansteuern der Aktoren
  • Machen Sie ein tolles Video, welches die Funktionen visualisiert.
  • Test und wissenschaftliche Dokumentation
  • Live Vorführung während der Abschlusspräsentation

Schwierigkeit

  • Mechanik: -
  • Elektronik: **
  • Informatik: ***

Inhalt

Planung

Typischer weise befindet sich eine Kinect Kamera im Wohnzimmer des entsprechenden Besitzers. Auf dieser Vorraussetzung ist die Idee der Home Automation sehr naheliegend. Vorstellbar sind hier beispielsweise die Helligkeitssteuerung der Lampen, die Lautstärkeregelung des Hifi-Systems, eine Temeraturregelung der Heizungen und eine automatisierte Steuerung der Jalousien. Für dieses Projekt wurde eine Lichtsteuerung und eine Lautstärkeregelung ausgewählt, da diese Konzepte leicht zu modellieren sind.

Für die Lichtsteuerung wurden zwei verschiedene Anwendungsfälle ausgearbeitet. Der erste ist die Farbsteuerung einer RGB-LED und der zweite eine Helligkeitssteuerung zusammen mit einer Farbtemperatureinstellung an zwei weißen LEDs. Die Lautstärkeregelung wurde durch eine Transistorschaltung zur Verstärkung eines eingehenden Audiosignals realisiert. Somit gliedert sich die Schaltung in drei verschiedene Module. Nach genauerer Ausarbeitung dieser Schaltung wurden folgende Teile verwendet.

BOM:

Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer
Artikelname Anzahl Anbieter Bestellnummer


Nun musste ein Gestenkonzept entwickelt werden, das diese drei Module steuern kann. Die Grundidee dabei ist, drei verschiedene Steuersignale zu unterschieden, die einen Wechsel in die Steuerung der Einzelnen Module bewirken. Befindet man sich nun in der Steuerung eines Moduls, lassen sich über andere Gesten die einzenlen Funktionen in diesem Modul steuern. Um die Funktionen der beiden Lichtmodule zu regeln, wurde das Konzept eines Steuerkreuzes eingesetzt. Für die RGB-LED wird eine Triade simuliert, in welcher der Benutzer durch Bewegen seiner Hand dynamisch jede Farbe einstellen kann. Die Lichtsteuerung des zweiten Moduls wird durch ein Steuerkreuz auf der anderen Hand geregelt. Hier ist in vertiakler Bewegungsrichtung eine Regelung der Helligkeit und in horizonatler Richtung eine Steuerung der Farbtemperatur möglich

Hardware

Die geplanten Schaltung sollte auf ein Arduino shield aufgebracht werden und wurde dazu vorher in Fritzing entworfen. Die einzelnen Module wurden mit jeweils verschiedenen PWM Pins des Ardunio angesteuert. Dies resultiert in folgende Schaltung:


Software

Zum Erkennen der Gesten und zum ansteuern des Arduino sollte die Software Matlab verwendet werden. Für diese Bearbeitung wurde die Version 2016a von Matlab verwendet. Die ursprüngliche Idee bestand darin, die Matlab Image Acquisition Toolbox zu verwenden, um die Daten des Kinect Sensors auszuwerten. Es stellte sich jedoch heraus, das diese eine Toolbox eine sehr schlechte Framerate erzeugte und somit eine Echtzeitverarbeitung nicht möglich war. Darum wurde für dieses Projekt eine alternative Lösung verwendet, die im folgenden näher beschrieben wird.

Installation

Zuerst müssen in Matlab die nötigen Ressourcen eingerichtet werden. Um eine serielle Schnittstelle zu dem Arduino aufzubauen und Steuersignale an diesen zu senden, wird die Matlab Arduino Toolbox [1] benötigt. Dieses lässt sich leicht über Matlab's internen Add-On Manager installieren. Die Informationen von dem Kinect Sensor wurden über das Kinect V2 Interface for Matlab ausgelesen [2]. Dieser Toolbox liegt eine Installationsanleitung bei, jedoch ist diese nicht sonderlich deutlich. Darum hier nochmal eine klare Anleitung zur Installationsweise. Zuerst muss neben der Toolbox auch noch das Microsoft eigene Entwicklungskit installiert werden [3]. Außerdem wird neben Matlab noch Visual Studio 2012 oder neuer benötigt. Sind nun alle Komponenten vorhanden, so muss zu erst in Matlab der Compiler gesetzt werden. Dazu in dem Command Window folgenden Befehl ausführen

mex -setup C++


Als nächstes muss die Datei "compile_cpp_files.m" bearbeitet werden. Hier gilt es die Pfade für IncludePath und LibPath zu überprüfen. Ersteres muss auf den Ordner "inc" in der Installation der Kinect SDK verweisen und zweiteres auf den "x64" Ordner in "Lib":

IncludePath = 'C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\inc';
LibPath = 'C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\Lib\x64';


Als nächstes muss in dem Kinect V2 SDK von Microsoft der Ordner gefunden werden, welcher die Dateien "Kinect20.Fusion.dll" und "Kinect20.Face.dll" enthält. Bei der aktuellen Version des Entwicklungskits ist dies der Ordner "C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\bin". Dieser muss nun der Systemumgebungsvariable Path hinzugefügt werden. Dazu können folgende Schritte befolgt werden.

Bearbeiten der Path Variable

Zuletzt ist es erforderlich, Matlab neu zu starten und danach die bereits verwendete "compile_cpp_files.m" auszuführen. Konnte diese fehlerfrei ausgeführt werden, kann die Toolbox nun verwendet werden.

Programmablauf

Das Matlab Programm stellt die Schnittstelle zwischen den Daten des Kinect Sensors und der Hardware des Arduinos dar. Es geht somit darum, auf Sensordaten mit Hardwaresteuerbefehlen zu reagieren. Wie aus dem nebenstehenden Programmablaufdiagramm zu erkennen, gliedert sich das Programm in einen Initlisierungsbereich und eine übergreifende Endlosschleife, die die drei Gesten mit jeweils eigenem Initialisierungsbereich und einer Endlosschleife beherbergt.

(Übergreifende Schleife erklären) (Gestenerkennung erklären erst HandStatus dann BodyPos)

Die Kinect ist in der Lage, mit Hilfe einer normalen Full HD Kamera und einem Tiefensensor die Positionen von 25 verschiedenen Elementen eines Körpers für bis zu sechs verschiedene Körper zu ermitteln. Diese Positionen werden von der Toolbox eingelesen, jedoch befinden sich die Koordinaten der Elemente in dem internen Koordinatensystem der Kinect. Mit Hilfe eines Befehls lassen sich diese Koordinaten auf das normale Kamerabild transformieren. Somit steht ein Array aus 25 Zeilen mit je einer x und y Spalte zur Verfügung, mit Koordinaten von 0,0 oben links des Bildes bis 1080,1920 unten rechts. Dieser Array wird für jeden Frame erstellt. Folgende Tabelle gibt an, welche Zeile des Arrays welches Element des Körpers repräsentiert:

Nr. Körperelement
1 Wirbelsäule unten
2 Wirbelsäule mitte
3 Hals
4 Kopf
5 Schulter links
6 Ellbogen links
7 Handgelenk links
8 Hand links
9 Schulter rechts
10 Elbogen rechts
11 Handgelenk rechts
12 Hand rechts
13 Hüfte links
14 Knie links
15 Knöchel links
16 Fuß links
17 Hüfte rechts
18 Knie rechts
19 Knöchel rechts
20 Fuß rechts
21 Wirbelsäule Oben
22 Handspitze links
23 Daumen links
24 Handspitze rechts
25 Daumen rechts

Aus dem Array lässt sich die Position der Hände ablesen. Da alle drei Gesten entweder auf linker oder rechter Hand basieren, sind aus dem Array nur die Positionen an Zeile 8 und 12 interessant.

Wesentliche Erkenntnisse des Projektes

Schritt für Schritt Anleitung

Details wie BOM, ggf. Programmablaufpläne



Dummyref [4]





Zusammenfassung

Ergebniss

Was kann man verbessern

Diese Projekt ist aus der Veranstaltung GET Fachpraktikum Projektübersicht.


Literaturverzeichnis


Korrektur/Rückmeldungen