Table des matières:

Commande manuelle robotisée avec EMG : 7 étapes
Commande manuelle robotisée avec EMG : 7 étapes

Vidéo: Commande manuelle robotisée avec EMG : 7 étapes

Vidéo: Commande manuelle robotisée avec EMG : 7 étapes
Vidéo: Adaptation boite de vitesse automatique Citroën C4 avec une MaxiSYS MS906 TS 2024, Novembre
Anonim
Image
Image
Acquisition de signaux
Acquisition de signaux

Ce projet montre le contrôle de la main robotique (en utilisant la main open source inMoov) avec 3 appareils uECG open source utilisés pour mesurer et traiter l'activité musculaire (électromyogramme, EMG). Notre équipe a une longue histoire avec les mains et leur contrôle, et c'est un bon pas dans la bonne direction:)

Fournitures

3x appareils uECG1x Arduino (j'utilise Nano mais la plupart des autres fonctionneraient)1x module nRF24 (n'importe quel générique ferait l'affaire)1x PCA9685 ou servodriver similaire1x inMoov hand5x gros servos (voir les instructions inMoov pour les types compatibles)1x alimentation 5V capable de 5A ou plus courant

Étape 1: Acquisition de signaux

Le contrôle est basé sur l'EMG - activité électrique des muscles. Le signal EMG est obtenu par trois appareils uECG (je sais, c'est censé être un moniteur ECG, mais comme il est basé sur un ADC générique, il peut mesurer tous les biosignaux - y compris l'EMG). Pour le traitement EMG, uECG dispose d'un mode spécial dans lequel il envoie des données spectrales à 32 bits et une moyenne de "fenêtre musculaire" (intensité spectrale moyenne entre 75 et 440 Hz). Les images du spectre ressemblent à des motifs bleu-vert qui changent avec le temps. Ici la fréquence est sur un axe vertical (sur chacun des 3 tracés, basse fréquence en bas, haute en haut - de 0 à 488 Hz avec des pas de ~ 15 Hz), le temps est sur une horizontale (anciennes données sur la gauche globalement ici est d'environ 10 secondes à l'écran). L'intensité est codée avec la couleur: bleu - faible, vert - moyen, jaune - élevé, rouge - encore plus élevé.

Étape 2: Signal simplifié

Signal simplifié
Signal simplifié

Pour une reconnaissance gestuelle fiable, un traitement PC approprié de ces images spectrales est requis. Mais pour une activation simple des doigts de la main robotique, il suffit d'utiliser la valeur moyenne sur 3 canaux - uECG la fournit commodément à certains octets de paquet afin que Arduino Sketch puisse l'analyser. Ces valeurs semblent beaucoup plus simples - j'ai joint un tableau des valeurs brutes du Serial Plotter d'Arduino. Les graphiques rouges, verts et bleus sont des valeurs brutes de 3 appareils uECG sur différents groupes musculaires lorsque je serre le pouce, l'annulaire et le majeur en conséquence. Pour notre œil, ces cas sont clairement différents, mais nous devons transformer ces valeurs en "score de doigt" d'une manière ou d'une autre afin qu'un programme puisse envoyer des valeurs aux servos manuels. Le problème est que les signaux des groupes musculaires sont « mélangés »: dans les 1er et 3e cas, l'intensité du signal bleu est à peu près la même - mais le rouge et le vert sont différents. Dans les 2e et 3e cas, les signaux verts sont les mêmes - mais le bleu et le rouge sont différents.

Étape 3: Traitement du signal

Traitement de signal
Traitement de signal

Afin de "démixer" ces signaux, j'ai utilisé une formule relativement simple:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), où S0 - score pour le canal 0, V0, V1, V2 - valeurs brutes pour les canaux 0, 1, 2 et a, b, c, d - coefficients que j'ai ajustés manuellement (a et c étaient de 0,3 à 2,0, b et d étaient de 15 et 20, vous devrez de toute façon les modifier pour ajuster le placement de votre capteur particulier). Le même score a été calculé pour les canaux 1 et 2. Après cela, les graphiques sont devenus presque parfaitement séparés. Pour les mêmes gestes (cette fois l'annulaire, le majeur, puis le pouce) les signaux sont clairs et peuvent être facilement traduits en mouvements d'asservissement simplement en comparant avec le seuil

Étape 4: Schémas

Schémas
Schémas

Le schéma est assez simple, vous n'avez besoin que d'un module nRF24, d'un PCA9685 ou d'un contrôleur I2C PWM similaire et d'une alimentation 5V à ampli élevé qui suffirait à déplacer tous ces servos à la fois (il nécessite donc au moins une puissance nominale de 5A pour un fonctionnement stable).

Liste des connexions: broche 1 nRF24 (GND) - broche 2 GNDnRF24 d'Arduino (Vcc) - broche 3 3.3vnRF24 d'Arduino (Chip Enable) - broche 4 D9nRF24 d'Arduino (SPI:CS) - broche 5 D8nRF24 d'Arduino (SPI:SCK) - d'Arduino D13nRF24 broche 6 (SPI:MOSI) - D11nRF24 broche 7 d'Arduino (SPI:MISO) - D12PCA9685 SDA d'Arduino - A4PCA9685 SCL d'Arduino - A5PCA9685 Vcc d'Arduino - 5vPCA9685 GND d'Arduino haut - Servomoteur d'Arduino96+GN85 - GN85 élevé d'Arduino PCA canaux 0-4, dans ma notation pouce - canal 0, index - canal 1 etc.

Étape 5: Placement des capteurs EMG

Emplacement des capteurs EMG
Emplacement des capteurs EMG
Emplacement des capteurs EMG
Emplacement des capteurs EMG

Afin d'obtenir des lectures raisonnables, il est important de placer les appareils uECG, qui enregistrent l'activité musculaire, aux bons endroits. Bien que de nombreuses options différentes soient possibles ici, chacune nécessite une approche de traitement du signal différente - donc avec mon code, il est préférable d'utiliser un placement similaire à mes photos. Cela peut être contre-intuitif, mais le signal musculaire du pouce est mieux visible du côté opposé du bras, donc l'un des capteurs est placé là, et tous sont placés près du coude (les muscles ont la majeure partie de leur corps dans cette zone, mais vous voulez vérifier où se trouvent exactement les vôtres - il y a une assez grande différence individuelle)

Étape 6: Coder

Avant d'exécuter le programme principal, vous devrez trouver les ID d'unité de vos appareils uECG particuliers (cela se fait en décommentant la ligne 101 et en allumant les appareils un par un, vous verrez l'ID de l'appareil actuel entre autres) et les remplir dans tableau unit_ids (ligne 37). En dehors de cela, vous voulez jouer avec les coefficients de formule (lignes 129-131) et vérifier à quoi cela ressemble sur le traceur série avant de l'attacher à la main robotique.

Étape 7: Résultats

Avec quelques expériences qui ont duré environ 2 heures, j'ai pu obtenir un fonctionnement assez fiable (la vidéo montre un cas typique). Il ne se comporte pas parfaitement et avec ce traitement ne peut reconnaître que les doigts ouverts et fermés (et même pas chacun des 5, il ne détecte que 3 groupes musculaires: pouce, index et majeur ensemble, annulaire et auriculaire ensemble). Mais "AI" qui analyse le signal prend ici 3 lignes de code et utilise une seule valeur de chaque canal. Je pense que beaucoup plus pourrait être fait en analysant des images spectrales de 32 bins sur un PC ou un smartphone. De plus, cette version n'utilise que 3 appareils uECG (canaux EMG). Avec plus de canaux, il devrait être possible de reconnaître des modèles vraiment complexes - mais bon, c'est le but du projet, de fournir un point de départ à toute personne intéressée:) La commande manuelle n'est certainement pas la seule application pour un tel système.

Conseillé: