Innholdsfortegnelse:

Robot håndkontroll med EMG: 7 trinn
Robot håndkontroll med EMG: 7 trinn

Video: Robot håndkontroll med EMG: 7 trinn

Video: Robot håndkontroll med EMG: 7 trinn
Video: Гексапод. Сборка и тестирование ноги. 2024, November
Anonim
Image
Image
Signalanskaffelse
Signalanskaffelse

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

Forenklet signal
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

Signal Prosessering
Signal Prosessering

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
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

EMG -sensorer plassering
EMG -sensorer plassering
EMG -sensorer plassering
EMG -sensorer plassering

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: