Índice:

Controle de mão robótico com EMG: 7 etapas
Controle de mão robótico com EMG: 7 etapas

Vídeo: Controle de mão robótico com EMG: 7 etapas

Vídeo: Controle de mão robótico com EMG: 7 etapas
Vídeo: Acidente de trabalho em máquina 2024, Novembro
Anonim
Image
Image
Aquisição de Sinal
Aquisição de Sinal

Este projeto mostra o controle da mão robótica (usando a mão de código aberto no Moov) com 3 dispositivos uECG de código aberto usados para medir e processar a atividade muscular (eletromiograma, EMG). Nossa equipe tem uma longa história com as mãos e seu controle, e este é um bom passo na direção certa:)

Suprimentos

3 dispositivos uECG 1x Arduino (estou usando Nano, mas a maioria dos outros funcionaria) 1 módulo nRF24 (qualquer um faria) 1x PCA9685 ou driver de servo semelhante 1x inMoov hand5x servos grandes (consulte as instruções inMoov para tipos compatíveis) 1x fonte de alimentação 5V capaz de 5A ou mais corrente

Etapa 1: Aquisição de sinal

O controle é baseado na EMG - atividade elétrica dos músculos. O sinal EMG é obtido por três dispositivos uECG (eu sei, é suposto ser um monitor de ECG, mas como é baseado em um ADC genérico, pode medir qualquer biossinal - incluindo EMG). Para o processamento EMG, o uECG tem um modo especial no qual envia dados do espectro de 32 bin e média da "janela muscular" (intensidade espectral média entre 75 e 440 Hz). As imagens de espectro parecem padrões azul-esverdeados que mudam com o tempo. Aqui, a frequência está no eixo vertical (em cada um dos 3 gráficos, baixa frequência na parte inferior, alta no topo - de 0 a 488 Hz com passos de ~ 15 Hz), o tempo está na horizontal (dados antigos à esquerda aqui é cerca de 10 segundos na tela). A intensidade é codificada com as cores: azul - baixo, verde - médio, amarelo - alto, vermelho - ainda mais alto.

Etapa 2: Sinal Simplificado

Sinal Simplificado
Sinal Simplificado

Para um reconhecimento confiável de gestos, é necessário um processamento adequado de PC dessas imagens espectrais. Mas para a ativação simples dos dedos robóticos da mão, é suficiente apenas usar o valor médio em 3 canais - o uECG fornece convenientemente em determinados bytes de pacote para que o esboço do Arduino possa analisá-lo. Esses valores parecem muito mais simples - anexei um gráfico de valores brutos do Serial Plotter do Arduino. Os gráficos vermelhos, verdes e azuis são valores brutos de 3 dispositivos uECG em diferentes grupos musculares quando estou apertando o polegar, o anelar e os dedos médios de forma correspondente. Para o nosso olho, esses casos são claramente diferentes, mas precisamos transformar esses valores em "pontuação do dedo" de alguma forma para que um programa possa enviar valores para servos manuais. O problema é que os sinais dos grupos musculares são "mistos": no primeiro e no terceiro caso, a intensidade do sinal azul é quase a mesma - mas o vermelho e o verde são diferentes. No segundo e terceiro casos, os sinais verdes são iguais - mas o azul e o vermelho são diferentes.

Etapa 3: Processamento de Sinal

Processamento de Sinal
Processamento de Sinal

Para "desmisturar" esses sinais, usei uma fórmula relativamente simples:

S0 = V0 ^ 2 / ((V1 * a0 + b0) (V2 * c0 + d0)), onde S0 - pontuação para o canal 0, V0, V1, V2 - valores brutos para os canais 0, 1, 2 e a, b, c, d - coeficientes que eu ajustei manualmente (a e c foram de 0,3 a 2,0, b e d foram 15 e 20, você precisaria alterá-los para ajustar o seu posicionamento específico do sensor de qualquer maneira). A mesma pontuação foi calculada para os canais 1 e 2. Depois disso, os gráficos ficaram quase perfeitamente separados. Para os mesmos gestos (desta vez, dedo anular, médio e polegar), os sinais são claros e podem ser facilmente traduzidos em movimentos servo apenas comparando com o limiar

Etapa 4: esquemas

Esquemas
Esquemas

Os esquemas são bastante simples, você precisa apenas do módulo nRF24, PCA9685 ou controlador I2C PWM semelhante e fonte de alimentação de 5V de alto amp que seria suficiente para mover todos esses servos de uma vez (portanto, requer pelo menos 5A de potência nominal para operação estável).

Lista de conexões: nRF24 pino 1 (GND) - GNDnRF24 pino 2 (Vcc) do Arduino - 3.3vnRF24 pino 3 do Arduino (habilitar chip) - D9nRF24 pino 4 do Arduino (SPI: CS) - D8nRF24 pino 5 do Arduino (SPI: SCK) - Arduino D13nRF24 pino 6 (SPI: MOSI) - D11nRF24 pino 7 do Arduino (SPI: MISO) - D12PCA9685 SDA do Arduino - A4PCA9685 SCL do Arduino - A5PCA9685 Vcc do Arduino - 5vPCA9685 GDP do Arduino 5vPCA9685 GND + alto - amp GDP9685 GND alto - amp9 VND do Arduino 5vPCA9685 GDP alto - amp GDP9685 VND alto - amp9 VND do Arduino 5 - GDPCA alto 5vPCA9685 - VND do Arduino 5vPCA9685 alto - amp9 GDPCA 5 VND alto Canais PCA 0-4, na minha notação polegar - canal 0, dedo indicador - canal 1 etc.

Etapa 5: Colocação dos Sensores EMG

Colocação de sensores EMG
Colocação de sensores EMG
Colocação de sensores EMG
Colocação de sensores EMG

Para obter leituras razoáveis, é importante colocar os dispositivos uECG, que registram a atividade muscular, nos lugares certos. Embora muitas opções diferentes sejam possíveis aqui, cada uma requer uma abordagem de processamento de sinal diferente - então, com meu código, é melhor usar um posicionamento semelhante ao das minhas fotos. Pode ser contra-intuitivo, mas o sinal do músculo do polegar é melhor visível no lado oposto do braço, então um dos sensores é colocado lá, e todos eles são colocados perto do cotovelo (os músculos têm a maior parte de seu corpo nessa área, mas você deseja verificar onde exatamente o seu está localizado - há uma grande diferença individual)

Etapa 6: Código

Antes de executar o programa principal, você precisará descobrir IDs de unidade de seus dispositivos uECG específicos (isso é feito removendo o comentário da linha 101 e ligando os dispositivos um por um, você verá o ID do dispositivo atual, entre outras coisas) e preencha-os em matriz unit_ids (linha 37). Além disso, você deseja brincar com os coeficientes da fórmula (linhas 129-131) e verificar como fica na plotadora serial antes de anexá-la à mão robótica.

Etapa 7: Resultados

Com alguns experimentos que duraram cerca de 2 horas, consegui obter uma operação bastante confiável (o vídeo mostra um caso típico). Não se comporta perfeitamente e com este processamento só consegue reconhecer dedos abertos e fechados (e nem mesmo cada um dos 5, detecta apenas 3 grupos musculares: polegar, indicador e médio juntos, anular e mindinho juntos). Mas o "AI" que analisa o sinal leva 3 linhas de código aqui e usa um único valor de cada canal. Acredito que muito mais poderia ser feito analisando imagens espectrais de 32 bin no PC ou smartphone. Além disso, esta versão usa apenas 3 dispositivos uECG (canais EMG). Com mais canais, deve ser possível reconhecer padrões realmente complexos - mas bem, esse é o objetivo do projeto, fornecer algum ponto de partida para qualquer pessoa interessada:) O controle manual definitivamente não é a única aplicação para tal sistema.

Recomendado: