Tabla de contenido:

Control manual robótico con EMG: 7 pasos
Control manual robótico con EMG: 7 pasos

Video: Control manual robótico con EMG: 7 pasos

Video: Control manual robótico con EMG: 7 pasos
Video: Programación a nivel básico del robot Fanuc M10-iA (joint, línea, arco de círculo y ciclos). 2024, Noviembre
Anonim
Image
Image
Adquisición de señales
Adquisición de señales

Este proyecto muestra el control de la mano robótica (usando la mano de código abierto inMoov) con 3 dispositivos uECG de código abierto utilizados para medir y procesar la actividad muscular (electromiograma, EMG). Nuestro equipo tiene una larga historia con las manos y su control, y este es un buen paso en la dirección correcta:)

Suministros

3x dispositivos uECG 1x Arduino (estoy usando Nano pero la mayoría de los otros funcionarían) 1x módulo nRF24 (cualquier genérico serviría) 1x PCA9685 o servocontrolador similar 1x inMoov hand5x servos grandes (ver instrucciones inMoov para tipos compatibles) 1x fuente de alimentación de 5V capaz de 5A o más corriente

Paso 1: Adquisición de la señal

El control se basa en EMG: actividad eléctrica de los músculos. La señal EMG se obtiene mediante tres dispositivos uECG (lo sé, se supone que es un monitor de ECG, pero como se basa en un ADC genérico, puede medir cualquier bioseñal, incluida la EMG). Para el procesamiento de EMG, uECG tiene un modo especial en el que envía datos de espectro de 32 intervalos y un promedio de "ventana muscular" (intensidad espectral promedio entre 75 y 440 Hz). Las imágenes de espectro se ven como patrones azul verdosos que cambian con el tiempo. Aquí la frecuencia está en un eje vertical (en cada uno de los 3 gráficos, baja frecuencia en la parte inferior, alta en la parte superior, de 0 a 488 Hz con pasos de ~ 15 Hz), el tiempo está en una horizontal (datos antiguos a la izquierda en general aquí es de unos 10 segundos en la pantalla). La intensidad se codifica con el color: azul - bajo, verde - medio, amarillo - alto, rojo - incluso más alto.

Paso 2: señal simplificada

Señal simplificada
Señal simplificada

Para un reconocimiento de gestos confiable, se requiere un procesamiento de PC adecuado de estas imágenes espectrales. Pero para una activación simple de los dedos de la mano robótica, es suficiente usar el valor promedio en 3 canales: uECG lo proporciona convenientemente en ciertos bytes de paquetes para que Arduino sketch pueda analizarlo. Estos valores parecen mucho más simples: he adjuntado una tabla de valores brutos del Plotter en serie de Arduino. Los gráficos rojos, verdes y azules son valores brutos de 3 dispositivos uECG en diferentes grupos musculares cuando aprieto los dedos pulgar, anular y medio de manera correspondiente. Para nuestro ojo, estos casos son claramente diferentes, pero necesitamos convertir esos valores en "puntaje de dedo" de alguna manera para que un programa pueda enviar valores a los servos manuales. El problema es que las señales de los grupos de músculos están "mezcladas": en el primer y tercer caso, la intensidad de la señal azul es aproximadamente la misma, pero el rojo y el verde son diferentes. En el segundo y tercer caso, las señales verdes son las mismas, pero el azul y el rojo son diferentes.

Paso 3: procesamiento de señales

Procesamiento de la señal
Procesamiento de la señal

Para "desmezclar" estas señales, utilicé una fórmula relativamente simple:

S0 = V0 ^ 2 / ((V1 * a0 + b0) (V2 * c0 + d0)), donde S0 - puntuación para el canal 0, V0, V1, V2 - valores brutos para los canales 0, 1, 2 y a, b, c, d - coeficientes que ajusté manualmente (ayc eran de 0.3 a 2.0, byd eran 15 y 20, de todos modos tendría que cambiarlos para ajustarlos a la ubicación de su sensor en particular). Se calculó la misma puntuación para los canales 1 y 2. Después de esto, los gráficos se separaron casi perfectamente. Para los mismos gestos (esta vez el dedo anular, el medio y luego el pulgar), las señales son claras y se pueden traducir fácilmente en movimientos de servo simplemente comparándolo con el umbral.

Paso 4: esquemas

Esquemas
Esquemas

Schematics es bastante simple, solo necesita el módulo nRF24, PCA9685 o un controlador I2C PWM similar, y una fuente de alimentación de alto amperaje de 5 V que sería suficiente para mover todos estos servos a la vez (por lo que requiere al menos 5 A de potencia nominal para un funcionamiento estable).

Lista de conexiones: 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's Canales PCA 0-4, en mi notación pulgar - canal 0, dedo índice - canal 1, etc.

Paso 5: Colocación de los sensores de EMG

Colocación de los sensores de EMG
Colocación de los sensores de EMG
Colocación de los sensores de EMG
Colocación de los sensores de EMG

Para obtener lecturas razonables, es importante colocar los dispositivos uECG, que registran la actividad muscular, en los lugares correctos. Si bien aquí son posibles muchas opciones diferentes, cada una requiere un enfoque de procesamiento de señal diferente, por lo que con mi código es mejor usar una ubicación similar a mis fotos Puede ser contrario a la intuición, pero la señal del músculo del pulgar es mejor visible en el lado opuesto del brazo, por lo que uno de los sensores se coloca allí, y todos se colocan cerca del codo (los músculos tienen la mayor parte de su cuerpo en esa área, pero desea verificar dónde se encuentran exactamente los suyos; hay una gran diferencia individual)

Paso 6: Código

Antes de ejecutar el programa principal, deberá averiguar las ID de unidad de sus dispositivos uECG particulares (se hace descomentando la línea 101 y encendiendo los dispositivos uno por uno, verá la ID del dispositivo actual, entre otras cosas) y completarlos en matriz unit_ids (línea 37). Aparte de esto, desea jugar con coeficientes de fórmula (líneas 129-131) y verificar cómo se ve en el trazador de serie antes de conectarlo a la mano robótica.

Paso 7: resultados

Con algunos experimentos que tomaron aproximadamente 2 horas, pude obtener un funcionamiento bastante confiable (el video muestra un caso típico). No se comporta perfectamente y con este procesamiento solo puede reconocer los dedos abiertos y cerrados (y ni siquiera cada uno de los 5, detecta solo 3 grupos musculares: pulgar, índice y medio juntos, anular y meñique juntos). Pero la "IA" que analiza la señal toma aquí 3 líneas de código y usa un solo valor de cada canal. Creo que se podría hacer mucho más analizando imágenes espectrales de 32 contenedores en una PC o un teléfono inteligente. Además, esta versión utiliza solo 3 dispositivos uECG (canales EMG). Con más canales, debería ser posible reconocer patrones realmente complejos, pero bueno, ese es el objetivo del proyecto, proporcionar un punto de partida para cualquiera que esté interesado:) El control manual definitivamente no es la única aplicación para dicho sistema.

Recomendado: