Índice:
- Etapa 1: Introdução
- Etapa 2: Materiais e software necessários
- Etapa 3: Construindo o Chassi Rover
- Etapa 4: construção do conjunto do telêmetro ultrassônico
- Etapa 5: esquemas e conexões elétricas
- Etapa 6: SSH e instalação de CV aberto
- Etapa 7: executando o código Python para Rover
Vídeo: Raspberry Pi - Mars Rover autônomo com rastreamento de objetos OpenCV: 7 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
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
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 requisitados
- Raspberry Pi (qualquer menos zero)
- Câmera Raspberry PI ou uma webcam
- IC do driver do motor L293D
- Rodas do robô (7x4cm) X 4
- Motores CC com engrenagem (150 RPM) X 4
- Tubos de PVC para chassis
Requer software
- Massa para SSH ing the Pi
- Currículo aberto para reconhecimento de objeto
Etapa 3: 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
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
Faça as conexões elétricas de acordo com o diagrama de circuito anexo.
Etapa 6: SSH e instalação de CV aberto
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.
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
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:
Programação Orientada a Objetos: Criando Objetos Aprendizado / Método / Técnica de Ensino Usando o Perfurador de Formas: 5 Passos
Programação Orientada a Objetos: Criando Objetos de Aprendizagem / Método / Técnica de Ensino Usando Shape Puncher: Método de aprendizagem / ensino para alunos iniciantes em programação orientada a objetos. Esta é uma forma de permitir que eles visualizem e vejam o processo de criação de objetos a partir de classes.Parte: 1. EkTools soco grande de 2 polegadas; formas sólidas são as melhores. Pedaço de papel ou c
Micro: bit MU Vision Sensor - Rastreamento de objetos: 6 etapas
Sensor de visão MU micro: bit - Objetos de rastreamento: Este é meu quarto guia para o sensor de visão MU para o micro: bit. Aqui, explicarei como rastrear objetos com o micro: bit e gravar as coordenadas em uma tela OLED. Em meus outros guias, examinei como conectar o micro: bit ao
Rastreamento de objetos com base em detecção de cores: 10 etapas
Rastreamento de objetos baseado em detecção de cores: história Eu fiz este projeto para aprender o processamento de imagens usando Raspberry PI e CV aberto. Para tornar este projeto mais interessante, usei dois servo motores SG90 e montei a câmera nele. Um motor usado para mover horizontalmente e o segundo motor usado para mover verticalmente
Programação Orientada a Objetos: Criando Objetos Aprendizagem / Método / Técnica de Ensino com Tesouras: 5 Passos
Programação Orientada a Objetos: Criando Objetos. Aprendizagem / Método / Técnica de Ensino com Tesouras: Método de aprendizagem / ensino para alunos iniciantes em Programação Orientada a Objetos. Esta é uma forma de permitir que eles visualizem e vejam o processo de criação de objetos a partir de classes. Peças: 1. Tesouras (qualquer tipo serve). 2. Pedaço de papel ou cartolina. 3. Marcador
Rastreamento de objetos - Controle de montagem de câmera: 4 etapas
Rastreamento de objetos - Controle de montagem de câmera: Olá a todos, neste Instructable, mostrarei os progressos feitos em meu projeto de rastreamento de objetos. Aqui você pode encontrar o Instructable anterior: https://www.instructables.com/id/Object-Tracking/ e aqui você pode encontrar listas de reprodução do youtube com todas as t