Skip to content

Mão mímica feita para um trabalho da disciplina de Python e para o projeto da disciplina de PIC 1.

Notifications You must be signed in to change notification settings

erufes/mao-mimica

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

✋ Mão Mímica 🤖

made-with-python PyPI pyversions GitHub latest commit GitHub commits GitHub pull-requests GitHub branches

📝 Descrição do Projeto

O projeto consiste em uma mão robótica impressa em 3D e uma interface de menu que permite ao usuário interagir com a mão. O menu oferece duas opções principais: a primeira é a reprodução dos movimentos da mão do usuário, e a segunda é um jogo de Pedra, Papel e Tesoura contra a mão robótica. Utilizando uma webcam, o sistema é capaz de identificar, por meio de técnicas de visão computacional, quais dedos da mão do usuário estão abertos ou fechados, permitindo a captura e interpretação dos movimentos. Para a movimentação dos dedos da mão robótica, são empregados motores e plataformas programáveis. Um vídeo demonstrativo do funcionamento da mão, desenvolvido para a disciplina de PIC 1, está disponível neste link.

Imitar movimentos ✋

Por meio da visão computacional, o sistema é capaz de reconhecer os movimentos realizados pelo usuário em frente à webcam. Para isso, foram definidos cinco estados possíveis para cada dedo: totalmente fechado, quase totalmente fechado, meio termo, quase totalmente aberto e totalmente aberto. Cada transição entre esses estados é controlada por quatro ângulos pré-determinados, que orientam o movimento dos servomotores responsáveis pela movimentação dos dedos. O programa utiliza uma lista de cinco posições, em que cada posição corresponde a um dedo da mão. Com base nessa lista, o sistema identifica o estado atual de cada dedo e envia essas informações para o Arduino. No Arduino, um código recebe a lista de estados e calcula quantos ângulos cada servomotor precisa girar para replicar os movimentos da mão do usuário. Dessa forma, a mão robótica consegue imitar, de maneira precisa e sincronizada, os gestos realizados pelo usuário.

Jogar Pedra, Papel e Tesoura 🎮

O modo de jogo funciona com uma lógica semelhante à de imitar os movimentos da mão do usuário, porém com três gestos pré-definidos: pedra (representado pela lista [0, 0, 0, 0, 0]), papel ([4, 4, 4, 4, 4]) e tesoura ([0, 4, 4, 0, 0]). O programa identifica a jogada do usuário com base nesses padrões, utilizando uma margem de tolerância para garantir maior flexibilidade. Por exemplo, se o usuário fizer o gesto de "pedra", mas o programa detectar a lista [0, 1, 0, 0, 0], ele ainda reconhecerá como "pedra" devido à tolerância implementada. A mão robótica também possui essas três listas de movimentos como opções de jogada. Ela escolhe aleatoriamente uma delas e envia a informação ao Arduino para executar o movimento correspondente. Após ambas as jogadas serem definidas, o programa compara a jogada do usuário com a da mão robótica, determina o vencedor da rodada e atualiza a pontuação. Ao final, o vencedor da partida é declarado com base no número de rodadas ganhas. Essa estrutura permite uma interação dinâmica e competitiva entre o usuário e a mão robótica.

👾 Funcionamento

Software

Refere-se à parte de leitura da movimentação da mão do usuário. Essa interpretação dos movimentos é realizada na linguagem de programação Python, utilizando as bibliotecas MediaPipe e OpenCV. Cada dedo da mão impressa tem marcações de cada uma de suas articulações e, utilizando das bibliotecas citadas, é possível saber qual dedo está aberto ou fechado.

Hardware

Consiste na movimentação da mão impressa em 3D. Junto de um arduino uno e servo motores, partindo da interpretação dos movimentos da mão do usuário, é possível saber qual ângulo precisamos girar em cada dedo da mão impressa. A movimentação da mão impressa é realizada em C++. Na imagem abaixo mostra como os servo motores ficam na estrutura interna do antebraço.

📚 Libs Usadas

Open CV

É uma biblioteca de programação, de código aberto, e inicialmente desenvolvida pela Intel com o objetivo de tornar a visão computacional mais acessível a desenvolvedores e hobistas. Atualmente possui mais de 500 funções, pode ser utilizada em diversas linguagens de programação (C++, Python, Ruby, Java…) e é usada para diversos tipos de análise em imagens e vídeos, como detecção, tracking e reconhecimento facial, edição de fotos e vídeos, detecção e análise de textos, etc. É utilizada no projeto para a manipulação da webcam e para a identificação da mão.

MediaPipe

É uma plataforma de código aberto mantida pelo Google, que oferece um conjunto abrangente de ferramentas, APIs e modelos pré-treinados que facilitam a construção de aplicações para tarefas como estimativa de pose, detecção de objetos, reconhecimento facial, entre outras. No projeto, é utilizada para identificar cada articulação da mão, sendo possível saber qual dedo está levantado ou abaixado.

🏗️ Estrutura

Arduino

É uma plataforma programável de prototipagem eletrônica de placa única e hardware livre, que permite aos usuários criar objetos eletrônicos interativos e independentes, usando o microcontrolador Atmel AVR ou ARM com suporte de entrada/saída embutido, uma linguagem de programação padrão, essencialmente C/C++.

Modelo da mão 3D InMoov

O modelo 3D da mão é do InMoov, projeto pessoal do escultor e designer francês Gael Langevin, iniciado em janeiro de 2012 como a primeira mão protética de código aberto. Esse projeto deu origem a iniciativas como Bionico, E-Nable e muitas outras. O InMoov é o primeiro robô em tamanho real impresso em 3D de código aberto. Reproduzível em qualquer impressora 3D doméstica com uma área de 12x12x12 cm, foi concebido como uma plataforma de desenvolvimento para universidades, laboratórios, entusiastas, mas, acima de tudo, para makers. O modelo está disponível no site InMoov Mão e Antebraço.

WebCam

Precisa de uma webcam conectada a um computador, ou notebook, para poder capturar os movimentos da mão do usuário e replicá-los na mão mímica. No projeto, foi usada a webcam HD C270 da Logitech.

Servo Motores

Cada dedo precisa estar conectado por fios (foi usada linha de pesca por ser mais resistente) a um servo-motor para ser capaz de replicar os movimentos captados pela câmera. Estão sendo usados 5 servo motores MG996R 180° Tower Pro. Eles só são capazes de girar em 180°, que é o necessário para fazer os movimentos de abrir ou fechar os dedos. Na foto abaixo, é possível observar como os motores estão dentro do antebraço.

📌 Pré-requisitos

pip install opencv-python

pip install mediapipe

pip install pyserial

Os arquivos STL utilizados para a impressão 3D estão organizados na pasta arquivosSTL. Dentro dessa pasta, há duas subpastas:

  • Na pasta arquivosSTL/caixa, estão os arquivos referentes à caixa suporte, que abriga o Arduino e a protoboard.
  • Na pasta arquivosSTL/mao, estão os arquivos relacionados à mão robótica.

☝️🤓 Instruções

Para configurar e executar o projeto, siga as etapas abaixo:

  • As bibliotecas mencionadas no tópico anterior devem ser instaladas via terminal. Certifique-se de que o Python já está instalado na máquina.
  • O arquivo main.cpp, localizado na pasta src/hardware, deve ser carregado no Arduino. Para isso, utilize o Arduino IDE. Durante o processo, é necessário instalar a biblioteca Servo.h diretamente pelo gerenciador de bibliotecas do Arduino IDE.
  • Nos arquivos Jogo.py e MaoMimica.py, insira na linha 20 e 13, respectivamente, a porta serial em que o Arduino está conectado ao computador. A porta serial pode ser identificada ao enviar o código main.cpp para o Arduino pelo Arduino IDE.
  • É necessário uma fonte de alimentação de 5 a 7,2 volts para energizar os servomotores. Conecte o GND ao jumper escuro e a fonte ao jumper claro.
  • Conecte uma webcam ao computador. Nos arquivos Jogo.py e MaoMimica.py, nas linhas 78 e 21, respectivamente, é possível configurar a câmera a ser utilizada. O valor 0 dentro dos parênteses indica a primeira opção de captura de vídeo disponível no computador.

Após realizar todas as configurações, execute o projeto digitando o seguinte comando no terminal:

python3 main.py

👩‍💻 Desenvolvedoras


Diana Mello Rosi

Elisa Muller

Rafaela Capovilla

Rafaela Fernanda

About

Mão mímica feita para um trabalho da disciplina de Python e para o projeto da disciplina de PIC 1.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published