Skip to content

gabrielgatti7/Crane-automated-through-computer-vision

 
 

Repository files navigation

Sistema de Automação Logística com Visão Computacional

Descrição do Projeto

O Sistema de Automação Logística com Visão Computacional é uma solução inovadora que combina robótica, visão computacional e comunicação serial para otimizar a logística em um ambiente automatizado. Utilizando uma ponte rolante controlada por um ESP32, o sistema é capaz de identificar, localizar e mover contêineres de diferentes cores de forma precisa e eficiente.

O video do pitch inicial do projeto pode ser encontrado aqui.

A animação vista no início desse documento é uma parte do vídeo completo do projeto em funcionamento, acelerado em 3x. O video completo pode ser encontrado aqui.

Além disso, um vídeo exibindo a apresentação do projeto na Mostra Ufes em Computação e Tecnologia referente ao semestre 2024/1, mostrando os detalhes e explicando o seu funcionamento do pode ser vista aqui.

Componentes do Sistema

Hardware:

  • Ponte Rolante:
    • ESP32: Microcontrolador responsável pelo controle dos motores e comunicação serial.
    • Motores de Translação: Permitem o movimento longitudinal (frente/trás) e movimento transversal (esquerda/direita) da ponte rolante.
    • Ponte H: Controla o movimento dos motores de translação.
    • Servo Motor 360° Contínuo: Utilizado para elevar e baixar a carga.
    • Eletroímã: Para pegar e soltar os contêineres.
    • Relé: Utilizado para ativar e desativar o eletroímã.
    • Sensores de Fim de Curso: 4 sensores para limitar a translação da ponte.
    • Sensor Reflexivo Infravermelho TCRT5000: Utilizado para verificar se o eletroímã já está posicionado em cima do contêiner ou já chegou ao chão.
    • Interruptores: Para acionar e desativar componentes como a chave geral, ponte H, luzes, entre outros.
    • Câmera: Integrada à ponte rolante para capturar imagens dos contêineres.
  • Carrinho autônomo:
    • Arduino Leonardo: Microcontrolador responsável pelo controle dos motores e sensores do carrinho.
    • Motores Esquerdo e Direito: Permitem o movimento do carrinho para frente, para trás e curvas.
    • Ponte H: Controla o movimento dos motores esquerdo e direito.
    • Sensor Reflexivo Infravermelho TCRT5000: Utilizado para detecção de linha e orientação do carrinho no trajeto.
    • LDR (Light Dependent Resistor): Sensor utilizado para detectar variações de luz na caçamba do carrinho e assim permitir identificar a presença ou não do contêiner.
    • Bateria 9V: Fonte de alimentação para o Arduino e os motores do carrinho.

Você pode visualizar o PDF do esquemático do hardware da ponte rolante aqui.

Além disso, também pode encontrar o PDF do esquemático do hardware do carrinho autônomo aqui.

Software (Bibliotecas utilizadas):

  • OpenCV: Biblioteca de visão computacional para processamento de imagens.
  • PySerial: Interface de comunicação entre o ESP32 e o sistema de visão computacional em Python.
  • NumPy: Biblioteca fundamental para computação científica em Python, usada para manipulação de arrays e operações matemáticas de alto desempenho.
  • Customtkinter: Biblioteca para criação de interfaces gráficas personalizadas.
  • CTkSpinbox: Widget para criação de spinboxes no customtkinter.
  • CTkMessagebox: Widget para criação de messageboxes no customtkinter.

Funcionamento

O sistema captura imagens através da câmera integrada na ponte rolante e utiliza a biblioteca OpenCV para processar essas imagens e identificar contêineres por suas respectivas cores. O usuário pode selecionar, através de uma interface, a quantidade e tipo de contêineres desejados, e o sistema irá operar conforme as escolhas feitas.

Estrutura do Repositório

  • crane_control/crane_control.ino: Código em C++ embarcado no ESP32, responsável pelo controle de todos os componentes da ponte rolante.

  • thresholds-identifier/thresholds-identifier.py: Utilizado para identificar bons valores no espaço de cores HSV para identificar cada uma das cores antes da execução do código principal.

  • containers_identification/containers_identification.py: Código principal que executa simultaneamente com o microcontrolador ESP32, processando a imagem e enviando as informações via comunicação serial.

  • containers_identification/interface.py: Implementa a interface gráfica para a seleção de quantidade e tipo de contêineres.

  • containers_identification/my_serial.py: Implementação das funções usadas para realizar a comunicação serial.

  • containers_identification/utils.py: Funções auxiliares no funcionamento do projeto, desde a identificação dos contêineres através do OpenCV até a seleção de cores e quantidades.

  • car_control/car_control.ino: Código em C++ embarcado no Arduino Leonardo, responsável pelo controle do carrinho autônomo.

Instalação e Configuração

Requisitos

  • ESP32
  • Python 3.x
  • OpenCV
  • PySerial
  • CustomTkinter
  • Bibliotecas adicionais conforme especificado nos arquivos .ino e .py (descritas no arquivo requirements.txt)

Passos para Configuração

  1. Clone o repositório:

    git clone https://github.com/ThiagoLahass/Crane-automated-through-computer-vision.git
  2. Instale as dependências Python listadas no arquivo requirements.txt:

    pip install -r requirements.txt
  3. Compile e carregue o código crane_control/crane_control.ino no ESP32 utilizando a Arduino IDE. Da mesma forma compile e carregue o código car_control/car_control.ino no Arduino Leonardo.

  4. Execute thresholds-identifier/thresholds-identifier.py para identificar os valores de cor HSV ideais. Após isso, ajuste os valores das variáveis para cada uma das cores em containers_identification.py. Por exemplo, os valores para a cor vermelha devem ser definidos em H_MIN_RED, H_MAX_RED, S_MIN_RED, S_MAX_RED, V_MIN_RED, V_MAX_RED.

  5. Execute containers_identification/containers_identification.py para iniciar o processamento da imagem e a comunicação serial com o ESP32.

Utilização

  1. Identificação de Cores: Execute thresholds-identifier.py para ajustar os valores HSV das cores (o exemplo abaixo retrata o ajuste dos limites que permitem a criação da máscara que possibilita a identificação da cor azul):

  2. Interface de Seleção: Utilize a interface para selecionar a quantidade e tipo de contêineres:

  3. Operação Automática: Após a seleção, o sistema operará automaticamente para mover e posicionar os contêineres conforme especificado:

Contribuição

  1. Faça um fork do projeto.
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature).
  3. Commit suas mudanças (git commit -am 'Adiciona nova feature').
  4. Faça um push para a branch (git push origin feature/nova-feature).
  5. Abra um Pull Request.

Desenvolvedores

Agradecimentos

Agradecemos a todos os contribuidores e apoiadores deste projeto, principalmente ao Prof. Dr. Rodolfo da Silva Villaça e Prof. Dr. Ricardo Carminati de Mello por acompanharem o seu desenvolvimento.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 50.8%
  • C++ 49.2%