Inhoudsopgave:

Robothandbediening met EMG - Ajarnpa
Robothandbediening met EMG - Ajarnpa

Video: Robothandbediening met EMG - Ajarnpa

Video: Robothandbediening met EMG - Ajarnpa
Video: Realistic Robot Arm: Meet the Modular Prosthetic Limb! 2024, Juli-
Anonim
Image
Image
Signaal acquisitie
Signaal acquisitie

Dit project toont de besturing van een robothand (met behulp van opensourcehand inMoov) met 3 opensource uECG-apparaten die worden gebruikt voor het meten en verwerken van spieractiviteit (elektromyogram, EMG). Ons team heeft een lang verhaal met handen en hun controle, en dit is een goede stap in de goede richting:)

Benodigdheden

3x uECG-apparaten1x Arduino (ik gebruik Nano, maar de meeste anderen zouden werken)1x nRF24-module (elke generieke module zou doen)1x PCA9685 of vergelijkbare servodriver1x inMoov-hand5x grote servo's (zie inMoov-instructies voor compatibele typen)1x 5V-voeding die geschikt is voor 5A of meer stroom

Stap 1: Signaalacquisitie

De controle is gebaseerd op EMG - elektrische activiteit van spieren. Het EMG-signaal wordt verkregen door drie uECG-apparaten (ik weet het, het is de bedoeling dat het een ECG-monitor is, maar aangezien het is gebaseerd op een generieke ADC, kan het alle biosignalen meten, inclusief EMG). Voor EMG-verwerking heeft uECG een speciale modus waarin het 32-bin spectrumgegevens en het "spiervenster"-gemiddelde (gemiddelde spectrale intensiteit tussen 75 en 440 Hz) verzendt. Spectrumafbeeldingen zien eruit als blauwgroene patronen die in de loop van de tijd veranderen. Hier staat de frequentie op een verticale as (op elk van de 3 plots, lage frequentie onderaan, hoog bovenaan - van 0 tot 488 Hz met stappen van ~15 Hz), de tijd staat op een horizontale (oude gegevens links in het algemeen hier is ongeveer 10 seconden op het scherm). Intensiteit wordt gecodeerd met kleur: blauw - laag, groen - gemiddeld, geel - hoog, rood - zelfs hoger.

Stap 2: Vereenvoudigd signaal

Vereenvoudigd signaal
Vereenvoudigd signaal

Voor een betrouwbare gebarenherkenning is een goede pc-verwerking van deze spectrale beelden vereist. Maar voor eenvoudige activering van robothandvingers is het voldoende om gewoon de gemiddelde waarde op 3 kanalen te gebruiken - uECG levert het gemakkelijk op bepaalde pakketbytes, zodat Arduino-schets het kan ontleden. Deze waarden zien er veel eenvoudiger uit - ik heb een grafiek met onbewerkte waarden van Arduino's Serial Plotter bijgevoegd. Rode, groene en blauwe grafieken zijn ruwe waarden van 3 uECG-apparaten op verschillende spiergroepen wanneer ik dienovereenkomstig in duim, ring en middelvinger knijp. Voor ons oog zijn deze gevallen duidelijk anders, maar we moeten die waarden op de een of andere manier in "vingerscore" veranderen, zodat een programma waarden kan uitvoeren naar handservo's. Het probleem is dat signalen van spiergroepen "gemengd" zijn: in het 1e en 3e geval is de intensiteit van het blauwe signaal ongeveer hetzelfde - maar rood en groen zijn verschillend. In het 2e en 3e geval zijn groene seinen hetzelfde, maar blauw en rood zijn verschillend.

Stap 3: Signaalverwerking

Signaalverwerking
Signaalverwerking

Om deze signalen te "ontmengen", heb ik een relatief eenvoudige formule gebruikt:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), waarbij S0 - score voor kanaal 0, V0, V1, V2 - onbewerkte waarden voor kanalen 0, 1, 2 en a, b, c, d - coëfficiënten die ik handmatig heb aangepast (a en c waren van 0,3 tot 2,0, b en d waren 15 en 20, je zou ze toch moeten veranderen om ze aan te passen aan je specifieke sensorplaatsing). Dezelfde score werd berekend voor kanaal 1 en 2. Hierna werden grafieken bijna perfect gescheiden. Voor dezelfde gebaren (dit keer ringvinger, middel en dan duim) zijn de signalen duidelijk en kunnen ze eenvoudig worden vertaald in servobewegingen, gewoon door te vergelijken met de drempel

Stap 4: Schema's

Schema's
Schema's

Schema's zijn vrij eenvoudig, je hebt alleen een nRF24-module, PCA9685 of vergelijkbare I2C PWM-controller en een 5V-voeding met hoge ampère nodig die voldoende zou zijn om al deze servo's tegelijk te verplaatsen (dus het vereist minimaal 5A nominaal vermogen voor een stabiele werking).

Lijst met aansluitingen:nRF24 pin 1 (GND) - Arduino's GNDnRF24 pin 2 (Vcc) - Arduino's 3.3vnRF24 pin 3 (Chip Enable) - Arduino's 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 - Arduino's GNDPCA9685 V+96 - hoge versterker PCA kanalen 0-4, in mijn notatie duim - kanaal 0, wijsvinger - kanaal 1 etc.

Stap 5: plaatsing van EMG-sensoren

Plaatsing van EMG-sensoren
Plaatsing van EMG-sensoren
Plaatsing van EMG-sensoren
Plaatsing van EMG-sensoren

Om redelijke metingen te krijgen, is het belangrijk om uECG-apparaten, die spieractiviteit registreren, op de juiste plaatsen te plaatsen. Hoewel hier veel verschillende opties mogelijk zijn, vereist elk een andere benadering van signaalverwerking - dus met mijn code is het het beste om een plaatsing te gebruiken die vergelijkbaar is met mijn foto's. Het kan contra-intuïtief zijn, maar het signaal van de duimspier is beter zichtbaar aan de andere kant van de arm, dus een van de sensoren is daar geplaatst en ze zijn allemaal dicht bij de elleboog geplaatst (spieren hebben het grootste deel van hun lichaam in dat gebied, maar je wilt controleren waar die van jou zich precies bevinden - er is nogal een groot individueel verschil)

Stap 6: Coderen

Voordat u het hoofdprogramma uitvoert, moet u de unit-ID's van uw specifieke uECG-apparaten achterhalen (dit wordt gedaan door regel 101 te verwijderen en apparaten één voor één in te schakelen, u zult onder andere de ID van het huidige apparaat zien) en deze invullen in unit_ids array (regel 37). Anders dan dit, wil je spelen met formulecoëfficiënten (regels 129-131) en controleren hoe het eruit ziet op de seriële plotter voordat je het aan de robothand bevestigt.

Stap 7: Resultaten

Met enkele experimenten die ongeveer 2 uur duurden, kon ik een redelijk betrouwbare werking krijgen (video toont een typisch geval). Het gedraagt zich niet perfect en kan met deze verwerking alleen open en gesloten vingers herkennen (en zelfs niet elk van de 5, het detecteert slechts 3 spiergroepen: duim, wijs- en middelvinger samen, ringvinger en pink samen). Maar "AI" die het signaal analyseert, heeft hier 3 regels code en gebruikt een enkele waarde van elk kanaal. Ik geloof dat er veel meer zou kunnen worden gedaan door spectrale beelden met 32 bins op pc of smartphone te analyseren. Ook gebruikt deze versie slechts 3 uECG-apparaten (EMG-kanalen). Met meer kanalen zou het mogelijk moeten zijn om echt complexe patronen te herkennen - maar goed, dat is het punt van het project, om een startpunt te bieden voor iedereen die geïnteresseerd is:) Handbediening is zeker niet de enige toepassing voor een dergelijk systeem.

Aanbevolen: