Um robô móvel com prevenção de obstáculos baseada na visão
Resumo:
O objetivo deste relatório é discutir e demonstrar o conceito de projeto e implementação de um robô móvel capaz de detectar visualmente e evitar obstáculos por meio de uma webcam USB. O sistema foi portado para o hardware Raspberry Pi, um computador baseado em Linux de US $ 35. Este blog irá destacar os conceitos importantes que foram necessários para realizar a implementação bem-sucedida de um robô móvel capaz de navegar em um ambiente interno. A solução proposta destina-se a ser usada dentro de um ambiente de depósito para transportar mercadorias de um local para o outro sem a necessidade de operadores humanos.
Introdução:
Os robôs já existem no mercado, mas esses robôs são caros para comprar e são projetados propositalmente para funcionar em um único ambiente, como depósito, campo de batalha ou em residências. Esses robôs são capazes de detectar obstáculos usando sensores passivos, como sensores ultrassônicos e sensores infravermelhos, e às vezes são chamados de veículos autônomos devido à sua mobilidade na superfície do solo. Tradicionalmente, esses sistemas autônomos são geralmente equipados com sensores passivos, como sensores de distância ultrassônicos, sensores infravermelhos ou GPS para detectar sua posição e ambiente. A presença desses sensores permite que o robô evite a colisão com obstáculos quando colocado com obstáculos (Wang J. et al, 2011). No entanto, com o avanço da tecnologia de sistema de computador embarcado de baixo custo com alto poder de processamento, é possível usar um método mais confiável e econômico de projetar robôs autônomos capazes de detectar obstáculos. Um método possível seria utilizar um algoritmo de visão computacional que fosse visualmente capaz de detectar e evitar obstáculos. O método de detecção de obstáculo baseado em sensor é limitado à proximidade dos obstáculos em relação à distância do robô, no entanto, com o método baseado em visão, é possível detectar e identificar o obstáculo antes de evitá-lo.
Solução proposta e artefato:
O objetivo deste relatório é projetar um robô autônomo que seja capaz de detectar e evitar obstáculos usando uma webcam USB conectada a um Raspberry Pi. Este relatório irá apresentar o conceito básico de robôs móveis e as tecnologias que estão sendo empregadas atualmente em um ambiente interno. As seguintes etapas foram realizadas a fim de implementar o sistema proposto:
- Projete um algoritmo usando uma estrutura de visão computacional, como SimpleCV, que pode detectar obstáculos.
- Implementar o algoritmo para um Raspberry Pi
- Implementar o controle motor no Raspberry Pi usando a linguagem de programação Python
- Teste e avalie o desempenho do sistema proposto usando Raspberry Pi
Além disso, os seguintes objetivos foram atendidos a fim de realizar plenamente o sistema proposto:
- A faixa de detecção de obstáculos pode ser feita modificando o algoritmo de acordo com a demanda.
- Uma forma geométrica (ou seja, círculo) de tamanho constante será colocada no obstáculo para detecção
- A biblioteca SimpleCV se comunica com Raspberry Pi para controlar os dois motores DC
- O sistema é testado e avaliado modificando o código e detectando o obstáculo em distâncias variadas
Lista de Hardware e Software:
O sistema proposto foi implementado em um Raspberry Pi usando uma webcam USB para captura de imagens. A seguir está a lista de hardware e software que foram necessários para realizar totalmente o robô autônomo proposto.
Hardware:
- Kit Raspberry Pi,
- webcam USB,
- dois motores DC,
- H-Bridge (para controlar a direção do motor),
- Chassi,
- cabos
- placa de ensaio
Pacote de software:
- Biblioteca python SimpleCV,
- Sistema operacional Ubuntu,
- Raspberry OS (Raspbian),
- Python2.7
O sistema proposto é capaz de detectar obstáculos em vários intervalos. Isso foi inspirado por um algoritmo de aumento visual e foi alcançado definindo o número mínimo de pixels dentro do código ao medir a distância entre a câmera e o obstáculo.
Figura - A configuração experimental usada para encontrar a relação entre o círculo do projeto e a distância do obstáculo do robô
O arranjo mostrado acima pode ser feito em laboratório para medir a distância entre o obstáculo (círculo) e o robô, a fim de determinar a relação entre os números mínimos de pixels que corresponderão à distância real do obstáculo do robô. Como visto no diagrama acima e na discussão feita no Capítulo 2, o tamanho do círculo é maior quando o círculo está mais próximo, enquanto é menor quando o círculo está mais distante. Portanto, um conjunto de testes poderia ser realizado que permitiria medições de distância do obstáculo contra o robô quando o número de pixels é alterado dentro do algoritmo. O obstáculo será movido conforme mostrado no diagrama acima para encontrar a distância certa na qual o algoritmo detecta o obstáculo.
Figura - O conceito de aparição visual é inspirado na ciência médica
Fluxograma geral do sistema:
O fluxograma a seguir explica como o robô baseado em visão proposto seria projetado usando Raspberry Pi e a estrutura SimpleCV. Conforme mostrado na figura 6, uma webcam USB será conectada ao Raspberry Pi como uma entrada para o computador. A webcam USB fará a varredura dos quadros de entrada em busca de uma forma geométrica específica, por exemplo, um círculo que será colocado em obstáculos. O motivo de marcar os obstáculos com forma geométrica, ou seja, círculo, foi decidido apenas para reduzir o tempo de preparação do algoritmo. Normalmente, a detecção de obstáculos baseada na visão é feita por meio de duas câmeras que criam uma visão estéreo para avaliar a distância entre o robô e os obstáculos (Neves &Matos, 2013). Portanto, a detecção de uma forma geométrica, ou seja, círculos usando uma única câmera, foi obtida calculando o raio do círculo ajudaria o robô a detectar a distância do robô e os obstáculos. Este método de detecção de um obstáculo foi inspirado no método de visão iminente proposto por Sachin &Paolo (1998).
O sistema proposto irá incorporar uma câmera USB que será conectada a um Raspberry Pi. Raspberry Pi executará um script python que pegará imagens no vídeo enquanto procura uma forma geométrica, ou seja, círculos. Se o círculo for detectado com base na localização do círculo na tela, o script puxará para cima ou para baixo os pinos da porta GPIO que serão usados para controlar a direção do robô.
Estrutura do algoritmo de visão por computador:
O algoritmo foi preparado em um laptop com Ubuntu antes de ser transferido para um Raspberry Pi. Isso se deve ao fato de que Ubuntu e Raspbian são versões do Linux, o que torna a portabilidade e implementação do algoritmo mais fácil entre plataformas cruzadas. Isso me deu a flexibilidade de trabalhar com o algoritmo sem precisar me conectar constantemente ao meu Raspberry Pi. Assim, o algoritmo foi implementado de forma independente, sem se preocupar com a interface de hardware.
A primeira etapa do projeto de um sistema baseado em visão é selecionar a região de interesse (ROI) que detectaria o obstáculo e nos ajudaria na preparação do algoritmo. A ROI, neste caso, é um círculo preto que seria detectado pelo algoritmo. Após a detecção, o algoritmo binariza a imagem para que apenas a região de interesse seja visível no fundo. O algoritmo mede as coordenadas do círculo na tela e mede as coordenadas em relação a qual região da tela o círculo foi detectado. Se a coordenada cair no centro da tela, o algoritmo moverá o robô de acordo, conforme discutido anteriormente.
Antes de escrever o algoritmo, era necessário decidir sobre a resolução da tela que permitiria ao Raspberry Pi detectar e rastrear o obstáculo. Como o Raspberry Pi é um computador de baixa potência com uma velocidade de clock do sistema de 700 MHz e uma RAM limitada de 512 MB, portanto, a entrada de vídeo de alta definição consumiria muito poder de processamento, o que eventualmente tornaria o sistema instável. Portanto, um meio-termo precisa ser selecionado, o que seria suficiente para o computador Raspberry Pi processar os dados da câmera.
Após várias tentativas e erros, uma resolução de 320 × 240 foi selecionada conforme discutido na seção posterior. Esta resolução foi suficiente para detectar os diferentes espaços de cores e formas geométricas. Também foi descoberto no experimento que esta resolução não estava causando atraso no vídeo de entrada, como era o caso com resolução mais alta, particularmente, 640 × 480 e acima. Isso é discutido em detalhes na Seção 4 deste relatório.
A primeira etapa para detectar o obstáculo da imagem foi dividir a tela em três segmentos distintos, conforme mostrado na Figura 8. Isso foi feito para detectar e rastrear a posição do obstáculo para que a respectiva ação motora pudesse ser realizada conforme discutido no seção anterior. Para este projeto de design, os obstáculos são representados por um símbolo específico, ou seja, um círculo; portanto, a presença de um círculo registraria a presença de um obstáculo no algoritmo.
Para mais detalhes:Um robô móvel com prevenção de obstáculos baseada na visão
Processo de manufatura
- Qual é a realidade da visão do robô?
- Robô evitando parede baseado em Raspberry Pi - FabLab NerveCentre
- Robô controlado pela Web Raspberry Pi com vídeo
- Robô de classificação de reciclagem com Google Coral
- Resolvendo problemas de manutenção com colaboração móvel
- Evitar Obstáculos usando Inteligência Artificial
- Desinfecção do robô com luz ultravioleta
- Obstáculos para evitar o robô com servo motor
- Sensor de obstáculo simples com Arduino
- Robot combina braço robótico colaborativo com plataforma móvel