Indholdsfortegnelse:

Robot håndkontrol med EMG: 7 trin
Robot håndkontrol med EMG: 7 trin

Video: Robot håndkontrol med EMG: 7 trin

Video: Robot håndkontrol med EMG: 7 trin
Video: Гексапод. Сборка и тестирование ноги. 2024, November
Anonim
Image
Image
Signalindsamling
Signalindsamling

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

Forenklet signal
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

Signalbehandling
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
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

Placering af EMG -sensorer
Placering af EMG -sensorer
Placering af EMG -sensorer
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: