Inhaltsverzeichnis:

Roboterhandsteuerung mit EMG - Gunook
Roboterhandsteuerung mit EMG - Gunook

Video: Roboterhandsteuerung mit EMG - Gunook

Video: Roboterhandsteuerung mit EMG - Gunook
Video: Roboterhand Steuerung mit Myo Armband und C# 2024, November
Anonim
Image
Image
Signalerfassung
Signalerfassung

Dieses Projekt zeigt die Steuerung der Roboterhand (mit OpenSource-Hand inMoov) mit 3 OpenSource-uECG-Geräten zur Messung und Verarbeitung der Muskelaktivität (Elektromyogramm, EMG). Unser Team hat eine lange Geschichte mit Händen und ihrer Kontrolle, und dies ist ein guter Schritt in die richtige Richtung:)

Lieferungen

3x uECG-Geräte1x Arduino (ich verwende Nano, aber die meisten anderen würden funktionieren)1x nRF24-Modul (jedes generisches würde es tun)1x PCA9685 oder ähnlicher Servotreiber1x inMoov-Hand5x große Servos (siehe inMoov-Anweisungen für kompatible Typen)1x 5V-Netzteil fähig zu 5A oder mehr Strom

Schritt 1: Signalerfassung

Die Kontrolle basiert auf EMG - der elektrischen Aktivität der Muskeln. Das EMG-Signal wird von drei uECG-Geräten erhalten (ich weiß, es soll ein EKG-Monitor sein, aber da er auf einem generischen ADC basiert, kann er alle Biosignale messen - einschließlich EMG). Für die EMG-Verarbeitung verfügt uECG über einen speziellen Modus, in dem es 32-Bin-Spektrumdaten und den "Muskelfenster"-Durchschnitt (durchschnittliche spektrale Intensität zwischen 75 und 440 Hz) aussendet. Spektrumbilder sehen aus wie blaugrüne Muster, die sich im Laufe der Zeit ändern. Hier ist die Frequenz auf einer vertikalen Achse (auf jedem der 3 Diagramme, niedrige Frequenz unten, hohe oben - von 0 bis 488 Hz mit ~15 Hz-Schritten), die Zeit ist auf einer horizontalen (alte Daten links insgesamt hier.) ca. 10 Sekunden auf dem Bildschirm). Die Intensität wird mit Farbe kodiert: blau - niedrig, grün - mittel, gelb - hoch, rot - noch höher.

Schritt 2: Vereinfachtes Signal

Vereinfachtes Signal
Vereinfachtes Signal

Für eine zuverlässige Gestenerkennung ist eine ordnungsgemäße PC-Verarbeitung dieser Spektralbilder erforderlich. Für die einfache Aktivierung von Roboterhandfingern reicht es jedoch aus, nur den Durchschnittswert auf 3 Kanälen zu verwenden - uECG stellt ihn bequem bei bestimmten Paketbytes bereit, damit Arduino Sketch ihn analysieren kann. Diese Werte sehen viel einfacher aus - ich habe ein Diagramm mit Rohwerten von Arduinos Serial Plotter angehängt. Rote, grüne, blaue Diagramme sind Rohwerte von 3 uEKG-Geräten an verschiedenen Muskelgruppen, wenn ich Daumen, Ring- und Mittelfinger entsprechend drücke. Für unser Auge sind diese Fälle eindeutig anders, aber wir müssen diese Werte irgendwie in "Finger-Score" umwandeln, damit ein Programm Werte an Handservos ausgeben kann. Das Problem ist, dass Signale von Muskelgruppen "gemischt" sind: Im 1. und 3. Fall ist die blaue Signalintensität ungefähr gleich - aber rot und grün sind unterschiedlich. Im 2. und 3. Fall sind grüne Signale gleich - aber blaue und rote sind unterschiedlich.

Schritt 3: Signalverarbeitung

Signalverarbeitung
Signalverarbeitung

Um diese Signale zu "entmischen", habe ich eine relativ einfache Formel verwendet:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), wobei S0 - Wert für Kanal 0, V0, V1, V2 - Rohwerte für Kanal 0, 1, 2 und a, b, c, d - Koeffizienten, die ich manuell angepasst habe (a und c waren von 0,3 bis 2,0, b und d waren 15 und 20, Sie müssten sie sowieso ändern, um sie an Ihre spezielle Sensorposition anzupassen). Für Kanal 1 und 2 wurde die gleiche Punktzahl berechnet. Danach wurden die Charts fast perfekt getrennt. Für die gleichen Gesten (diesmal Ringfinger, Mittelfinger und dann Daumen) sind die Signale klar und können einfach durch Vergleich mit dem Schwellenwert in Servobewegungen übersetzt werden

