Índice:

Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV: 7 etapas (com imagens)
Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV: 7 etapas (com imagens)

Vídeo: Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV: 7 etapas (com imagens)

Vídeo: Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV: 7 etapas (com imagens)
Vídeo: This Robot Follows a Ball with Neural Network 2024, Novembro
Anonim
Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV
Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV

Alimentado por um Raspberry Pi 3, reconhecimento de objetos Open CV, sensores ultrassônicos e motores DC com engrenagens. Este rover pode rastrear qualquer objeto para o qual foi treinado e se mover em qualquer terreno.

Etapa 1: Introdução

Image
Image
Materiais e software necessários
Materiais e software necessários

Neste Instructables, vamos construir um Autonomous Mars Rover que pode reconhecer objetos e rastreá-los usando o software Open CV rodando em um Raspberry Pi 3 com a opção de usar um dispositivo de webcam ou a câmera Raspberry Pi original. Também é equipado com um sensor ultrassônico montado em um servo para rastrear seu caminho em ambientes escuros onde a câmera não funcionaria. Os sinais recebidos do Pi são enviados para o driver do motor IC (L293D) que aciona 4 motores CC de 150 RPM montados em um corpo construído com tubos de PVC.

Etapa 2: Materiais e software necessários

Materiais e software necessários
Materiais e software necessários
Materiais e software necessários
Materiais e software necessários

Materiais requisitados

  1. Raspberry Pi (qualquer menos zero)
  2. Câmera Raspberry PI ou uma webcam
  3. IC do driver do motor L293D
  4. Rodas do robô (7x4cm) X 4
  5. Motores CC com engrenagem (150 RPM) X 4
  6. Tubos de PVC para chassis

Requer software

  1. Massa para SSH ing the Pi
  2. Currículo aberto para reconhecimento de objeto

Etapa 3: Construindo o Chassi Rover

Construindo o Chassi Rover
Construindo o Chassi Rover
Construindo o Chassi Rover
Construindo o Chassi Rover
Construindo o Chassi Rover
Construindo o Chassi Rover

Para construir este chassi de PVC, você precisará

  • 2 x 8"
  • 2 x 4"
  • 4 juntas em T

Organize os tubos de PVC em uma estrutura em forma de escada e insira nas juntas em T. Você pode usar o selante de PVC para tornar as juntas ainda mais fortes.

Os motores DC com engrenagem são conectados ao chassi em tubo de PVC por meio de braçadeiras e, em seguida, as rodas são conectadas aos motores por meio de parafusos.

Etapa 4: construção do conjunto do telêmetro ultrassônico

Montagem de conjunto de telêmetro ultrassônico
Montagem de conjunto de telêmetro ultrassônico

O conjunto do telêmetro ultrassônico é construído usando um sensor ultrassônico HC-SR04 conectado a um micro servo motor. Os cabos são pré-conectados ao sensor ultrassônico antes de serem colocados na caixa de plástico que é conectada ao servo motor por meio de parafusos.

Etapa 5: esquemas e conexões elétricas

Esquemas e conexões elétricas
Esquemas e conexões elétricas
Esquemas e conexões elétricas
Esquemas e conexões elétricas

Faça as conexões elétricas de acordo com o diagrama de circuito anexo.

Etapa 6: SSH e instalação de CV aberto

Instalação SSH e CV aberta
Instalação SSH e CV aberta

Agora, precisamos fazer o SSH em nosso raspberry pi para instalar o software necessário. Começaremos por SSHing para nosso Raspberry Pi. Certifique-se de que o seu Pi está conectado ao mesmo roteador que o seu PC e que você sabe que o endereço IP atribuído a ele pelo seu roteador. Agora, abra um prompt de comando ou PUTTY se você estiver no Windows e execute o seguinte comando.

ssh [email protected]

O IP do seu Pi pode ser diferente, o meu é 192.168.1.6.

Agora, digite sua senha padrão - "framboesa"

Agora que você fez o SSH em seu Pi, vamos começar atualizando com este comando.

sudo apt-get update && sudo apt-get upgrade

Vamos instalar as ferramentas de desenvolvedor necessárias agora, sudo apt-get install build-essential cmake pkg-config

Em seguida, precisamos instalar alguns pacotes de E / S de imagem que ajudarão nosso Pi a buscar vários formatos de imagem do disco.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Agora, alguns pacotes para buscar vídeo, streaming ao vivo e otimizar o desempenho do OpenCV

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

Também precisamos instalar os arquivos de cabeçalho Python 2.7 e Python 3 para que possamos compilar o OpenCV com ligações python

sudo apt-get install python2.7-dev python3-dev

Baixando código-fonte OpenCV

cd ~

wget -O opencv.zip

descompacte opencv.zip

Baixando o repositório opencv_contrib

wget -O opencv_contrib.zip

descompacte opencv_contrib.zip

Também é recomendável usar um ambiente virtual para instalar o OpenCV.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~ /.cache / pip

Agora que o virtualenv e o virtualenvwrapper foram instalados, precisamos atualizar nosso ~ /.profile para incluir as seguintes linhas na parte inferior

export WORKON_HOME = $ HOME /.virtualenvs export VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 source /usr/local/bin/virtualenvwrapper.sh

Crie seu ambiente virtual python

mkvirtualenv cv -p python2

mudar para o ambiente virtual criado

fonte ~ /.profile

workon cv

Instalando NumPy

pip install numpy

Compilar e instalar o OpenCV

cd ~ / opencv-3.3.0 /

construção mkdir

construção de cd

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX = / usr / local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib-3.3.0 / modules / -D BUILD_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib-3.3.0 / modules / -D BUILD_EXAMPLES = ON.

Finalmente compile o OpenCV

make -j4

Após o término da execução deste comando. Tudo que você precisa fazer é instalá-lo.

sudo make config

sudo ldconfig

Etapa 7: executando o código Python para Rover

Image
Image

Crie um arquivo Python denominado tracker.py e adicione o seguinte código a ele.

sudo nano tracker.py

código:-

#ASAR Program

#Este programa rastreia uma bola vermelha e instrui um pi de framboesa a segui-la. import sys sys.path.append ('/ usr / local / lib / python2.7 / site-packages') import cv2 import numpy as np import os import RPi. GPIO as IO IO.setmode (IO. BOARD) IO.setup (7, IO. OUT) IO.setup (15, IO. OUT) IO.setup (13, IO. OUT) IO.setup (21, IO. OUT) IO.setup (22, IO. OUT) def fwd (): IO.output (21, 1) #Left Motor Forward IO.output (22, 0) IO.output (13, 1) #Right Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0) #Left Motor backward IO.output (22, 1) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def ryt (): IO.output (21, 0) #Left Motor backward IO.output (22, 1) IO.output (13, 1) #Right Motor forward IO.output (15, 0) def lft (): IO.output (21, 1) #Left Motor forward IO.output (22, 0) IO.output (13, 0) # Motor direito IO.output para trás (15, 1) def stp (): IO.output (21, 0) # Motor esquerdo parar IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ################################## ############################################################### ############################ Def main (): capWebcam = cv2. VideoCapture (0) # declara um Objeto VideoCapture e associado à webcam, 0 => usar 1ª webcam # show original resolution print "default resolution =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) capWebcam.set (cv2. CAP_PROP_FRAME_WIDTH, 320.0) # alterar a resolução para 320x240 para um processamento mais rápido capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # show updated resolution print "updated resolution =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_FRAME_)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == Falso: # verifique se o objeto VideoCapture foi associado à webcam com sucesso print "erro: capWebcam não foi acessado com sucesso / n / n" # se não, imprime mensagem de erro para std out os.system ("pause") # pause até que o usuário pressione uma tecla para que o usuário possa ver a mensagem de erro retornar # e sair da função (que sai do programa) # end if while cv2.waitKey (1)! = 27 e capWebcam.isOpened (): # até que a tecla Esc seja pressionada ou a conexão da webcam seja perdida blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lê o próximo quadro se não blnFrameReadSuccessfully ou imgOriginal é Nenhum: # se o quadro não foi lido com sucesso imprimir "erro: quadro não lido da webcam / n" # imprimir mensagem de erro para std out os.system ("pause") # pause até que o usuário pressione uma tecla para que possa ver a mensagem de erro break # exit while loop (que sai do programa) # end if imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.array ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. array ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThresh, np.ones ((5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape circles = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # preencher círculos variáveis com todos os círculos na imagem processada se forem círculos não é nenhum: # esta linha é necessária para evitar que o programa trave na próxima linha se nenhum círculo for encontrado IO.output (7, 1) para o círculo em círculos [0]: # para cada círculo x, y, raio = círculo # quebrar x, y e raio imprimir "posição da bola x =" + str (x) + ", y =" + str (y) + ", raio =" + str (raio) # imprimir posição da bola e raio obRadius = int (raio) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Moving Right") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # desenhe um pequeno círculo verde no centro do objeto detectado cv2.circle (imgOriginal, (x, y), raio, (0, 0, 255), 3) # desenhe um círculo vermelho ao redor do objeto detectado # fim para # fim se mais: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # criar janelas, use WINDOW_AUTOSIZE para um tamanho de janela fixo cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # ou use WINDOW_NORMAL para permitir o redimensionamento da janela cv2.imshow ("imgOriginal", imgOri ginal) # show windows cv2.imshow ("imgThresh", imgThresh) # end while cv2.destroyAllWindows () # remove windows from memory return ######################## ############################################################### ##################################### Se _name_ == "_main_": main ()

Agora, tudo o que resta fazer é executar o programa

python tracker.py

Parabéns! seu veículo espacial autônomo está pronto! A parte de navegação baseada em sensor ultrassônico será concluída em breve e atualizarei este instrutível.

Obrigado por ler!

Recomendado: