Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Gestenerkennung mit Beschleunigungsmesser und ESP

Komponenten und Verbrauchsmaterialien

Arduino 101
Beinhaltet einen integrierten Beschleunigungsmesser, sodass keine zusätzlichen Komponenten oder Schaltungen erforderlich sind.
× 1
Arduino UNO
Sie können ein Arduino Uno (oder ein anderes Arduino) anstelle des Arduino 101 verwenden, aber Sie werden benötige auch einen Beschleunigungsmesser.
× 1
Analoger Adafruit-Beschleunigungsmesser:ADXL335
Verwenden Sie dies (oder das SparkFun-Äquivalent), wenn Sie ein anderes Arduino als das Arduino 101 verwenden ( das einen eingebauten Beschleunigungsmesser hat).
× 1
SparkFun Triple Axis Accelerometer Breakout - ADXL335
Verwenden Sie dies (oder das Adafruit-Äquivalent), wenn Sie ein anderes Arduino als das Arduino 101 verwenden ( das einen eingebauten Beschleunigungsmesser hat).
× 1

Über dieses Projekt

Übersicht

Dieses Tutorial zeigt Ihnen, wie Sie mit dem ESP-System grundlegende Gestenerkennung in Ihre Arduino-Projekte integrieren. Sie können beispielsweise verschiedene Tennisgesten wie Vorhand, Rückhand und Aufschlag erkennen. Elemente einer Tanzroutine; Gewichthebende Gesten; usw. Die Gesten werden mit einem Beschleunigungsmesser erfasst und an die ESP-Anwendung gesendet, die auf Ihrem Computer ausgeführt wird. ESP verwendet einen einfachen maschinellen Lernalgorithmus, um die Live-Beschleunigungsmesserdaten mit aufgezeichneten Beispielen für verschiedene Gesten abzugleichen, und sendet eine Nachricht an das Arduino zurück, wenn es eine Geste ähnlich einem der Beispiele erkennt. Das System erkennt nur einzelne Vorkommen von diskreten Gesten; es liefert keine Informationen darüber, wie die Geste ausgeführt wird. Dennoch kann es für eine Vielzahl interaktiver Anwendungen verwendet werden.

Laden Sie die ESP-Gestenerkennungsanwendung herunter:

  • Mac:ESP-Gestures-Mac-20161028.zip
  • Windows:ESP-Gestures-Win-20161028.zip. Möglicherweise benötigen Sie auch das Visual C++ Redistributable (Update 3) von Microsoft.
  • Ubuntu:ESP-Gestures-Ubuntu-20161028.tar.gz
  • Beispielgesten:ForehandBackhandServe.grt

Schritt 1. Schließen Sie Ihren Beschleunigungsmesser an.

Wenn Sie das Arduino 101 verwenden, das über einen integrierten Beschleunigungsmesser verfügt, können Sie diesen Schritt überspringen. Andernfalls müssen Sie Ihren Beschleunigungsmesser anschließen. Löten Sie dazu zunächst Stiftleisten auf die Breakout-Platine, falls noch nicht geschehen. Dann verkabeln Sie den Beschleunigungsmesser mit dem Arduino.

Als Abkürzung können Sie den Beschleunigungsmesser-Breakout direkt in die analogen Eingangspins des Arduino Uno (oder eines anderen Arduino mit dem gleichen Formfaktor) stecken. Dann können Sie im Arduino-Code die entsprechenden Pins konfigurieren, um den Beschleunigungsmesser mit Strom und Masse zu versorgen.

Alternativ können Sie Ihren Beschleunigungsmesser an ein Steckbrett anschließen und mit dem Arduino verbinden, indem Sie seine Strom- und Massepins mit den 5V- und GND-Pins des Arduino und seine X-, Y- und Z-Achsen-Pins mit drei analogen Eingängen verbinden des Arduino-Boards.

Schritt 2. Laden Sie den Arduino-Code hoch.

Sie können eines der folgenden Arduino-Programme verwenden, um Daten vom Beschleunigungsmesser zu lesen und über seriell (USB) an den Computer zu senden. Überprüfen Sie zunächst, ob die im Arduino-Programm angegebenen Pins mit der Art und Weise übereinstimmen, wie Sie Ihren Beschleunigungsmesser verdrahtet haben (z. B. dass xpin dem analogen Eingangspin entspricht, der mit dem X-Achsen-Pin Ihres Beschleunigungsmessers verbunden ist). (Dies gilt nicht, wenn Sie das Arduino 101 verwenden, bei dem der Beschleunigungsmesser intern angeschlossen ist.) Wählen Sie dann die entsprechende Platine und den seriellen Port aus dem Arduino-Tools-Menü aus und laden Sie die Arduino-Skizze hoch.

Schritt 3. Überprüfen Sie den seriellen Monitor auf Daten.

Öffnen Sie den seriellen Arduino-Monitor, stellen Sie ihn auf 9600 Baud ein und überprüfen Sie, ob Sie Beschleunigungsmesserdaten von Ihrem Arduino erhalten. Sie sollten drei Zahlenspalten sehen, die sich ändern, wenn Sie den Beschleunigungsmesser bewegen. Verwenden Sie den seriellen Arduino-Plotter, um eine Grafik dieser Zahlen anzuzeigen.

Stellen Sie sicher, dass Sie den seriellen Monitor und den seriellen Plotter schließen, bevor Sie fortfahren, da sie sonst die ESP-Anwendung daran hindern, mit Ihrem Arduino zu kommunizieren.

Schritt 4. Führen Sie die ESP-Gestenerkennungsanwendung aus und wählen Sie Ihren seriellen Anschluss aus.

Laden Sie die ESP-Gestenerkennungsanwendung herunter:

  • Mac:ESP-Gestures-Mac-20160812.zip
  • Windows:ESP-Gestures-Win-20160812.zip

Wählen Sie im Konfigurationsmenü den seriellen Port aus, der Ihrem Arduino-Board entspricht. (Klicken Sie auf die Überschrift "Wählen Sie einen seriellen Port", um die Liste der Ports zu öffnen.) 

Sie sollten Live-Daten-Streaming im Diagramm "Rohdaten" sehen. Die drei Linien im Diagramm entsprechen den drei Achsen Ihres Beschleunigungsmessers:die rote Linie entspricht der X-Achse, die grüne der Y-Achse und die blaue der Z-Achse.

Schritt 5. Kalibrierproben aufzeichnen.

Damit die ESP-Anwendung versteht, welchen Wertebereich Sie von Ihrem Beschleunigungsmesser und Arduino erwarten können, müssen Sie eine Kalibrierungsprobe aufzeichnen. Stellen Sie Ihren Beschleunigungsmesser auf eine ebene Fläche, mit der Z-Achse nach oben. Halten Sie die Taste „1“ etwa eine Sekunde lang gedrückt, um die Kalibrierungsprobe „Aufrecht“ aufzuzeichnen. Sie sollten sehen, dass ein Diagramm der Probe angezeigt wird. Drehen Sie dann Ihren Beschleunigungsmesser auf den Kopf und halten Sie ihn flach und ruhig, und halten Sie die Taste "2" gedrückt, um die auf dem Kopf stehende Kalibrierungsprobe aufzuzeichnen. Das ESP-System verwendet diese Daten, um herauszufinden, welche Zahlenwerte einer Beschleunigung von 0 g (auf der X- und Y-Achse) und welche einer Beschleunigung von 1 g (auf der Z-Achse) entsprechen.

Schritt 6. Zeichnen Sie Beispielgesten auf.

Gehen Sie zur Registerkarte "Training" der ESP-Anwendung, indem Sie darauf klicken oder ein großes "T" eingeben. Auf dieser Registerkarte können Sie Beispiele für die Gesten aufzeichnen oder laden, die das ESP-System erkennen soll. Sie können Beispiele für bis zu neun verschiedene Gesten aufzeichnen.

Um ein Gestenbeispiel aufzuzeichnen, führen Sie die Geste aus, während Sie die Taste drücken, die dem Label entspricht, das Sie der Geste zuordnen möchten. Um beispielsweise eine Geste mit dem Label 1 aufzuzeichnen, halten Sie die "1"-Taste auf Ihrer Tastatur gedrückt, während Sie die Geste ausführen. (Alternativ können Sie die Beispiel-Tennisgesten in ForehandBackhandServe.grt laden.)

Achten Sie darauf, die Beispielgesten mit dem Beschleunigungsmesser in der gleichen Konfiguration aufzuzeichnen, wie sie später sein wird, wenn das System die Gesten erkennen soll. Sie können den Beschleunigungsmesser beispielsweise mit einer bestimmten Ausrichtung in Ihrer Hand halten oder ihn an einem Objekt befestigen, das Sie mit einer bestimmten Ausrichtung halten.

Ein gutes Beispiel enthält die Daten, die der gesamten Geste entsprechen, jedoch ohne viele zusätzliche Basisdaten entweder am Anfang oder am Ende. Das heißt, die Probe sollte mit einer kurzen Periode relativ flacher Linien beginnen und enden, die weder zu lang sind noch ganz fehlen. Wenn Ihre Geste an einer anderen Stelle endet als sie begonnen hat, achten Sie außerdem darauf, nicht um die Zeit aufzuzeichnen, wenn Sie den Beschleunigungsmesser zurück in die Ausgangsposition bringen. Wenn Sie beispielsweise eine Wischgeste nach rechts aufzeichnen, möchten Sie nur den Teil der Geste aufzeichnen, wenn sich Ihre Hand von links nach rechts bewegt, nicht die Zeit, in der Ihre Hand in ihre Ausgangsposition zurückkehrt.

Jedes zusätzliche Beispiel, das Sie aufzeichnen, ist ein weiteres Beispiel, mit dem der Algorithmus für maschinelles Lernen vergleichen kann, wenn er Gesten erkennt. Das heißt, wenn Sie möchten, dass das System verschiedene Variationen einer Geste erkennt (z. B. die unterschiedliche Art und Weise, wie sie von verschiedenen Personen ausgeführt wird), kann es hilfreich sein, Beispiele jeder Variation aufzuzeichnen. Andererseits können schlechte Samples das System verwirren; mehr Samples sind nicht unbedingt besser. Im Allgemeinen hatten wir viel Glück, ungefähr 5 bis 10 Samples für jede Geste aufzunehmen, obwohl auch hier die Qualität der einzelnen Samples wichtiger ist als ihre Quantität.

Wenn Ihnen ein Muster nicht gefällt (zB weil Sie die Taste zur falschen Zeit gedrückt haben und die Daten eines Teils der Geste verpasst haben), können Sie es löschen, indem Sie in das Kästchen neben dem Wort "Löschen" unter dem Muster klicken . Sie können eine Probe trimmen, indem Sie auf den Plot der Probe klicken und ziehen, um den Teil der Probe auszuwählen, den Sie behalten möchten, und dann auf das Kästchen mit der Bezeichnung "trimmen" klicken. Sie können zwischen den verschiedenen Stichproben in einer Klasse navigieren, indem Sie auf die Pfeilsymbole unter dem Diagramm für die Stichprobe klicken. Wenn Sie ein Sample in der falschen Klasse aufgenommen haben, können Sie es verschieben, indem Sie auf die Schaltfläche "Re-label" klicken und dann die Taste drücken, die dem Label entspricht, dem Sie das Sample zuweisen möchten. Um eine Geste zu benennen, klicken Sie auf die Schaltfläche "Umbenennen", geben Sie den Namen ein und drücken Sie die Eingabetaste.

Schritt 7. Trainieren Sie das System, um Gesten zu erkennen.

Nachdem Sie einige Beispielgesten aufgezeichnet haben, können Sie das ESP-System trainieren, diese Gesten aus Ihren Beispielen zu erkennen. Drücken Sie die Taste „t“ auf Ihrer Tastatur, um das System zu trainieren. Am unteren Rand des Fensters sollte die Meldung "Training erfolgreich" erscheinen. Wenn Sie nun eine Geste ähnlich einem Ihrer aufgezeichneten Beispiele ausführen, sollte der Name auf dem Diagramm der Live-Sensordaten erscheinen.

Das System funktioniert möglicherweise nicht richtig, wenn Sie es zum ersten Mal trainieren. Es ist hilfreich, das System häufig zu trainieren und zu testen, während Sie Ihre Beispielgesten aufzeichnen, damit Sie ein Gefühl dafür bekommen, wie es sich verhält.

Insbesondere wenn das System Gesten nicht erkennt, von denen Sie meinen, dass es sollte, möchten Sie möglicherweise zusätzliche Beispiele für diese Geste aufzeichnen. Wenn das System Gesten erkennt, wenn es nicht sollte, möchten Sie möglicherweise Beispiele löschen oder kürzen, die anders aussehen als die anderen oder lange Perioden relativ flacher Linien enthalten. Achten Sie darauf, "t" zu drücken, nachdem Sie Ihre Beispiele geändert haben, um das System neu zu trainieren.

Schritt 8. Passen Sie die Systemkonfiguration nach Bedarf an.

Während das Modifizieren Ihrer Trainingsbeispiele wahrscheinlich das wichtigste Mittel ist, um die korrekte Leistung des Systems zu unterstützen, können Sie mit ESP auch einige zugrunde liegende Systemparameter konfigurieren. Klicken Sie dazu auf das Label "Klicken, um die Konfiguration zu öffnen". Sie sollten zwei Parameter sehen:Variabilität und Zeitüberschreitung. Beachten Sie, dass Sie nach dem Ändern dieser Parameter das System neu trainieren müssen, indem Sie "t" drücken.

Der Variabilitätsparameter steuert, wie unterschiedlich eine Geste von einem der aufgezeichneten Beispiele sein und dennoch erkannt werden kann. Je höher die Zahl, desto unterschiedlicher kann sie sein. Wenn das System zu verlangen scheint, dass Ihre Gesten den aufgezeichneten Beispielen zu ähnlich sind, können Sie versuchen, diese Zahl zu erhöhen. (Sie können auch versuchen, zusätzliche Beispiele aufzuzeichnen.) Wenn das System unechte Gesten erkennt, können Sie versuchen, diese Zahl zu verringern, aber Sie können auch versuchen, alle schlecht erscheinenden Trainingsbeispiele zu löschen.

Der Parameter Timeout steuert, wie lange das System nach dem Erkennen einer Geste wartet, bevor es eine neue erkennt. Es wird in Millisekunden (Tausendstelsekunden) gemessen. Wenn dem System Gesten zu fehlen scheinen, die kurz nach einer anderen Geste ausgeführt werden, versuchen Sie, diese Zahl zu verringern. Seien Sie jedoch vorsichtig, denn wenn Sie diese Zahl zu niedrig einstellen, kann das System eine einzelne Geste mehrmals erkennen. Wenn das System mehrere Gesten zu erkennen scheint, wenn Sie nur eine Geste ausführen (z. B. wenn eine Vorhand gefolgt von einer Rückhand angezeigt wird, wenn Sie nur eine Vorhand ausführen), können Sie versuchen, diesen Parameter zu erhöhen.

Schritt 9. Integrieren Sie die Gestenerkennung in Ihr Arduino-Projekt.

Wenn das ESP-System eine Vorhersage macht, sendet es eine Nachricht mit der Nummer der erkannten Geste an Ihren Arduino (als ASCII-Text gefolgt von einem Zeilenumbruch, z. B. "1\n"). Indem Sie diese Vorhersagen über die serielle Schnittstelle lesen, können Sie Ihr Arduino auf verschiedene Weise auf die Geste reagieren lassen.

Die Vorhersagen werden auch über TCP an einen Server gesendet, der auf dem localhost-Port 5204 läuft (im gleichen Format wie beim Arduino). Dies kann beispielsweise ein Spiel sein, das in Processing oder anderer Software geschrieben wurde. Stellen Sie sicher, dass der TCP-Server läuft, bevor Sie die ESP-Anwendung starten.

Wie es funktioniert

Diese spezielle ESP-Anwendung verwendet einen Algorithmus namens Dynamic Time Warping (oder DTW). Dieser Algorithmus verzerrt das Live-Sensorsignal, indem er einzelne Messwerte eliminiert oder dupliziert, eine Reihe von Variationen generiert und überprüft, wie ähnlich sie den aufgezeichneten Samples sind. Der Algorithmus sucht nach dem Trainingsbeispiel, das den Live-Sensordaten am nächsten kommt. Wenn die Differenz zwischen den beiden kleiner als ein bestimmter Schwellenwert ist, betrachtet sie dies als Übereinstimmung und gibt eine Vorhersage aus, die der Trainingsklasse entspricht, die diese Probe enthält. Sie können die erforderliche Distanz mit dem Parameter "Variabilität" im Dropdown-Menü Konfiguration einstellen.

Die Gestenerkennung ist nur ein Bereich, auf den das ESP-System angewendet werden kann. ESP baut auf dem Gesture Recognition Toolkit (GRT) auf, das trotz seines Namens tatsächlich eine breite Palette von Algorithmen für maschinelles Lernen enthält, die auf eine Vielzahl von Echtzeit-Sensoranwendungen angewendet werden können. ESP nimmt Code für eine bestimmte Anwendung und übersetzt ihn in eine angepasste Benutzeroberfläche für die Arbeit mit dieser Pipeline für maschinelles Lernen. Diese anwendungsspezifischen Programme umfassen eine GRT-Pipeline für maschinelles Lernen, die Spezifikation von Sensoreingaben, die Definition des Kalibrierungsprozesses und Spezifikationen für die einstellbaren Parameter. Wir haben ESP-Beispiele für Farberkennung, Posenerkennung mit Beschleunigungsmessern und einfache Audioerkennung erstellt. Weitere Informationen finden Sie im ESP GitHub.

Code

Arduino ADXL335-Code
Dieser Code liest von einem ADXL335, der mit einem Arduino verbunden ist:Der X-Achsen-Pin des Beschleunigungsmessers sollte mit Pin A5 des Arduino, die Y-Achse mit A4 und die Z-Achse mit A3 verbunden werden. Die Messwerte werden über den seriellen (USB) Port mit 9600 Baud als tabulatorgetrennte ASCII-Daten mit Zeilenumbruch gesendet.
Arduino 101 Beschleunigungsmesser-Code
Liest Beschleunigungsmesserdaten vom eingebauten Beschleunigungsmesser auf einem Arduino 101. Die Messwerte werden über den seriellen (USB) Port bei 9600 als Zeilenumbruch-terminierte, tabulatorgetrennte ASCII-Daten gesendet.

Herstellungsprozess

  1. Anwesenheitssystem mit Arduino und RFID mit Python
  2. Universelle Fernbedienung mit Arduino, 1Sheeld und Android
  3. DIY-Voltmeter mit Arduino und Smartphone
  4. IOT - Smart Jar mit ESP8266, Arduino und Ultraschallsensor
  5. Frequenz- und Duty-Cycle-Messung mit Arduino
  6. Steuern Sie Arduino Rover mit Firmata und Xbox One-Controller
  7. Sonar mit Arduino und Anzeige bei der Verarbeitung von IDE
  8. Steuerung der LED-Helligkeit mit Bolt und Arduino
  9. Einfacher und intelligenter Roboterarm mit Arduino
  10. So erstellen Sie einen Kompass mit Arduino und Processing IDE