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.
- 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.
- 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.
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.
-
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.
- ESP32
- Python 3.x
- OpenCV
- PySerial
- CustomTkinter
- Bibliotecas adicionais conforme especificado nos arquivos
.ino
e.py
(descritas no arquivorequirements.txt
)
-
Clone o repositório:
git clone https://github.com/ThiagoLahass/Crane-automated-through-computer-vision.git
-
Instale as dependências Python listadas no arquivo
requirements.txt
:pip install -r requirements.txt
-
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ódigocar_control/car_control.ino
no Arduino Leonardo. -
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 emcontainers_identification.py
. Por exemplo, os valores para a cor vermelha devem ser definidos emH_MIN_RED
,H_MAX_RED
,S_MIN_RED
,S_MAX_RED
,V_MIN_RED
,V_MAX_RED
. -
Execute
containers_identification/containers_identification.py
para iniciar o processamento da imagem e a comunicação serial com o ESP32.
-
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): -
Interface de Seleção: Utilize a interface para selecionar a quantidade e tipo de contêineres:
-
Operação Automática: Após a seleção, o sistema operará automaticamente para mover e posicionar os contêineres conforme especificado:
- Faça um fork do projeto.
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature
). - Commit suas mudanças (
git commit -am 'Adiciona nova feature'
). - Faça um push para a branch (
git push origin feature/nova-feature
). - Abra um Pull Request.
- Thiago Felippe Neitzke Lahass - [email protected]
- Gabriel Gatti da Silva - [email protected]
- Bruno Santos Fernandes - [email protected]
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.