Schritt 4: Schaltpläne

Schema
Schema

Der Schaltplan ist recht einfach, Sie benötigen nur ein nRF24-Modul, einen PCA9685 oder einen ähnlichen I2C-PWM-Controller und eine 5-V-Hochleistungsversorgung, die ausreichen würde, um alle diese Servos auf einmal zu bewegen (also mindestens 5A Nennleistung für einen stabilen Betrieb erforderlich).

Liste der Anschlüsse: nRF24 Pin 1 (GND) - Arduinos GNDnRF24 Pin 2 (Vcc) - Arduinos 3.3vnRF24 Pin 3 (Chip Enable) - Arduinos D9nRF24 Pin 4 (SPI: CS) - Arduinos D8nRF24 Pin 5 (SPI: SCK) - Arduinos D13nRF24 Pin 6 (SPI:MOSI) - Arduinos D11nRF24 Pin 7 (SPI:MISO) - Arduinos D12PCA9685 SDA - Arduinos A4PCA9685 SCL - Arduinos A5PCA9685 Vcc - Arduinos 5vPCA9685 GND - Arduinos GNDPCA9685 V+ - 96 Ampere zu Servo 5VPCA PCA Kanäle 0-4, in meiner Notation Daumen - Kanal 0, Zeigefinger - Kanal 1 usw.

Schritt 5: Platzierung der EMG-Sensoren

Platzierung der EMG-Sensoren
Platzierung der EMG-Sensoren
Platzierung der EMG-Sensoren
Platzierung der EMG-Sensoren

Um vernünftige Messwerte zu erhalten, ist es wichtig, uEKG-Geräte, die die Muskelaktivität aufzeichnen, an den richtigen Stellen zu platzieren. Obwohl hier viele verschiedene Optionen möglich sind, erfordert jede einen anderen Signalverarbeitungsansatz - daher ist es bei meinem Code am besten, eine ähnliche Platzierung wie auf meinen Fotos zu verwenden. Es mag nicht intuitiv sein, aber das Daumenmuskelsignal ist auf der gegenüberliegenden Seite des Arms besser sichtbar, also wird einer der Sensoren dort platziert, und alle werden in der Nähe des Ellenbogens platziert (Muskeln haben den größten Teil ihres Körpers in diesem Bereich, aber Sie möchten überprüfen, wo genau sich Ihre befinden - es gibt einen ziemlich großen individuellen Unterschied)

Schritt 6: Code

Bevor Sie das Hauptprogramm ausführen, müssen Sie die Geräte-IDs Ihrer jeweiligen uECG-Geräte herausfinden (dies geschieht, indem Sie die Zeile 101 auskommentieren und die Geräte nacheinander einschalten, Sie sehen unter anderem die ID des aktuellen Geräts) und diese in unit_ids-Array (Zeile 37). Ansonsten möchten Sie mit Formelkoeffizienten (Zeilen 129-131) spielen und prüfen, wie es auf einem seriellen Plotter aussieht, bevor Sie ihn an der Roboterhand befestigen.

Schritt 7: Ergebnisse

Mit einigen Experimenten, die etwa 2 Stunden dauerten, konnte ich einen recht zuverlässigen Betrieb erzielen (Video zeigt einen typischen Fall). Es verhält sich nicht perfekt und kann bei dieser Verarbeitung nur offene und geschlossene Finger erkennen (und nicht einmal jede der 5, es erkennt nur 3 Muskelgruppen: Daumen, Zeige- und Mittelfinger zusammen, Ring- und kleiner Finger zusammen). Aber "AI", das das Signal analysiert, benötigt hier 3 Codezeilen und verwendet einen einzelnen Wert von jedem Kanal. Ich glaube, dass durch die Analyse von 32-bin-Spektralbildern auf einem PC oder Smartphone viel mehr erreicht werden könnte. Außerdem verwendet diese Version nur 3 uECG-Geräte (EMG-Kanäle). Mit mehr Kanälen sollte es möglich sein, wirklich komplexe Muster zu erkennen - aber gut, das ist der Sinn des Projekts, um allen Interessierten einen Ansatzpunkt zu bieten:) Handsteuerung ist definitiv nicht die einzige Anwendung für ein solches System.

Empfohlen: