Sisukord:

Robotkäsijuhtimine EMG -ga: 7 sammu
Robotkäsijuhtimine EMG -ga: 7 sammu

Video: Robotkäsijuhtimine EMG -ga: 7 sammu

Video: Robotkäsijuhtimine EMG -ga: 7 sammu
Video: Kuidas koordinaatide abil robotkätt juhtida? | R69-1214 2024, Juuli
Anonim
Image
Image
Signaali omandamine
Signaali omandamine

See projekt näitab robotkäe juhtimist (kasutades avatud lähtekoodi inMoov) kolme avatud lähtekoodiga uECG -seadmega, mida kasutatakse lihaste aktiivsuse mõõtmiseks ja töötlemiseks (elektromüogramm, EMG). Meie meeskonnal on pikk lugu käte ja nende juhtimisega ning see on hea samm õiges suunas:)

Tarvikud

3x uECG seadmed 1x Arduino (ma kasutan Nano, kuid enamik teisi toimiks) 1x nRF24 moodul (iga üldine sobiks) 1x PCA9685 või sarnane servo draiver 1x inMoov käsi 5x suured servod (vt ühilduvate tüüpide kohta inMoovi juhiseid) 1x 5V toide 5A või rohkem voolu

Samm: signaali hankimine

Kontroll põhineb EMG -l - lihaste elektrilisel aktiivsusel. EMG -signaali saavad kolm uECG -seadet (ma tean, et see peaks olema EKG -monitor, kuid kuna see põhineb üldisel ADC -l, saab see mõõta mis tahes biosignaale, sealhulgas EMG -d). EMG töötlemiseks on uECG-l spetsiaalne režiim, milles see saadab välja 32-bin spektri andmed, ja "lihaste akna" keskmine (keskmine spektri intensiivsus vahemikus 75 kuni 440 Hz). Spektripildid näevad välja nagu sinakasrohelised mustrid, mis aja jooksul muutuvad. Siin on sagedus vertikaalteljel (igal 3 graafikul, madalsagedus all, kõrge ülaosas - 0 kuni 488 Hz, sammuga ~ 15 Hz), aeg on horisontaalsel kohal (vanad andmed vasakul üldiselt siin on ekraanil umbes 10 sekundit). Intensiivsus on kodeeritud värviga: sinine - madal, roheline - keskmine, kollane - kõrge, punane - veelgi suurem.

2. samm: lihtsustatud signaal

Lihtsustatud signaal
Lihtsustatud signaal

Usaldusväärse žestituvastuse jaoks on vaja nende spektripiltide nõuetekohast arvutitöötlust. Kuid robotkäe sõrmede lihtsaks aktiveerimiseks piisab, kui kasutada lihtsalt keskmist väärtust 3 kanalil - uECG pakub seda mugavalt teatud pakettbaitide kaupa, nii et Arduino visand saab seda sõeluda. Need väärtused tunduvad palju lihtsamad - olen lisanud Arduino jadaplaani toorväärtuste diagrammi. Punased, rohelised ja sinised graafikud on toorväärtused 3 uECG -seadmest erinevates lihasrühmades, kui pigistan vastavalt pöialt, sõrmust ja keskmist sõrme. Meie jaoks on need juhtumid selgelt erinevad, kuid me peame need väärtused kuidagi "sõrme skooriks" muutma, et programm saaks väärtusi käsiteenustele väljastada. Probleem on selles, et lihasrühmade signaalid on "segatud": esimesel ja kolmandal juhul on sinise signaali intensiivsus ligikaudu sama - kuid punane ja roheline on erinevad. Teisel ja kolmandal juhul on rohelised signaalid samad, kuid sinine ja punane on erinevad.

3. samm: signaali töötlemine

Signaali töötlemine
Signaali töötlemine

Nende signaalide "segamiseks" olen kasutanud suhteliselt lihtsat valemit:

S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), kus S0 - kanali 0, V0, V1, V2 skoor - kanalite 0, 1, 2 ja a toorväärtused, b, c, d - koefitsiendid, mida ma käsitsi reguleerisin (a ja c olid vahemikus 0,3 kuni 2,0, b ja d olid 15 ja 20, peate need igal juhul oma konkreetse anduri paigutuse jaoks kohandama). Sama skoor arvutati kanalite 1 ja 2 jaoks. Pärast seda eraldusid graafikud peaaegu ideaalselt. Samade žestide (seekord sõrmusesõrme, keskmise ja seejärel pöidla) signaalid on selged ja neid saab hõlpsasti muuta servoliigutusteks, kui võrrelda lävega

4. samm: skeemid

Skeemid
Skeemid

Skeem on üsna lihtne, vajate ainult nRF24 moodulit, PCA9685 vms I2C PWM kontrollerit ja suure võimendusega 5 V toiteallikat, millest piisaks kõigi nende servode korraga liigutamiseks (seega vajab see stabiilseks tööks vähemalt 5A nimivõimsust).

Ühenduste loend: nRF24 pin 1 (GND) - Arduino GNDnRF24 pin 2 (Vcc) - Arduino 3.3vnRF24 pin 3 (Chip Enable) - Arduino D9nRF24 pin 4 (SPI: CS) - Arduino D8nRF24 pin 5 (SPI: SCino) - Arduino D13nRF24 tihvt 6 (SPI: MOSI) - Arduino D11nRF24 tihvt 7 (SPI: MISO) - Arduino D12PCA9685 SDA - Arduino A4PCA9685 SCL - Arduino A5PCA9685 Vcc - Arduino 5vPCA9685o Gmp võimendi PCA kanalid 0-4, minu märkuses pöial - kanal 0, nimetissõrm - kanal 1 jne.

5. samm: EMG -andurite paigutamine

EMG andurite paigutus
EMG andurite paigutus
EMG andurite paigutus
EMG andurite paigutus

Mõistlike näitude saamiseks on oluline paigutada lihaste aktiivsust salvestavad uECG -seadmed õigesse kohta. Kuigi siin on võimalik palju erinevaid valikuid, nõuab igaüks erinevat signaalitöötlusmeetodit - nii et minu koodi puhul on kõige parem kasutada minu fotodele sarnast paigutust. See võib olla intuitiivne, kuid pöidlalihaste signaal on paremini nähtav käe vastasküljel, nii et üks anduritest on paigutatud sinna ja kõik need on paigutatud küünarnuki lähedale (lihastel on suurem osa kehast selles piirkonnas, kuid soovite kontrollida, kus täpselt teie oma asub - individuaalne erinevus on üsna suur)

6. samm: kood

Enne põhiprogrammi käivitamist peate välja selgitama oma konkreetsete uECG -seadmete ühikute ID -d (seda tehakse rea 101 kommenteerimata jätmisel ja seadmete ükshaaval sisselülitamisel, näete muuhulgas ka praeguse seadme ID -d). massiiv unit_ids (rida 37). Peale selle soovite mängida valemikoefitsientidega (read 129-131) ja kontrollida, kuidas see seeriaplotteril välja näeb, enne kui selle robotkäe külge kinnitate.

Samm 7: Tulemused

Mõne katsega, mis kestis umbes 2 tundi, suutsin saada üsna usaldusväärse töö (video näitab tüüpilist juhtumit). See käitub mitte ideaalselt ja selle töötlemisega tunneb ära ainult avatud ja suletud sõrmed (ja isegi mitte igaüks viiest, tuvastab see ainult 3 lihasrühma: pöidla, indeksi ja keskosa koos, sõrmuse ja väikesed sõrmed koos). Kuid signaali analüüsiv "AI" võtab siin 3 rida koodi ja kasutab iga kanali jaoks ühte väärtust. Usun, et 32-bin spektraalkujutiste analüüsimisel arvutis või nutitelefonis saaks palju rohkem ära teha. Samuti kasutab see versioon ainult 3 uECG -seadet (EMG -kanalit). Rohkemate kanalite korral peaks olema võimalik ära tunda tõeliselt keerukaid mustreid - aga noh, see on projekti mõte, et pakkuda huvilistele mingit lähtepunkti:) Käsijuhtimine pole sellise süsteemi jaoks kindlasti ainus rakendus.

Soovitan: