Turinys:

Robotų valdymas rankomis su EMG: 7 žingsniai
Robotų valdymas rankomis su EMG: 7 žingsniai

Video: Robotų valdymas rankomis su EMG: 7 žingsniai

Video: Robotų valdymas rankomis su EMG: 7 žingsniai
Video: Pain Management in Dysautonomia 2024, Lapkritis
Anonim
Image
Image
Signalo gavimas
Signalo gavimas

Šis projektas parodo robotų rankos valdymą (naudojant atviro šaltinio ranką inMoov) su 3 atviro šaltinio uECG prietaisais, naudojamais raumenų aktyvumui matuoti ir apdoroti (elektromiograma, EMG). Mūsų komanda turi ilgą istoriją su rankomis ir jų valdymu, ir tai yra geras žingsnis teisinga linkme:)

Prekės

3x uECG įrenginiai 1x „Arduino“(naudoju „Nano“, bet veiktų dauguma kitų) 1x „nRF24“modulis (tinka bet kuris bendras) 1x PCA9685 arba panašus servo tvarkyklė 1x „inMoov“ranka 5x dideli servo įrenginiai (suderinamų tipų instrukcijas žr. „InMoov“instrukcijose) 1x 5 V maitinimo šaltinis 5A ar daugiau srovės

1 žingsnis: signalo gavimas

Kontrolė pagrįsta EMG - elektrine raumenų veikla. EMG signalą gauna trys uECG įrenginiai (žinau, kad tai turėtų būti EKG monitorius, bet kadangi jis yra pagrįstas bendru ADC, jis gali išmatuoti bet kokius biosignalus, įskaitant EMG). EMG apdorojimui uECG turi specialų režimą, kuriame siunčia 32 dėžių spektro duomenis ir „raumenų lango“vidurkį (vidutinis spektrinis intensyvumas yra nuo 75 iki 440 Hz). Spektro vaizdai atrodo kaip melsvai žali modeliai, kurie laikui bėgant keičiasi. Čia dažnis yra vertikalioje ašyje (kiekviename iš 3 sklypų, žemas dažnis apačioje, aukštas viršuje - nuo 0 iki 488 Hz su ~ 15 Hz žingsniais), laikas yra horizontalioje padėtyje (seni duomenys kairėje apskritai čia ekrane yra apie 10 sekundžių). Intensyvumas užkoduotas spalva: mėlyna - žema, žalia - vidutinė, geltona - didelė, raudona - dar didesnė.

2 žingsnis: supaprastintas signalas

Supaprastintas signalas
Supaprastintas signalas

Norint patikimai atpažinti gestus, reikalingas tinkamas šių spektrinių vaizdų apdorojimas kompiuteriu. Tačiau norint paprasčiausiai suaktyvinti robotų rankų pirštus, pakanka tik naudoti vidutinę vertę 3 kanaluose - uECG patogiai pateikia ją tam tikrais paketų baitais, kad „Arduino“eskizas galėtų jį išanalizuoti. Šios vertės atrodo daug paprastesnės - pridedu neapdorotų verčių diagramą iš „Arduino“serijos braižytuvo. Raudona, žalia, mėlyna diagramos yra neapdorotos vertės iš 3 uECG prietaisų skirtingose raumenų grupėse, kai atitinkamai spaudžiu nykštį, žiedą ir vidurinius pirštus. Mūsų akimis šie atvejai akivaizdžiai skiriasi, tačiau turime šias vertes kažkaip paversti „pirštų balais“, kad programa galėtų išvesti vertes į rankinius servus. Problema ta, kad raumenų grupių signalai yra „sumaišyti“: 1 ir 3 atvejais mėlyno signalo intensyvumas yra maždaug vienodas, tačiau raudona ir žalia skiriasi. Antruoju ir trečiuoju atvejais žali signalai yra vienodi, tačiau mėlyni ir raudoni skiriasi.

3 žingsnis: Signalo apdorojimas

Signalo apdorojimas
Signalo apdorojimas

Norėdami „sumaišyti“šiuos signalus, naudojau gana paprastą formulę:

S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), kur S0 - 0 kanalo balas, V0, V1, V2 - neapdorotos 0, 1, 2 ir a kanalų vertės, b, c, d - koeficientai, kuriuos aš sureguliavau rankiniu būdu (a ir c buvo nuo 0,3 iki 2,0, b ir d buvo 15 ir 20, bet kokiu atveju turėsite juos pakeisti, kad prisitaikytumėte prie konkrečios jutiklio vietos). Tas pats balas buvo apskaičiuotas 1 ir 2 kanalams. Po to diagramos tapo beveik visiškai atskirtos. Tų pačių gestų (šį kartą bevardžio, vidurinio ir nykščio) signalai yra aiškūs ir gali būti lengvai išversti į servo judesius, palyginus su slenksčiu

4 žingsnis: schemos

Schemos
Schemos

Schema yra gana paprasta, jums reikia tik nRF24 modulio, PCA9685 ar panašaus I2C PWM valdiklio ir didelio stiprintuvo 5 V maitinimo šaltinio, kurio pakaktų vienu metu perkelti visus šiuos servo įrenginius (todėl stabiliam veikimui reikia ne mažesnės kaip 5 A galios).

Ryšių sąrašas: nRF24 kaištis 1 (GND) - „Arduino“GNDnRF24 kaištis 2 („Vcc“) - „Arduino“3.3vnRF24 kaištis 3 (įjungta mikroschema) - „Arduino“D9nRF24 kaištis 4 (SPI: CS) - „Arduino“D8nRF24 kaištis 5 (SPI: SCino) - Arduino D13nRF24 kaištis 6 (SPI: MOSI) - „Arduino“D11nRF24 kaištis 7 (SPI: MISO) - „Arduino“D12PCA9685 SDA - „Arduino“A4PCA9685 SCL - „Arduino“A5PCA9685 Vcc - „Arduino“5vPCA9685g stiprintuvo stiprintuvas PCA kanalai 0-4, mano žymėjime nykštys - kanalas 0, rodomasis pirštas - 1 kanalas ir kt.

5 žingsnis: EMG jutiklių išdėstymas

EMG jutiklių išdėstymas
EMG jutiklių išdėstymas
EMG jutiklių išdėstymas
EMG jutiklių išdėstymas

Norint gauti pagrįstus rodmenis, svarbu įdėti uECG prietaisus, kurie registruoja raumenų veiklą, tinkamose vietose. Nors čia galima pasirinkti daugybę skirtingų variantų, kiekvienam reikalingas skirtingas signalo apdorojimo metodas, todėl mano kodo atveju geriausia naudoti vietą, panašią į mano nuotraukas. Tai gali būti nesąmoninga, tačiau nykščio raumenų signalas geriau matomas priešingoje rankos pusėje, todėl vienas iš jutiklių yra ten, ir visi jie yra arti alkūnės (raumenys turi didžiąją kūno dalį toje srityje, bet jūs norite patikrinti, kur tiksliai yra jūsų - yra gana didelis individualus skirtumas)

6 žingsnis: kodas

Prieš paleisdami pagrindinę programą, turėsite sužinoti savo konkrečių uECG įrenginių vienetų ID (tai daroma nekomentuojant 101 eilutės ir įjungiant įrenginius po vieną, be kita ko, pamatysite dabartinio įrenginio ID) ir užpildykite juos masyvas unit_ids (37 eilutė). Išskyrus tai, jūs norite žaisti su formulės koeficientais (129–131 eilutės) ir patikrinti, kaip jis atrodo serijiniame braižytuve, prieš pritvirtindamas jį prie roboto rankos.

7 žingsnis: Rezultatai

Su kai kuriais eksperimentais, kurie truko apie 2 valandas, man pavyko atlikti gana patikimą operaciją (vaizdo įraše parodytas tipiškas atvejis). Jis elgiasi ne idealiai ir šiuo apdorojimu gali atpažinti tik atidarytus ir uždarytus pirštus (ir net ne kiekvieną iš 5, jis aptinka tik 3 raumenų grupes: nykštį, rodyklę ir vidurį kartu, žiedinį ir mažuosius pirštus kartu). Tačiau „AI“, kuris analizuoja signalą, čia užima 3 kodo eilutes ir naudoja vieną vertę iš kiekvieno kanalo. Manau, kad daug daugiau būtų galima padaryti analizuojant 32 dėžių spektrinius vaizdus asmeniniame kompiuteryje ar išmaniajame telefone. Be to, šioje versijoje naudojami tik 3 uECG įrenginiai (EMG kanalai). Turint daugiau kanalų, turėtų būti įmanoma atpažinti išties sudėtingus modelius - bet gerai, tai yra projekto esmė, suteikti tam tikrą atskaitos tašką visiems besidomintiems:) Rankinis valdymas tikrai nėra vienintelė tokios sistemos programa.

Rekomenduojamas: