Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Signalinnsamling
- Trinn 2: Forenklet signal
- Trinn 3: Signalbehandling
- Trinn 4: Skjemaer
- Trinn 5: Plassering av EMG -sensorer
- Trinn 6: Kode
- Trinn 7: Resultater
Video: Robot håndkontroll med EMG: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Dette prosjektet viser kontroll over robotisk hånd (ved hjelp av opensource -hånd inMoov) med 3 opensource uECG -enheter som brukes til å måle og behandle muskelaktivitet (elektromyogram, EMG). Teamet vårt har en lang historie med hendene og deres kontroll, og dette er et godt skritt i riktig retning:)
Rekvisita
3x uECG -enheter 1x Arduino (jeg bruker Nano, men de fleste andre ville fungere) 1x nRF24 -modul (hvilken som helst generisk) 1x PCA9685 eller lignende servodriver 1x iMoov -hånd5x store servoer (se inMoov -instruksjoner for kompatible typer) 1x 5V strømforsyning som kan 5A eller mer strøm
Trinn 1: Signalinnsamling
Kontroll er basert på EMG - elektrisk aktivitet i muskler. EMG -signal oppnås av tre uECG -enheter (jeg vet, det skal være en EKG -monitor, men siden det er basert på en generisk ADC, kan det måle alle biosignaler - inkludert EMG). For EMG-behandling har uECG en spesiell modus der den sender ut 32-bin spekterdata og "muskelvindu" gjennomsnitt (gjennomsnittlig spektralintensitet mellom 75 og 440 Hz). Spektrumbilder ser ut som blågrønne mønstre som endres over tid. Her er frekvensen på en vertikal akse (på hver av 3 tomter, lav frekvens nederst, høy øverst - fra 0 til 488 Hz med ~ 15 Hz trinn), er tiden horisontal (gamle data til venstre totalt her er omtrent 10 sekunder på skjermen). Intensitet er kodet med farge: blå - lav, grønn - middels, gul - høy, rød - enda høyere.
Trinn 2: Forenklet signal
For en pålitelig gestgjenkjenning kreves en skikkelig PC -behandling av disse spektrale bildene. Men for enkel aktivering av robotiske håndfingre er det nok å bare bruke gjennomsnittsverdi på 3 kanaler - uECG gir det praktisk ved visse pakkebyte slik at Arduino -skisse kan analysere det. Disse verdiene ser mye enklere ut - jeg har vedlagt et diagram med råverdier fra Arduinos Serial Plotter. Røde, grønne, blå diagrammer er råverdier fra 3 uECG -enheter på forskjellige muskelgrupper når jeg klemmer tommel, ring og langfingre tilsvarende. For vårt øye er disse tilfellene tydelig forskjellige, men vi må gjøre disse verdiene til "finger score" på en eller annen måte, slik at et program kan sende ut verdier til håndservoer. Problemet er at signaler fra muskelgrupper er "blandet": i første og tredje tilfelle er blå signalintensitet omtrent den samme - men rødt og grønt er forskjellig. I andre og tredje tilfelle er grønne signaler de samme - men blått og rødt er forskjellige.
Trinn 3: Signalbehandling
For å "unmix" disse signalene har jeg brukt en relativt enkel formel:
S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), hvor S0 - score for kanal 0, V0, V1, V2 - råverdier for kanalene 0, 1, 2 og a, b, c, d - koeffisienter som jeg justerte manuelt (a og c var fra 0,3 til 2,0, b og d var 15 og 20, du må uansett endre dem for å justere for din spesielle sensorplassering). Den samme poengsummen ble beregnet for kanal 1 og 2. Etter dette ble diagrammer nesten perfekt skilt. For de samme bevegelsene (denne gangen ringfingeren, midten og deretter tommelen) er signalene tydelige og kan lett oversettes til servobevegelser bare ved å sammenligne med terskelen
Trinn 4: Skjemaer
Skjemaer er ganske enkle, du trenger bare nRF24 -modul, PCA9685 eller lignende I2C PWM -kontroller og 5V strømforsyning som vil være nok til å flytte alle disse servoene samtidig (så det krever minst 5A nominell effekt for stabil drift).
Liste over tilkoblinger: 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 - GN9 - GN9 - High9 PCA -kanaler 0-4, i min notasjonstommel - kanal 0, pekefinger - kanal 1 etc.
Trinn 5: Plassering av EMG -sensorer
For å få rimelige målinger er det viktig å plassere uECG -enheter, som registrerer muskelaktivitet, på de riktige stedene. Selv om mange forskjellige alternativer er mulige her, krever hver av dem en annen signalbehandlingsmetode - så med koden min er det best å bruke plassering som ligner bildene mine. Det kan være mot -intuitivt, men tommelmuskelsignal er bedre synlig på motsatt side av armen, så en av sensorene er plassert der, og alle er plassert nær albuen (muskler har det meste av kroppen i det området, men du vil sjekke hvor akkurat din er plassert - det er en ganske stor individuell forskjell)
Trinn 6: Kode
Før du kjører hovedprogrammet, må du finne ut enhets -ID -er for dine spesifikke uECG -enheter (det gjøres ved å ikke kommentere linje 101 og slå enheter på en etter en, du vil blant annet se IDen til gjeldende enhet) og fylle dem inn unit_ids array (linje 37). Annet enn dette, vil du leke med formelkoeffisienter (linje 129-131) og sjekke hvordan det ser ut på seriell plotter før du fester det til robothånden.
Trinn 7: Resultater
Med noen eksperimenter som tok omtrent 2 timer, var jeg i stand til å få en ganske pålitelig drift (video viser et typisk tilfelle). Den oppfører seg ikke perfekt, og med denne behandlingen kan den bare gjenkjenne åpne og lukkede fingre (og ikke engang hver av de 5 oppdager den bare 3 muskelgrupper: tommel, indeks og midten sammen, ring og små fingre sammen). Men "AI" som analyserer signal tar 3 linjer med kode her og bruker en enkelt verdi fra hver kanal. Jeg tror mye mer kan gjøres ved å analysere 32-bin spektralbilder på PC eller smarttelefon. Denne versjonen bruker også bare 3 uECG -enheter (EMG -kanaler). Med flere kanaler burde det være mulig å gjenkjenne virkelig komplekse mønstre - men vel, det er poenget med prosjektet, å gi et utgangspunkt for alle som er interessert:) Håndkontroll er definitivt ikke den eneste applikasjonen for et slikt system.
Anbefalt:
EMG Biofeedback: 18 trinn (med bilder)
EMG Biofeedback: Dette biofeedback -oppsettet bruker en EMG -sensor til å representere muskelspenninger som en serie pip og lar deg trene kroppen din til å justere muskelspenninger etter ønske. Kort sagt, jo mer anspent du er, jo raskere blir pipene, og jo mer avslappet blir det
DIY Emg-sensor med og uten mikrokontroller: 6 trinn
DIY Emg-sensor med og uten mikrokontroller: Velkommen til kunnskapsdeling av instruksjonsplattformer. I denne instruksen skal jeg diskutere hvordan du lager en grunnleggende emg-krets og bak matematiske beregninger som er involvert i den. Du kan bruke denne kretsen til å observere variasjoner i muskelpuls, kontroll
Menneskelig-datamaskin-grensesnitt: Funger en griper (laget av Kirigami) av håndleddsbevegelse ved hjelp av EMG .: 7 trinn
Menneskelig-datamaskin-grensesnitt: Funger en griper (laget av Kirigami) av håndleddsbevegelse ved hjelp av EMG .: Så dette var mitt første forsøk på et grensesnitt mellom mennesker og datamaskiner. gjennom python og arduino og aktiverte en origami -basert griper
[EMG] Muskelaktiveret bryter: 3 trinn
[EMG] Muskelaktiveret bryter: Denne prototypen demonstrerer potensialet til rimelig og åpen kildekode-maskinvare/programvare for å muliggjøre datamaskinstyring gjennom elektrisk muskelaktivitet. Kostnaden forbundet med hyllenhetene begrenser tilgangen til denne teknologien, som kan b
Skrive med EMG ved hjelp av MyoWare: 8 trinn
Skriver med EMG ved hjelp av MyoWare: Forfattere: L. Elizabeth Crawford & Dylan T. VavraIntroduksjon: I denne opplæringen skal vi vise deg hvordan du lager et enkelt elektromyografi (EMG) hjemme - til en pris av omtrent $ 100 - som vil føle muskelaktivering fra overflaten