Tabla de contenido:
- Suministros
- Paso 1: Adquisición de la señal
- Paso 2: señal simplificada
- Paso 3: procesamiento de señales
- Paso 4: esquemas
- Paso 5: Colocación de los sensores de EMG
- Paso 6: Código
- Paso 7: resultados
Video: Control manual robótico con EMG: 7 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
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
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
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
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
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:
Brazo robótico con pinza: 9 pasos (con imágenes)
Brazo robótico con pinza: La cosecha de limoneros se considera un trabajo duro, debido al gran tamaño de los árboles y también a los climas cálidos de las regiones donde se plantan los limoneros. Es por eso que necesitamos algo más para ayudar a los trabajadores agrícolas a completar su trabajo más fácilmente
¿Cómo controlar un brazo robótico de gran tamaño de alta potencia 4dof con control remoto Arduino y Ps2 ?: 4 pasos
¿Cómo controlar un brazo robótico de gran tamaño de alta potencia 4dof con control remoto Arduino y Ps2?: Este kit usa un motor de alta potencia mg996, necesita alta corriente, hemos probado mucha entrada de energía. La placa arduino también funciona en el brazo del robot 6dof
Montaje y control del kit robótico para automóvil mediante el control remoto inalámbrico PS2: 6 pasos
Montaje y control del kit de automóvil robótico mediante el control remoto inalámbrico PS2: este proyecto está relacionado con los pasos básicos en el mundo de la robótica, aprenderá a ensamblar un kit de automóvil robótico 4WD, colocando hardware y controlándolo con el control remoto inalámbrico de PS2
Brazo robótico controlado por Arduino con 6 grados de libertad: 5 pasos (con imágenes)
Brazo robótico controlado por Arduino con 6 grados de libertad: Soy miembro de un grupo de robótica y cada año nuestro grupo participa en una Mini-Maker Faire anual. A partir de 2014, decidí construir un nuevo proyecto para el evento de cada año. En ese momento, tenía alrededor de un mes antes del evento para poner algo juntos
Una solución de visión asequible con brazo robótico basada en Arduino: 19 pasos (con imágenes)
Una solución de visión asequible con brazo robótico basado en Arduino: cuando hablamos de visión artificial, siempre nos sentimos inalcanzables. Mientras hicimos una demostración de visión de código abierto que sería muy fácil de hacer para todos. En este video, con la cámara OpenMV, no importa dónde esté el cubo rojo, el robot ar