Sommario:

Controllo manuale robotico con EMG: 7 passaggi
Controllo manuale robotico con EMG: 7 passaggi

Video: Controllo manuale robotico con EMG: 7 passaggi

Video: Controllo manuale robotico con EMG: 7 passaggi
Video: Semplice serratura a combinazione con Arduino - Video 365 2024, Novembre
Anonim
Image
Image
Acquisizione del segnale
Acquisizione del segnale

Questo progetto mostra il controllo della mano robotica (usando la mano opensource inMoov) con 3 dispositivi uECG opensource utilizzati per misurare ed elaborare l'attività muscolare (elettromiogramma, EMG). Il nostro team ha una lunga storia con le mani e il loro controllo, e questo è un buon passo nella giusta direzione:)

Forniture

3x dispositivi uECG1x Arduino (sto usando Nano ma la maggior parte degli altri funzionerebbe)1x modulo nRF24 (qualsiasi generico andrebbe bene)1x PCA9685 o servo driver simile1x inMoov hand5x grandi servi (vedere le istruzioni inMoov per i tipi compatibili)1x alimentatore 5V in grado di 5A o più di corrente

Passaggio 1: acquisizione del segnale

Il controllo si basa sull'EMG - attività elettrica dei muscoli. Il segnale EMG è ottenuto da tre dispositivi uECG (lo so, dovrebbe essere un monitor ECG, ma poiché si basa su un ADC generico, può misurare qualsiasi segnale biologico, incluso l'EMG). Per l'elaborazione EMG, uECG ha una modalità speciale in cui invia i dati dello spettro a 32 bin e la media della "finestra muscolare" (intensità spettrale media tra 75 e 440 Hz). Le immagini dello spettro sembrano modelli blu-verdi che cambiano nel tempo. Qui la frequenza è su un asse verticale (su ciascuno dei 3 grafici, bassa frequenza in basso, alta in alto - da 0 a 488 Hz con incrementi di ~15 Hz), il tempo è orizzontale (vecchi dati a sinistra in generale qui è di circa 10 secondi sullo schermo). L'intensità è codificata con il colore: blu - basso, verde - medio, giallo - alto, rosso - ancora più alto.

Passaggio 2: segnale semplificato

Segnale semplificato
Segnale semplificato

Per un riconoscimento affidabile dei gesti, è necessaria una corretta elaborazione da PC di queste immagini spettrali. Ma per una semplice attivazione delle dita della mano robotica, è sufficiente utilizzare solo il valore medio su 3 canali: uECG lo fornisce convenientemente a determinati byte di pacchetto in modo che lo schizzo Arduino possa analizzarlo. Questi valori sembrano molto più semplici: ho allegato un grafico di valori grezzi dal plotter seriale di Arduino. I grafici rosso, verde e blu sono valori grezzi di 3 dispositivi uECG su diversi gruppi muscolari quando premo il pollice, l'anulare e il medio di conseguenza. Per i nostri occhi questi casi sono chiaramente diversi, ma dobbiamo trasformare quei valori in "punteggio delle dita" in qualche modo in modo che un programma possa inviare valori ai servi manuali. Il problema è che i segnali dei gruppi muscolari sono "misti": nel primo e nel terzo caso l'intensità del segnale blu è più o meno la stessa, ma il rosso e il verde sono diversi. Nel 2° e 3° caso i segnali verdi sono gli stessi, ma il blu e il rosso sono diversi.

Passaggio 3: elaborazione del segnale

Elaborazione del segnale
Elaborazione del segnale

Per "scomporre" questi segnali, ho usato una formula relativamente semplice:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), dove S0 - punteggio per il canale 0, V0, V1, V2 - valori grezzi per i canali 0, 1, 2 e a, b, c, d - coefficienti che ho regolato manualmente (a e c erano da 0,3 a 2,0, b e d erano 15 e 20, avresti comunque bisogno di cambiarli per adattarli al tuo particolare posizionamento del sensore). Lo stesso punteggio è stato calcolato per i canali 1 e 2. Successivamente, i grafici sono diventati quasi perfettamente separati. Per gli stessi gesti (questa volta anulare, medio e poi pollice) i segnali sono chiari e possono essere facilmente tradotti in movimenti del servo semplicemente confrontando con la soglia

Fase 4: Schemi

Schematico
Schematico

Lo schema è abbastanza semplice, è necessario solo il modulo nRF24, PCA9685 o un controller PWM I2C simile e un alimentatore da 5 V ad alto amplificatore che sarebbe sufficiente per spostare tutti questi servi contemporaneamente (quindi richiede una potenza nominale di almeno 5 A per un funzionamento stabile).

Elenco delle connessioni: nRF24 pin 1 (GND) - Arduino GNDnRF24 pin 2 (Vcc) - Arduino 3.3vnRF24 pin 3 (Chip Enable) - Arduino D9nRF24 pin 4 (SPI:CS) - Arduino D8nRF24 pin 5 (SPI: SCK) - Arduino D13nRF24 pin 6 (SPI:MOSI) - D11nRF24 pin 7 (SPI:MISO) di Arduino - D12PCA9685 SDA di Arduino - A4PCA9685 SCL di Arduino - A5PCA9685 Vcc di Arduino - 5vPCA9685 GND di Arduino - GNDPCA9685 V+ di Arduino GNDPCA9685 - amplificatore alto 5NDDFinger: servoamplificatore 5 Canali PCA 0-4, nella mia notazione pollice - canale 0, indice - canale 1 ecc.

Passaggio 5: posizionamento dei sensori EMG

Posizionamento dei sensori EMG
Posizionamento dei sensori EMG
Posizionamento dei sensori EMG
Posizionamento dei sensori EMG

Per ottenere letture ragionevoli, è importante posizionare i dispositivi uECG, che registrano l'attività muscolare, nei posti giusti. Sebbene qui siano possibili molte opzioni diverse, ognuna richiede un approccio di elaborazione del segnale diverso, quindi con il mio codice è meglio utilizzare un posizionamento simile alle mie foto. Potrebbe essere controintuitivo, ma il segnale del muscolo del pollice è meglio visibile sul lato opposto del braccio, quindi uno dei sensori è posizionato lì e tutti sono posizionati vicino al gomito (i muscoli hanno la maggior parte del loro corpo in quell'area, ma vuoi controllare dove si trovano esattamente i tuoi - c'è una grande differenza individuale)

Passaggio 6: codice

Prima di eseguire il programma principale, dovrai scoprire gli ID unità dei tuoi particolari dispositivi uECG (è fatto decommentando la riga 101 e accendendo i dispositivi uno per uno, vedrai l'ID del dispositivo corrente tra le altre cose) e inserirli in array_id_unità (riga 37). Oltre a questo, vuoi giocare con i coefficienti della formula (righe 129-131) e controllare come appare sul plotter seriale prima di collegarlo alla mano robotica.

Passaggio 7: risultati

Con alcuni esperimenti che hanno richiesto circa 2 ore, sono stato in grado di ottenere un funzionamento abbastanza affidabile (il video mostra un caso tipico). Si comporta non perfettamente e con questa elaborazione riesce a riconoscere solo le dita aperte e chiuse (e nemmeno ognuna delle 5, rileva solo 3 gruppi muscolari: pollice, indice e medio insieme, anulare e mignolo insieme). Ma "AI" che analizza il segnale richiede 3 righe di codice qui e utilizza un singolo valore da ciascun canale. Credo che si possa fare molto di più analizzando le immagini spettrali a 32 bin su PC o smartphone. Inoltre, questa versione utilizza solo 3 dispositivi uECG (canali EMG). Con più canali dovrebbe essere possibile riconoscere schemi davvero complessi - ma beh, questo è il punto del progetto, fornire un punto di partenza per chiunque sia interessato:) Il controllo manuale non è sicuramente l'unica applicazione per tale sistema.

Consigliato: