Satura rādītājs:
- Piegādes
- 1. darbība: signāla iegūšana
- 2. darbība: vienkāršots signāls
- 3. solis: signālu apstrāde
- 4. solis: shēmas
- 5. solis: EMG sensoru izvietošana
- 6. darbība: kods
- 7. darbība: rezultāti
Video: Robotiskā rokas vadība ar EMG: 7 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:55
Šis projekts parāda robotizētas rokas kontroli (izmantojot atvērtā avota roku inMoov) ar 3 atvērtā avota uECG ierīcēm, ko izmanto muskuļu aktivitātes mērīšanai un apstrādei (elektromiogramma, EMG). Mūsu komandai ir garš stāsts ar rokām un viņu kontroli, un tas ir labs solis pareizajā virzienā:)
Piegādes
3x uECG ierīces 1x Arduino (es izmantoju Nano, bet lielākā daļa citu darbotos) 1x nRF24 modulis (derētu jebkurš vispārējs) 1x PCA9685 vai līdzīgs servo draiveris 1x inMoov rokas 5x lieli servo (skatiet inMoov instrukcijas saderīgiem tipiem) 1x 5V barošanas avots 5A vai vairāk strāvas
1. darbība: signāla iegūšana
Kontroles pamatā ir EMG - muskuļu elektriskā aktivitāte. EMG signālu iegūst trīs uECG ierīces (es zinu, ka tam vajadzētu būt EKG monitoram, bet, tā kā tas ir balstīts uz vispārēju ADC, tas var izmērīt visus biosignālus, ieskaitot EMG). EMG apstrādei uECG ir īpašs režīms, kurā tas izsūta 32 bin spektra datus, un "muskuļu logu" vidējais (vidējā spektrālā intensitāte no 75 līdz 440 Hz). Spektra attēli izskatās kā zili zaļi raksti, kas laika gaitā mainās. Šeit frekvence atrodas uz vertikālas ass (katrā no 3 diagrammām, zemā frekvence apakšā, augsta augšpusē - no 0 līdz 488 Hz ar ~ 15 Hz soļiem), laiks ir horizontāls (vecie dati kopumā kreisajā pusē šeit ekrānā ir aptuveni 10 sekundes). Intensitāte ir kodēta ar krāsu: zila - zema, zaļa - vidēja, dzeltena - augsta, sarkana - vēl augstāka.
2. darbība: vienkāršots signāls
Lai nodrošinātu uzticamu žestu atpazīšanu, ir nepieciešama šo spektrālo attēlu pareiza datora apstrāde. Bet, lai vienkārši aktivizētu rokas pirkstus ar robotu, pietiek tikai izmantot vidējo vērtību 3 kanālos - uECG to ērti nodrošina noteiktos pakešu baitos, lai Arduino skice varētu to parsēt. Šīs vērtības izskatās daudz vienkāršākas - esmu pievienojis neapstrādātu vērtību diagrammu no Arduino sērijas plotera. Sarkanas, zaļas, zilas diagrammas ir neapstrādātas vērtības no 3 uECG ierīcēm dažādās muskuļu grupās, kad es attiecīgi saspiedu īkšķi, gredzenu un vidējos pirkstus. Mūsu acīs šie gadījumi acīmredzami ir atšķirīgi, taču mums šīs vērtības kaut kā jāpārvērš par "pirkstu rādītājiem", lai programma varētu izvadīt vērtības rokas servos. Problēma ir tāda, ka signāli no muskuļu grupām ir "sajaukti": pirmajā un trešajā gadījumā zilā signāla intensitāte ir aptuveni vienāda, bet sarkanā un zaļā ir atšķirīgas. Otrajā un trešajā gadījumā zaļie signāli ir vienādi, bet zils un sarkans atšķiras.
3. solis: signālu apstrāde
Lai šos signālus "sajauktu", esmu izmantojis salīdzinoši vienkāršu formulu:
S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), kur S0 - rezultāts kanālam 0, V0, V1, V2 - neapstrādātas vērtības kanāliem 0, 1, 2 un a, b, c, d - koeficienti, kurus es noregulēju manuāli (a un c bija no 0,3 līdz 2,0, b un d bija 15 un 20, tie jebkurā gadījumā būs jāmaina, lai pielāgotos konkrētajam sensora izvietojumam). Tāds pats rādītājs tika aprēķināts 1. un 2. kanālam. Pēc tam diagrammas gandrīz pilnībā atdalījās. To pašu žestu (šoreiz gredzenveida pirkstu, vidējo un pēc tam īkšķa) signāli ir skaidri un tos var viegli pārvērst servo kustībās, salīdzinot ar slieksni
4. solis: shēmas
Shēma ir pavisam vienkārša, jums ir nepieciešams tikai nRF24 modulis, PCA9685 vai līdzīgs I2C PWM kontrolleris un liela pastiprinātāja 5V barošanas avots, ar ko pietiktu, lai pārvietotu visus šos servos vienlaicīgi (tātad stabilai darbībai nepieciešama vismaz 5A nominālā jauda).
Savienojumu saraksts: nRF24 pin 1 (GND) - Arduino's GNDnRF24 pin 2 (Vcc) - Arduino 3.3vnRF24 pin 3 (Chip Enable) - Arduino D9nRF24 pin 4 (SPI: CS) - Arduino D8nRF24 pin 5 (SPI: SCino's) - Arduino 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 5vPCA9685o Gmp pastiprinātājs PCA kanāli 0-4, manā notācijā īkšķis - kanāls 0, rādītājpirksts - kanāls 1 utt.
5. solis: EMG sensoru izvietošana
Lai iegūtu saprātīgus rādījumus, ir svarīgi pareizās vietās novietot uECG ierīces, kas reģistrē muskuļu darbību. Lai gan šeit ir iespējamas daudzas dažādas iespējas, katrai no tām ir nepieciešama atšķirīga signālu apstrādes pieeja - tāpēc ar manu kodu vislabāk ir izmantot izvietojumu, kas līdzīgs manām fotogrāfijām. Tas var būt pretintuitīvs, bet īkšķa muskuļu signāls ir labāk redzams rokas pretējā pusē, tāpēc viens no sensoriem ir novietots tur, un tie visi ir novietoti tuvu elkoņam (muskuļiem lielākā daļa ķermeņa atrodas šajā zonā, bet jūs vēlaties pārbaudīt, kur atrodas tieši jūsu - ir diezgan liela individuālā atšķirība)
6. darbība: kods
Pirms galvenās programmas palaišanas jums būs jānoskaidro jūsu konkrēto uECG ierīču vienību ID (tas tiek darīts, nekomentējot 101. rindu un ieslēdzot ierīces pa vienai, cita starpā redzēsit pašreizējās ierīces ID) un tās jāaizpilda masīvs unit_ids (37. rinda). Izņemot šo, jūs vēlaties spēlēt ar formulu koeficientiem (129.-131. Rindas) un pārbaudīt, kā tas izskatās sērijveida ploterī, pirms to piestiprināt pie robota rokas.
7. darbība: rezultāti
Ar dažiem eksperimentiem, kas ilga apmēram 2 stundas, man izdevās iegūt diezgan uzticamu darbību (video parāda tipisku gadījumu). Tas uzvedas ne perfekti un ar šo apstrādi var atpazīt tikai atvērtus un aizvērtus pirkstus (un pat ne katrs no 5, tas nosaka tikai 3 muskuļu grupas: īkšķi, rādītājpirkstu un vidējo kopā, gredzenu un mazos pirkstus kopā). Bet "AI", kas analizē signālu, šeit ņem 3 koda rindas un izmanto vienu vērtību no katra kanāla. Es uzskatu, ka daudz vairāk varētu paveikt, analizējot 32 bin spektrālos attēlus datorā vai viedtālrunī. Arī šajā versijā tiek izmantotas tikai 3 uECG ierīces (EMG kanāli). Izmantojot vairāk kanālu, vajadzētu būt iespējai atpazīt patiešām sarežģītus modeļus - bet nu, tā ir projekta būtība, lai sniegtu kādu sākumpunktu ikvienam interesentam:) Rokas vadība noteikti nav vienīgā lietojumprogramma šādai sistēmai.
Ieteicams:
Robotiskā roka ar satvērēju: 9 soļi (ar attēliem)
Robotiskā roka ar satvērēju: citronu koku novākšana tiek uzskatīta par smagu darbu koku lielā izmēra un arī reģionu karstā klimata dēļ, kur stāda citronkokus. Tāpēc mums ir vajadzīgs kaut kas cits, lai palīdzētu lauksaimniecības darbiniekiem vairāk pabeigt darbu
Robota rokas vadība ar TLV493D, kursorsviru un Arduino: 3 soļi
Robota rokas vadība ar TLV493D, kursorsviru un Arduino: alternatīvs kontrolieris jūsu robotam ar TLV493D sensoru, magnētiskais sensors ar 3 brīvības pakāpēm (x, y, z), ar kuriem jūs varētu kontrolēt savus jaunos projektus, izmantojot I2C sakarus. mikrokontrolleri un elektroniskā tāfele, kas Bast P
Vienkārša žestu vadība - kontrolējiet RC rotaļlietas ar rokas kustību: 4 soļi (ar attēliem)
Vienkārša žestu vadība - kontrolējiet savas RC rotaļlietas ar rokas kustību: Laipni lūdzam manā 'ible' #45. Pirms kāda laika es izveidoju pilnībā strādājošu BB8 RC versiju, izmantojot Lego Star Wars detaļas … https://www.instructables.com/id/Whats-Inside-My-R… Kad es redzēju, cik forši tas bija Sphero veidotajā Force Band, es domāju: "Labi, es c
ESP8266 RGB LED STRIP WIFI vadība - NODEMCU kā IR tālvadības pults LED joslai, kas tiek kontrolēta, izmantojot Wifi - RGB LED STRIP viedtālruņa vadība: 4 soļi
ESP8266 RGB LED STRIP WIFI vadība | NODEMCU kā IR tālvadības pults LED joslai, kas tiek kontrolēta, izmantojot Wifi | RGB LED STRIP viedtālruņa vadība: Sveiki, puiši, šajā apmācībā mēs iemācīsimies izmantot nodemcu vai esp8266 kā IR tālvadības pulti, lai kontrolētu RGB LED sloksni, un Nodemcu vadīs ar viedtālruni, izmantojot wifi. Tātad būtībā jūs varat kontrolēt RGB LED STRIP ar savu viedtālruni
Rokas tahikometrs uz rokas: 9 soļi
Rokas tahometrs, kas balstīts uz IR: šī pamācība ir balstīta uz ķēdi, ko portatīvajā digitālajā tahometrā ir aprakstījis electro18. Es domāju, ka būtu lietderīgi iegūt rokas ierīci un ka tas būtu jautrs projekts. Man patīk, kā ierīce izrādījās - dizains varētu būt