Innehållsförteckning:

Robotisk handkontroll med EMG: 7 steg
Robotisk handkontroll med EMG: 7 steg

Video: Robotisk handkontroll med EMG: 7 steg

Video: Robotisk handkontroll med EMG: 7 steg
Video: Silverlit Robo Kombat Vikings - radiostyrda robotar för maxat kul! 2024, Juli
Anonim
Image
Image
Signalförvärv
Signalförvärv

Detta projekt visar kontroll av robothand (med hjälp av opensource -hand inMoov) med tre uECG -enheter för opensource som används för att mäta och bearbeta muskelaktivitet (elektromyogram, EMG). Vårt team har en lång historia med händerna och deras kontroll, och det här är ett bra steg i rätt riktning:)

Tillbehör

3x uECG -enheter 1x Arduino (jag använder Nano men de flesta andra skulle fungera) 1x nRF24 -modul (vilken generisk som helst skulle göra) 1x PCA9685 eller liknande servodrivrutin 1x inMoov hand5x stora servon (se inMoov -instruktioner för kompatibla typer) 1x 5V strömförsörjning som kan 5A eller mer ström

Steg 1: Signalförvärv

Kontrollen baseras på EMG - elektrisk aktivitet i muskler. EMG -signal erhålls av tre uECG -enheter (jag vet, det ska vara en EKG -monitor, men eftersom den är baserad på en generisk ADC kan den mäta alla biosignaler - inklusive EMG). För EMG-behandling har uECG ett speciellt läge där det skickar ut 32-bin spektrumdata och "muskelfönster" -genomsnitt (genomsnittlig spektralintensitet mellan 75 och 440 Hz). Spektrumbilder ser ut som blågröna mönster som förändras med tiden. Här ligger frekvensen på en vertikal axel (på var och en av tre tomter, låg frekvens längst ner, högt upptill - från 0 till 488 Hz med ~ 15 Hz steg), tiden är horisontell (gamla data till vänster totalt här är cirka 10 sekunder på skärmen). Intensitet är kodad med färg: blå - låg, grön - medium, gul - hög, röd - ännu högre.

Steg 2: Förenklad signal

Förenklad signal
Förenklad signal

För en tillförlitlig gestigenkänning krävs en ordentlig PC -bearbetning av dessa spektralbilder. Men för enkel aktivering av robothandfinger räcker det med att bara använda medelvärdet på 3 kanaler - uECG ger det bekvämt vid vissa paketbytes så att Arduino -skiss kan analysera det. Dessa värden ser mycket enklare ut - jag har bifogat ett diagram över råvärden från Arduinos Serial Plotter. Röda, gröna, blåa diagram är råvärden från 3 uECG -enheter på olika muskelgrupper när jag klämmer tumme, ring och långfingrar på motsvarande sätt. För vårt öga är dessa fall helt klart olika, men vi måste förvandla dessa värden till "finger score" på något sätt så att ett program kan mata ut värden till handservos. Problemet är att signaler från muskelgrupper är "blandade": i första och tredje fallet är blå signalintensitet ungefär densamma - men rött och grönt är olika. I andra och tredje fallet är gröna signaler desamma - men blått och rött är olika.

Steg 3: Signalbehandling

Signalbehandling
Signalbehandling

För att "avblanda" dessa signaler har jag använt en relativt enkel formel:

S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), där S0 - poäng för kanal 0, V0, V1, V2 - råvärden för kanaler 0, 1, 2 och a, b, c, d - koefficienter som jag justerade manuellt (a och c var från 0,3 till 2,0, b och d var 15 och 20, du skulle behöva ändra dem för att justera för just din sensorplacering ändå). Samma poäng beräknades för kanalerna 1 och 2. Efter detta blev diagrammen nästan perfekt separerade. För samma gester (den här gången ringfingret, mitten och sedan tummen) är signaler tydliga och kan enkelt översättas till servorörelser bara genom att jämföra med tröskel

Steg 4: Scheman

Scheman
Scheman

Schemat är ganska enkelt, du behöver bara nRF24 -modul, PCA9685 eller liknande I2C PWM -styrenhet och högförstärkare 5V strömförsörjning som skulle räcka för att flytta alla dessa servon samtidigt (så det kräver minst 5A märkeffekt för stabil drift).

Lista över anslutningar: 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 stift 6 (SPI: MOSI) - Arduinos D11nRF24 stift 7 (SPI: MISO) - Arduinos D12PCA9685 SDA - Arduinos A4PCA9685 SCL - Arduinos A5PCA9685 Vcc - Arduino's 5vPCA9685 GND - Ar685 GND - High9: GN9 - GN9 - GN9 - GN9 - GN9 - GN9 PCA -kanaler 0-4, i min notation tumme - kanal 0, pekfinger - kanal 1 etc.

Steg 5: Placering av EMG -sensorer

EMG Sensors placering
EMG Sensors placering
EMG Sensors placering
EMG Sensors placering

För att få rimliga avläsningar är det viktigt att placera uECG -enheter, som registrerar muskelaktivitet, på rätt ställen. Även om många olika alternativ är möjliga här, kräver alla olika signalbehandlingsmetoder - så med min kod är det bäst att använda placering som liknar mina foton. Det kan vara kontraintuitivt, men tummen muskelsignal är bättre synlig på motsatta sidan av armen, så en av sensorerna är placerade där, och alla är placerade nära armbågen (musklerna har det mesta av kroppen i det området, men du vill kontrollera var exakt din är placerad - det är en ganska stor individuell skillnad)

Steg 6: Kod

Innan du kör huvudprogrammet måste du ta reda på enhets -ID för dina specifika uECG -enheter (det görs genom att inte kommentera linje 101 och slå på enheter en efter en, du kommer att se ID för aktuell enhet bland annat) och fylla i dem unit_ids array (rad 37). Annat än detta vill du spela med formelkoefficienter (rad 129-131) och kontrollera hur det ser ut på serieplotter innan du fäster det på robothanden.

Steg 7: Resultat

Med några experiment som tog cirka 2 timmar kunde jag få en ganska tillförlitlig drift (video visar ett typiskt fall). Det uppför sig inte perfekt och med denna behandling kan bara känna igen öppna och stängda fingrar (och inte ens var och en av de 5 detekterar bara 3 muskelgrupper: tumme, index och mitt tillsammans, ring och små fingrar tillsammans). Men "AI" som analyserar signal tar 3 rader kod här och använder ett enda värde från varje kanal. Jag tror att mycket mer kan göras genom att analysera 32-bin spektralbilder på PC eller smartphone. Den här versionen använder också endast 3 uECG -enheter (EMG -kanaler). Med fler kanaler borde det vara möjligt att känna igen riktigt komplexa mönster - men ja, det är poängen med projektet, att ge någon utgångspunkt för alla intresserade:) Handkontroll är definitivt inte den enda applikationen för ett sådant system.

Rekommenderad: