- Hardware necessário:
- Requisito de programação:
- Configurando o processamento no Raspberry Pi:
- Diagrama de circuito:
- Programa de rastreamento do Raspberry Pi Ball:
- Trabalho do Robô Rastreador Raspberry Pi Ball:
O campo da Robótica, Inteligência Artificial e Aprendizado de Máquina está evoluindo rapidamente e com certeza mudará o estilo de vida da humanidade em um futuro próximo. Os robôs são pensados para entender e interagir com o mundo real por meio de sensores e processamento de aprendizado de máquina. O reconhecimento de imagem é uma das formas populares em que se pensa que os robôs entendem objetos olhando para o mundo real por meio de uma câmera, assim como nós. Neste projeto, vamos usar o poder do Raspberry Pi para construir um robô que possa rastrear a bola e segui-la como os robôs que jogam futebol.
OpenCV é uma ferramenta muito famosa e de código aberto usada para processamento de imagens, mas neste tutorial, para manter as coisas simples, estamos usando o IDE de processamento. Como o processamento para ARM também lançou a biblioteca GPIO para processamento, não teremos mais que alternar entre o python e o processamento para trabalhar com o Raspberry Pi. Parece legal, certo? Então, vamos começar.
Hardware necessário:
- Raspberry Pi
- Módulo de câmera com cabo de fita
- Chassi do Robô
- Motores de engrenagem com roda
- Motorista L293D
- Banco de energia ou qualquer outra fonte de energia portátil
Requisito de programação:
- Monitor ou outro display para Raspberry pi
- Teclado ou mouse para Pi
- Software de processamento ARM
Nota: É obrigatório ter um display conectado a Pi por meio de fios durante a programação, pois só assim o vídeo da câmera pode ser visto
Configurando o processamento no Raspberry Pi:
Como dito anteriormente, usaremos o ambiente de processamento para programar nosso Raspberry Pi e não a forma padrão de usar o python. Portanto, siga as etapas abaixo:
Passo 1: - Conecte o Raspberry Pi ao monitor, teclado e mouse e ligue-o.
Passo 2: - Certifique-se de que seu Pi está conectado a uma conexão de internet ativa, pois estamos prestes a baixar algumas coisas.
Etapa 3: - Clique em Processing ARM, para baixar o IDE de processamento para Raspberry Pi. O download será no formato de um arquivo ZIP.
Passo 4: - Depois de baixado, extraia os arquivos da pasta ZIP no diretório de sua preferência. Acabei de extraí-lo no meu desktop.
Passo 5: - Agora, abra a pasta extraída e clique no arquivo chamado processamento. Ele deve abrir uma janela conforme mostrado abaixo.
Passo 6: - Este é o ambiente onde estaremos digitando nossos códigos. Para as pessoas que estão familiarizadas com o Arduino, não fique chocado SIM, o IDE é semelhante ao Arduino e o programa também.
Passo 7: - Precisamos de duas bibliotecas para que nosso programa ball seguinte funcione, para instalar, basta clicar em Sketch -> Import Library -> Add Library . A seguinte caixa de diálogo será aberta.
Etapa 8: - Use a caixa de texto superior esquerda para pesquisar Raspberry Pi e pressione Enter. O resultado da pesquisa deve ser semelhante a este.
Passo 9: - Procure as bibliotecas chamadas “GL Video” e “Hardware I / O” e clique em instalar para instalá-las. Certifique-se de instalar as duas bibliotecas.
Passo 10: - Com base na sua internet, a instalação levará alguns minutos. Uma vez feito isso, estamos prontos para o software de processamento.
Diagrama de circuito:
O diagrama de circuito deste projeto de rastreamento da bola Raspberry Pi é mostrado abaixo.
Como você pode ver, o circuito envolve uma câmera PI, módulo Motor Driver e um par de motores conectados ao Raspberry pi. O circuito completo é alimentado por um banco de energia móvel (representado por uma bateria AAA no circuito acima).
Visto que os detalhes dos pinos não são mencionados no Raspberry Pi, precisamos verificar os pinos usando a imagem abaixo
Para acionar os motores, precisamos de quatro pinos (A, B, A, B). Esses quatro pinos são conectados a partir de GPIO14,4,17 e 18, respectivamente. O fio laranja e branco juntos formam a conexão para um motor. Portanto, temos dois desses pares para dois motores.
Os motores são conectados ao módulo Motor Driver L293D conforme mostrado na imagem e o módulo driver é alimentado por um banco de potência. Certifique-se de que o aterramento do banco de potência esteja conectado ao aterramento do Raspberry Pi, só então sua conexão funcionará.
Terminamos com nossa conexão de Hardware, vamos voltar ao nosso ambiente de processamento e começar a programar para ensinar nosso robô a rastrear uma bola.
Programa de rastreamento do Raspberry Pi Ball:
O programa de processamento completo deste projeto é fornecido no final desta página, que você usa diretamente. Mais abaixo, eu expliquei o funcionamento do código para que você possa usá-lo para outros projetos semelhantes.
O conceito do programa é muito simples. Embora a intenção do projeto seja rastrear uma bola, na verdade não vamos fazer isso. Vamos apenas identificar a bola pela cor. Como todos sabemos, os vídeos nada mais são do que quadros contínuos de imagens. Então, pegamos cada foto e dividimos em pixels. Em seguida, comparamos cada cor de pixel com a cor da bola; se for encontrada uma correspondência, podemos dizer que encontramos a bola. Com essas informações também podemos identificar a posição da bola (cor do pixel) na tela. Se a posição for extrema esquerda, movemos o robô para a direita; se a posição for extrema direita, movemos o robô para a esquerda para que a posição do pixel sempre fique no centro da tela. Você pode assistir ao vídeo Computer Vision de Daniel Shiffman para obter uma imagem clara.
Como sempre, começamos importando as duas bibliotecas que baixamos. Isso pode ser feito pelas duas linhas a seguir. A biblioteca de E / S de hardware é usada para acessar os pinos GPIO do PI diretamente do ambiente de processamento, a biblioteca glvideo é usada para acessar o módulo de câmera Raspberry Pi.
importação processing.io. *; import gohai.glvideo. *;
Dentro da função de configuração , inicializamos os pinos de saída para controlar o motor e também obtemos o vídeo da câmera pi e o dimensionamos em uma janela de tamanho 320 * 240.
configuração vazia () {tamanho (320, 240, P2D); video = novo GLCapture (este); video.start (); trackColor = color (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
O void draw é como o loop infinito em que o código dentro desse loop será executado, desde que o programa seja encerrado. Se uma fonte de câmera estiver disponível, lemos o vídeo que sai dela
void draw () {background (0); if (video.available ()) {video.read (); }}
Então começamos a dividir o quadro do vídeo em pixels. Cada pixel tem um valor de vermelho, verde e azul. Esses valores são armazenados nas variáveis r1, g1 e b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Qual é a cor da cor atual currentColor = video.pixels; float r1 = vermelho (cor atual); float g1 = verde (cor atual); float b1 = azul (cor atual);
Para detectar inicialmente a cor da bola, temos que clicar na cor. Assim que clicar a cor da bola será armazenada na variável chamada trackColour .
void mousePressed () {// Salvar a cor onde o mouse é clicado na variável trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Assim que tivermos a cor da trilha e a cor atual, temos que compará-las. Esta comparação está usando a função dist. Ele verifica o quão próxima a cor atual está da cor da trilha.
float d = dist (r1, g1, b1, r2, g2, b2);
O valor de dist será zero para uma correspondência exata. Portanto, se o valor de dist for menor do que um valor especificado (recorde mundial), assumimos que encontramos a cor da trilha. Então, pegamos a localização desse pixel e o armazenamos na variável mais próxima de X e de Y para encontrar a localização da bola
if (d <worldRecord) {worldRecord = d; mais próximoX = x; mais próximoY = y; }
Também desenhamos uma elipse ao redor da cor encontrada para indicar que a cor foi encontrada. O valor da posição também está impresso no console, isso vai ajudar muito na depuração.
if (worldRecord <10) {// Desenhe um círculo no preenchimento de pixels rastreados (trackColor); strokeWeight (4,0); curso (0); elipse (mais próximoX, mais próximoY, 16, 16); println (mais próximoX, mais próximoY);
Finalmente podemos comparar a posição do X mais próximo com o Y mais próximo e ajustar os motores de forma que a cor chegue ao centro da tela. O código abaixo é usado para virar o robô para a direita, uma vez que a posição X da cor foi encontrada no lado esquerdo da tela (<140)
if (mais próximoX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); atraso (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Vire à direita"); }
Da mesma forma, podemos verificar a posição de X e Y para controlar os motores na direção necessária. Como sempre, você pode consultar o final da página para ver o programa completo.
Trabalho do Robô Rastreador Raspberry Pi Ball:
Quando estiver pronto com o hardware e o programa, é hora de se divertir. Antes de testar nosso bot no solo, devemos nos certificar de que tudo está funcionando bem. Conecte seu Pi para monitorar e iniciar o código de processamento. Você deve ver o feed de vídeo em uma pequena janela. Agora, traga a bola para dentro do quadro e clique na bola para ensinar ao robô que ela deve rastrear essa cor específica. Agora mova a bola pela tela e você deve notar as rodas girando.
Se tudo estiver funcionando conforme o esperado, solte o bot no chão e comece a brincar com ele. Certifique-se de que a sala está iluminada por igual para obter os melhores resultados. O funcionamento completo do projeto é mostrado no vídeo abaixo. Espero que você tenha entendido o projeto e gostado de construir algo semelhante. Se você tiver qualquer problema, sinta-se à vontade para postá-lo na seção de comentários abaixo ou ajudar.