Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Signalindsamling
- Trin 2: Forenklet signal
- Trin 3: Signalbehandling
- Trin 4: Skemaer
- Trin 5: Placering af EMG -sensorer
- Trin 6: Kode
- Trin 7: Resultater
Video: Robot håndkontrol med EMG: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Dette projekt viser styring af robothånd (ved hjælp af opensource -hånd inMoov) med 3 opensource uECG -enheder, der bruges til måling og behandling af muskelaktivitet (elektromyogram, EMG). Vores team har en lang historie med hænder og deres kontrol, og dette er et godt skridt i den rigtige retning:)
Forbrugsvarer
3x uECG -enheder 1x Arduino (jeg bruger Nano, men de fleste andre ville fungere) 1x nRF24 -modul (enhver generisk ville gøre) 1x PCA9685 eller lignende servodriver1x inMoov -hånd5x store servoer (se inMoov -vejledning til kompatible typer) 1x 5V strømforsyning i stand til 5A eller mere strøm
Trin 1: Signalindsamling
Kontrol er baseret på EMG - elektrisk aktivitet af muskler. EMG -signal opnås af tre uECG -enheder (jeg ved, det formodes at være en EKG -monitor, men da det er baseret på en generisk ADC, kan det måle alle biosignaler - herunder EMG). Til EMG-behandling har uECG en speciel tilstand, hvor den sender 32-bin spektrumdata og "muskelvindue" -gennemsnit (gennemsnitlig spektralintensitet mellem 75 og 440 Hz). Spektrumbilleder ligner blågrønne mønstre, der ændrer sig over tid. Her er frekvensen på en lodret akse (på hver af 3 plots, lav frekvens i bunden, høj øverst - fra 0 til 488 Hz med ~ 15 Hz trin), er tiden på en vandret (gamle data til venstre samlet her er ca. 10 sekunder på skærmen). Intensitet er kodet med farve: blå - lav, grøn - medium, gul - høj, rød - endnu højere.
Trin 2: Forenklet signal
For en pålidelig gestusgenkendelse kræves en ordentlig pc -behandling af disse spektrale billeder. Men for simpel aktivering af robothåndfingre er det nok at bare bruge en gennemsnitlig værdi på 3 kanaler - uECG giver den bekvemt ved visse pakkebytes, så Arduino sketch kan analysere den. Disse værdier ser meget enklere ud - jeg har vedhæftet et diagram med råværdier fra Arduinos Serial Plotter. Røde, grønne, blå diagrammer er råværdier fra 3 uECG -enheder på forskellige muskelgrupper, når jeg klemmer tommelfinger, ring og langfinger tilsvarende. For vores øje er disse tilfælde klart forskellige, men vi er nødt til på en eller anden måde at gøre disse værdier til "finger score", så et program kan udsende værdier til håndservoer. Problemet er, at signaler fra muskelgrupper er "blandede": i 1. og 3. tilfælde er blå signalintensitet omtrent den samme - men rød og grøn er forskellige. I 2. og 3. tilfælde er grønne signaler de samme - men blå og rød er forskellige.
Trin 3: Signalbehandling
For at "afblande" disse signaler har jeg brugt en relativt simpel formel:
S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), hvor S0 - score for kanal 0, V0, V1, V2 - råværdier for kanalerne 0, 1, 2 og a, b, c, d - koefficienter, som jeg justerede manuelt (a og c var fra 0,3 til 2,0, b og d var 15 og 20, du skulle alligevel ændre dem for at justere til din særlige sensorplacering). Den samme score blev beregnet for kanal 1 og 2. Herefter blev diagrammer næsten perfekt adskilt. For de samme bevægelser (denne gang ringefinger, midterste og derefter tommelfinger) er signalerne klare og kan let oversættes til servobevægelser bare ved at sammenligne med tærskel
Trin 4: Skemaer
Skemaer er ganske enkle, du behøver kun nRF24 -modul, PCA9685 eller lignende I2C PWM -controller og høj forstærker 5V strømforsyning, der ville være nok til at flytte alle disse servoer på én gang (så det kræver mindst 5A nominel effekt for stabil drift).
Liste over forbindelser: nRF24 pin 1 (GND) - Arduinos GNDnRF24 pin 2 (Vcc) - Arduinos 3.3vnRF24 pin 3 (Chip Enable) - Arduinos D9nRF24 pin 4 (SPI: CS) - Arduino's D8nRF24 pin 5 (SPI: SCK) - Arduino's D13nRF24 pin 6 (SPI: MOSI) - Arduino's D11nRF24 pin 7 (SPI: MISO) - Arduino's D12PCA9685 SDA - Arduino's A4PCA9685 SCL - Arduino's A5PCA9685 Vcc - Arduino's 5vPCA9685 GND - Ar685S GN9 - High9: GN9 - High9: GN9 - High9 PCA -kanaler 0-4, i min notation tommelfinger - kanal 0, pegefinger - kanal 1 osv.
Trin 5: Placering af EMG -sensorer
For at få rimelige aflæsninger er det vigtigt at placere uECG -enheder, der registrerer muskelaktivitet, på de rigtige steder. Selvom mange forskellige muligheder er mulige her, kræver hver især en anden signalbehandlingsmetode - så med min kode er det bedst at bruge placering, der ligner mine fotos. Det kan være kontra -intuitivt, men tommelfingermuskelsignal er bedre synligt på den modsatte side af armen, så en af sensorerne er placeret der, og alle er placeret tæt på albuen (muskler har det meste af kroppen i det område, men du vil kontrollere, hvor præcis din er placeret - der er en ganske stor individuel forskel)
Trin 6: Kode
Inden du kører hovedprogrammet, skal du finde ud af enheds -id'er for dine særlige uECG -enheder (det gøres ved at ikke kommentere linje 101 og tænde enheder en efter en, du vil blandt andet se ID for den aktuelle enhed) og udfylde dem i unit_ids array (linje 37). Bortset fra dette vil du spille med formelkoefficienter (linje 129-131) og kontrollere, hvordan det ser ud på seriel plotter, før du fastgør det til robothånden.
Trin 7: Resultater
Med nogle forsøg, der tog cirka 2 timer, var jeg i stand til at få en ganske pålidelig drift (video viser et typisk tilfælde). Det opfører sig ikke perfekt, og med denne behandling kan det kun genkende åbne og lukkede fingre (og ikke engang hver af de 5, det registrerer kun 3 muskelgrupper: tommelfinger, indeks og midten sammen, ring og små fingre sammen). Men "AI", der analyserer signal, tager 3 linjer kode her og bruger en enkelt værdi fra hver kanal. Jeg tror meget mere kunne gøres ved at analysere 32-bin spektralbilleder på pc eller smartphone. Denne version bruger også kun 3 uECG -enheder (EMG -kanaler). Med flere kanaler burde det være muligt at genkende virkelig komplekse mønstre - men godt, det er pointen med projektet, at give et udgangspunkt for alle interesserede:) Håndkontrol er bestemt ikke den eneste applikation til et sådant system.
Anbefalede:
EMG Biofeedback: 18 trin (med billeder)
EMG Biofeedback: Denne biofeedback -opsætning bruger en EMG -sensor til at repræsentere muskelspændinger som en række bip og giver dig mulighed for at træne din krop til at justere muskelspændinger efter behag. Kort sagt, jo mere anspændt du er, jo hurtigere bliver bipene, og jo mere afslappet bliver det
DIY Emg-sensor med og uden mikro-controller: 6 trin
DIY Emg-sensor med og uden mikro-controller: Velkommen til videndelingsinstruktionsplatform.I denne instruktør vil jeg diskutere, hvordan man laver grundlæggende emg-kredsløb og bag matematisk beregning involveret i det. Du kan bruge dette kredsløb til at observere variationer i muskelpuls, kontrol
IoT: Styr HoloLens med dine øjenbryn (EMG): 5 trin
IoT: Control the HoloLens Using Your Eyebrows (EMG): Dette projekt var en del af University of Colorado Boulders NASA SUITS -projekt, der blev præsenteret og testet på NASA JSC i april 2019. For det års projekt var jeg projektleder for hardware udvikling, og dette var et af mine bidrag
[Arduino Robot] Sådan laver du en Motion Capture Robot - Thumbs Robot - Servomotor - Kildekode: 26 trin (med billeder)
[Arduino Robot] Sådan laver du en Motion Capture Robot | Thumbs Robot | Servomotor | Kildekode: Thumbs Robot. Brugt et potentiometer af MG90S servomotor. Det er meget sjovt og let! Koden er meget enkel. Det er kun omkring 30 linjer. Det ligner en motion-capture. Efterlad et spørgsmål eller feedback! [Instruktion] Kildekode https: //github.c
At skrive med EMG ved hjælp af MyoWare: 8 trin
Skrivning med EMG ved hjælp af MyoWare: Forfattere: L. Elizabeth Crawford & Dylan T. VavraIntroduktion: I denne vejledning vil vi vise dig, hvordan du opretter et simpelt hjemmelektromyografisystem (EMG) - til en pris af omkring $ 100 - der vil fornemme muskelaktivering fra overfladen