Sommario:

Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: 7 passaggi (con immagini)
Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: 7 passaggi (con immagini)

Video: Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: 7 passaggi (con immagini)

Video: Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: 7 passaggi (con immagini)
Video: AR Spatial Tracking Explained 2024, Novembre
Anonim
Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV
Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV

Alimentato da un Raspberry Pi 3, riconoscimento di oggetti Open CV, sensori a ultrasuoni e motori DC con ingranaggi. Questo rover può tracciare qualsiasi oggetto per cui è addestrato e muoversi su qualsiasi terreno.

Passaggio 1: Introduzione

Image
Image
Materiali e software richiesti
Materiali e software richiesti

In questo Instructables, costruiremo un Mars Rover autonomo in grado di riconoscere gli oggetti e seguirli utilizzando il software Open CV in esecuzione su un Raspberry Pi 3 con un'opzione per utilizzare un dispositivo webcam o la fotocamera Raspberry Pi originale. È inoltre dotato di un sensore a ultrasuoni montato su un servo per tracciare la sua strada in ambienti bui in cui la fotocamera non funzionerebbe. I segnali ricevuti da Pi vengono inviati al driver del motore IC (L293D) che pilota 4 motori CC da 150 giri/min montati su un corpo costruito con tubi in PVC.

Passaggio 2: materiali e software necessari

Materiali e software richiesti
Materiali e software richiesti
Materiali e software richiesti
Materiali e software richiesti

Materiali richiesti

  1. Raspberry Pi (qualsiasi ma zero)
  2. Fotocamera Raspberry PI o una webcam
  3. L293D driver del motore IC
  4. Ruote Robot (7x4cm) X 4
  5. Motoriduttori CC (150 giri/min) X 4
  6. Tubi in PVC per chassis

Software richiesto

  1. Putty per SSH ing the Pi
  2. Apri CV per riconoscimento oggetti

Passaggio 3: costruire il telaio Rover

Costruire il telaio Rover
Costruire il telaio Rover
Costruire il telaio Rover
Costruire il telaio Rover
Costruire il telaio Rover
Costruire il telaio Rover

Per costruire questo telaio in PVC, avrai bisogno di

  • 2X8"
  • 2X4"
  • 4 giunti a T

Disporre i tubi in PVC in una struttura simile a una scala e inserirli nei giunti a T. Puoi usare il sigillante in PVC per rendere le giunture ancora più resistenti.

I motoriduttori DC sono collegati al telaio in tubo di PVC mediante fascette e quindi le ruote sono collegate ai motori mediante viti.

Passaggio 4: costruzione del gruppo del telemetro ad ultrasuoni

Costruzione del gruppo del telemetro ad ultrasuoni
Costruzione del gruppo del telemetro ad ultrasuoni

Il gruppo del telemetro a ultrasuoni è costruito utilizzando un sensore a ultrasuoni HC-SR04 collegato a un micro servomotore. I cavi sono precollegati al sensore a ultrasuoni prima di essere inseriti nella custodia di plastica che è collegata al servomotore tramite viti.

Passaggio 5: schemi e collegamenti elettrici

Schemi e collegamenti elettrici
Schemi e collegamenti elettrici
Schemi e collegamenti elettrici
Schemi e collegamenti elettrici

Effettuare i collegamenti elettrici secondo lo schema elettrico allegato.

Passaggio 6: installazione di SSH e Open CV

SSH e installazione Open CV
SSH e installazione Open CV

Ora, abbiamo bisogno di SSH nel nostro Raspberry Pi per installare il software richiesto. Inizieremo con SSH al nostro Raspberry Pi. Assicurati che il tuo Pi sia connesso allo stesso router del tuo PC e che tu sappia che è l'indirizzo IP assegnatogli dal tuo router. Ora, apri un prompt dei comandi o PUTTY se sei su Windows ed esegui il seguente comando.

ssh [email protected]

L'IP del tuo Pi potrebbe essere diverso, il mio è 192.168.1.6.

Ora inserisci la tua password predefinita - "raspberry"

Ora che hai inserito SSH nel tuo Pi, iniziamo aggiornando con questo comando.

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

Installiamo ora gli strumenti di sviluppo richiesti, sudo apt-get install build-essential cmake pkg-config

Successivamente, dobbiamo installare alcuni pacchetti di I/O di immagine che aiuteranno il nostro Pi a recuperare vari formati di immagine dal disco.

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

Ora, alcuni pacchetti per il recupero di video, live streaming e ottimizzazione delle prestazioni di 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

Abbiamo anche bisogno di installare i file di intestazione Python 2.7 e Python 3 in modo da poter compilare OpenCV con collegamenti Python

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

Download del codice sorgente OpenCV

cd ~

wget -O opencv.zip

decomprimere opencv.zip

Download del repository opencv_contrib

wget -O opencv_contrib.zip

decomprimere opencv_contrib.zip

Si consiglia inoltre di utilizzare un ambiente virtuale per l'installazione di OpenCV.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Ora, che virtualenv e virtualenvwrapper sono stati installati, dobbiamo aggiornare il nostro ~/.profile per includere le seguenti righe in fondo

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

Crea il tuo ambiente virtuale Python

mkvirtualenv cv -p python2

passare all'ambiente virtuale creato

sorgente ~/.profilo

lavoro sul curriculum

Installazione di NumPy

pip install numpy

Compila e installa OpenCV

cd ~/opencv-3.3.0/

build mkdir

cd build

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.

Infine compila OpenCV

make -j4

Al termine dell'esecuzione di questo comando. Tutto quello che devi fare è installarlo.

sudo make config

sudo ldconfig

Passaggio 7: esecuzione del codice Python per Rover

Image
Image

Crea un file Python chiamato tracker.py e aggiungi il codice seguente.

sudo nano tracker.py

codice:-

Programma #ASAR

#Questo programma traccia una pallina rossa e ordina a un lampone pi di seguirla. 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)#Motore sinistro indietro IO.output(22, 1) IO.output(13, 0)#Destro motore indietro IO.output(15, 1) def ryt(): IO.output(21, 0) #Left Motor indietro IO.output(22, 1) IO.output(13, 1)#Left Motor forward IO.output(15, 0) def lft(): IO.output(21, 1)#Left Motor avanti IO.output(22, 0) IO.output(13, 0)#Right Motor indietro IO.output(15, 1) def stp(): IO.output(21, 0)#Sinistra Motor stop IO.output(22, 0) IO.output(13, 0)#Stop motore destro IO.output(15, 0) ########################### ################################################# ##################### def main(): capWebcam = cv2. VideoCapture(0) # dichiara a Oggetto VideoCapture e associalo alla webcam, 0 => usa la prima webcam # mostra la risoluzione originale print "risoluzione predefinita = " + 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) # cambia la risoluzione a 320x240 per un'elaborazione più rapida capWebcam.set(cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # mostra la risoluzione aggiornata print "updated resolution = " + str(capWebcam.get(cv2. CAP_PROPTH_FRAME)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened() == False: # controlla se l'oggetto VideoCapture è stato associato con successo alla webcam print "error: capWebcam non ha avuto accesso con successo\n\n" # in caso contrario, stampa il messaggio di errore su std out os.system("pause") # mette in pausa finché l'utente non preme un tasto in modo che l'utente possa vedere il messaggio di errore return # e exit function (che esce dal programma) # end if while cv2.waitKey(1) != 27 e capWebcam.isOpened(): # finché non si preme il tasto Esc o si perde la connessione alla webcam blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # legge il frame successivo se non blnFrameReadSuccessfully o imgOriginal è None: # se il frame non è stato letto correttamente print "error: frame non letto dalla webcam\n" # stampa il messaggio di errore su std out os.system ("pausa") # mette in pausa finché l'utente non preme un tasto in modo che l'utente possa vedere il messaggio di errore break # exit while loop (che esce dal programma) # 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) # riempi i cerchi variabili con tutti i cerchi nell'immagine elaborata se cerchi non è None: # questa riga è necessaria per evitare che il programma vada in crash sulla riga successiva se non sono stati trovati cerchi IO.output(7, 1) for circle in circles[0]: # per ogni cerchio x, y, raggio = circle # breakout x, y e raggio stampa "posizione palla x = " + str(x) + ", y = " + str(y) + ", raggio = " + str(raggio) # stampa posizione palla e raggio obRadius = int(raggio) xAsse = int(x) if obRadius>0 & obRadius100&xAsse180: print("Spostamento a destra") ryt() elif xAsse<100: print("Spostamento a sinistra") lft() else: stp() else: stp () cv2.circle(imgOriginal, (x, y), 3, (0, 255, 0), -1) # disegna un piccolo cerchio verde al centro dell'oggetto rilevato cv2.circle(imgOriginal, (x, y), raggio, (0, 0, 255), 3) # disegna un cerchio rosso attorno all'oggetto rilevato # end for # end if else: IO.output(7, 0) cv2.namedWindow("imgOriginal", cv2. WINDOW_AUTOSIZE) # crea finestre, usa WINDOW_AUTOSIZE per una dimensione fissa della finestra cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) # o usa WINDOW_NORMAL per consentire il ridimensionamento della finestra cv2.imshow("imgOriginal", imgOri ginal) # show windows cv2.imshow("imgThresh", imgThresh) # end while cv2.destroyAllWindows() # rimuove windows dalla memoria return ##################### ################################################# ############################ if _name_ == "_main_": main()

Ora non resta che eseguire il programma

python tracker.py

Congratulazioni! il tuo rover a guida autonoma è pronto! La parte di navigazione basata sul sensore a ultrasuoni sarà completata presto e aggiornerò questa istruzione.

Grazie per aver letto!

Consigliato: