Cuprins:

Control manual al mâinii cu EMG: 7 pași
Control manual al mâinii cu EMG: 7 pași

Video: Control manual al mâinii cu EMG: 7 pași

Video: Control manual al mâinii cu EMG: 7 pași
Video: CUTIILE AUTOMATE | Utilizare si tipuri constructive 2024, Iulie
Anonim
Image
Image
Achiziționarea semnalului
Achiziționarea semnalului

Acest proiect arată controlul mâinii robotizate (folosind mâna opensource inMoov) cu 3 dispozitive open source uECG utilizate pentru măsurarea și prelucrarea activității musculare (electromiogramă, EMG). Echipa noastră are o poveste lungă cu mâinile și controlul lor, iar acesta este un pas bun într-o direcție bună:)

Provizii

3x dispozitive uECG 1x Arduino (folosesc Nano, dar majoritatea altora ar funcționa) 1x modul nRF24 (orice generic ar funcționa) 1x PCA9685 sau servodirector similar 1x mână inMoov 5x servo mari (consultați instrucțiunile inMoov pentru tipuri compatibile) 1x sursă de alimentare 5V capabilă să 5A sau mai mult curent

Pasul 1: Achiziționarea semnalului

Controlul se bazează pe EMG - activitatea electrică a mușchilor. Semnalul EMG este obținut de trei dispozitive uECG (știu, se presupune că este un monitor ECG, dar din moment ce se bazează pe un ADC generic, poate măsura orice biosemnal - inclusiv EMG). Pentru procesarea EMG, uECG are un mod special în care trimite date despre spectrul de 32 de coșuri și media „ferestrei musculare” (intensitate spectrală medie între 75 și 440 Hz). Imaginile din spectru arată ca niște modele albastru-verzi care se schimbă în timp. Aici frecvența este pe o axă verticală (pe fiecare din cele 3 grafice, frecvență joasă în partea de jos, mare în partea de sus - de la 0 la 488 Hz cu trepte de ~ 15 Hz), timpul este pe o orizontală (datele vechi din stânga general aici este de aproximativ 10 secunde pe ecran). Intensitatea este codificată cu culoare: albastru - scăzut, verde - mediu, galben - înalt, roșu - chiar mai mare.

Pasul 2: Semnal simplificat

Semnal simplificat
Semnal simplificat

Pentru o recunoaștere fiabilă a gesturilor, este necesară o procesare adecvată pe computer a acestor imagini spectrale. Dar pentru o simplă activare a degetelor de mână robotizate, este suficient să folosiți doar valoarea medie pe 3 canale - uECG o oferă în mod convenabil la anumite octeți de pachete, astfel încât schița Arduino să o poată analiza. Aceste valori arată mult mai simplu - am atașat o diagramă a valorilor brute de la Arduino's Serial Plotter. Diagramele roșu, verde, albastru sunt valori brute de la 3 dispozitive uECG pe diferite grupe de mușchi atunci când strâng degetele mari, inelare și mijlocii în mod corespunzător. Pentru ochiul nostru, aceste cazuri sunt în mod clar diferite, dar trebuie să transformăm acele valori în „scor de deget” într-un fel, astfel încât un program să poată transmite valori către servomâinile manuale. Problema este că semnalele din grupele musculare sunt „amestecate”: în primul și al treilea caz intensitatea semnalului albastru este aproximativ aceeași - dar roșu și verde sunt diferite. În al doilea și al treilea caz, semnalele verzi sunt aceleași - dar albastru și roșu sunt diferite.

Pasul 3: Procesarea semnalului

Procesare semnal
Procesare semnal

Pentru a „dezamixa” aceste semnale, am folosit o formulă relativ simplă:

S0 = V0 ^ 2 / ((V1 * a0 + b0) (V2 * c0 + d0)), unde S0 - scor pentru canalul 0, V0, V1, V2 - valori brute pentru canalele 0, 1, 2 și a, b, c, d - coeficienți pe care i-am ajustat manual (a și c au fost de la 0,3 la 2,0, b și d au fost 15 și 20, ar trebui să le schimbați oricum pentru a le ajusta pentru plasarea senzorului particular). Același scor a fost calculat pentru canalele 1 și 2. După aceasta, graficele au devenit aproape perfect separate. Pentru aceleași gesturi (de data aceasta degetul inelar, mijlocul și apoi degetul mare) semnalele sunt clare și pot fi ușor traduse în mișcări servo doar prin compararea cu pragul

Pasul 4: Scheme

Scheme
Scheme

Schema este destul de simplă, aveți nevoie doar de modul nRF24, PCA9685 sau un controler I2C PWM similar și o sursă de alimentare cu amplificator mare de 5V, care ar fi suficientă pentru a muta toate aceste servouri simultan (deci necesită o putere nominală de cel puțin 5A pentru o funcționare stabilă).

Lista conexiunilor: pinul 1 nRF24 (GND) - Pinul 2 GNDnRF24 al Arduino (Vcc) - Pinul 3 Arduino 3vnRF24 3 (Chip Enable) - Pinul Arduino D9nRF24 4 (SPI: CS) - Pinul D8nRF24 Arduino 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 - Arduino's GND - Arduino's - Canalele PCA 0-4, în notația mea degetul mare - canalul 0, degetul arătător - canalul 1 etc.

Pasul 5: Amplasarea senzorilor EMG

Amplasarea senzorilor EMG
Amplasarea senzorilor EMG
Amplasarea senzorilor EMG
Amplasarea senzorilor EMG

Pentru a obține citiri rezonabile, este important să plasați dispozitivele uECG, care înregistrează activitatea musculară, în locuri potrivite. Deși aici sunt posibile multe opțiuni diferite, fiecare necesită o abordare diferită de procesare a semnalului - așa că, cu codul meu, este mai bine să folosiți plasarea similară cu fotografiile mele. Poate fi contra-intuitivă, dar semnalul muscular al degetului mare este mai bine vizibil pe partea opusă a brațului, așa că unul dintre senzori este așezat acolo și toți sunt așezați aproape de cot (mușchii au cea mai mare parte a corpului în acea zonă, dar doriți să verificați unde se află exact al vostru - există o diferență individuală destul de mare)

Pasul 6: Cod

Înainte de a rula programul principal, va trebui să aflați ID-urile unităților dispozitivelor dvs. uECG (se face decomentând linia 101 și pornind dispozitivele unul câte unul, veți vedea ID-ul dispozitivului curent printre altele) și le completați în matrice unit_ids (linia 37). În afară de aceasta, doriți să vă jucați cu coeficienții de formulă (liniile 129-131) și să verificați cum arată pe plotterul serial înainte de a-l atașa la mâna robotică.

Pasul 7: Rezultate

Cu câteva experimente care au durat aproximativ 2 ore, am reușit să obțin o operare destul de fiabilă (videoclipul arată un caz tipic). Nu se comportă perfect și cu această procesare poate recunoaște doar degetele deschise și închise (și nici măcar fiecare dintre cele 5, detectează doar 3 grupe musculare: degetul mare, indexul și mijlocul împreună, inelul și degetele mici împreună). Dar „AI” care analizează semnalul ia aici 3 linii de cod și folosește o singură valoare din fiecare canal. Cred că s-ar putea face mult mai mult prin analiza imaginilor spectrale 32-bin pe PC sau smartphone. De asemenea, această versiune folosește doar 3 dispozitive uECG (canale EMG). Cu mai multe canale ar trebui să fie posibil să recunoaștem modele cu adevărat complexe - dar bine, acesta este scopul proiectului, de a oferi un punct de plecare pentru oricine este interesat:) Controlul manual nu este cu siguranță singura aplicație pentru un astfel de sistem.

Recomandat: