Sommario:
- Passaggio 1: Introduzione
- Passaggio 2: materiali e software necessari
- Passaggio 3: costruire il telaio Rover
- Passaggio 4: costruzione del gruppo del telemetro ad ultrasuoni
- Passaggio 5: schemi e collegamenti elettrici
- Passaggio 6: installazione di SSH e Open CV
- Passaggio 7: esecuzione del codice Python per Rover
Video: Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: 7 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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 richiesti
- Raspberry Pi (qualsiasi ma zero)
- Fotocamera Raspberry PI o una webcam
- L293D driver del motore IC
- Ruote Robot (7x4cm) X 4
- Motoriduttori CC (150 giri/min) X 4
- Tubi in PVC per chassis
Software richiesto
- Putty per SSH ing the Pi
- Apri CV per riconoscimento oggetti
Passaggio 3: 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
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
Effettuare i collegamenti elettrici secondo lo schema elettrico allegato.
Passaggio 6: installazione di SSH e 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.
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
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:
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento utilizzando Shape Puncher: 5 passaggi
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento utilizzando Shape Puncher: metodo di apprendimento/insegnamento per studenti nuovi alla programmazione orientata agli oggetti. Questo è un modo per consentire loro di visualizzare e vedere il processo di creazione di oggetti dalle classi.Parti:1. EkTools punzone grande da 2 pollici; le forme solide sono le migliori.2. Pezzo di carta o c
Tracciamento di oggetti Opencv: 3 passaggi
Opencv Object Tracking: il rilevamento di oggetti in movimento è una tecnica utilizzata nella visione artificiale e nell'elaborazione delle immagini. Più fotogrammi consecutivi di un video vengono confrontati con vari metodi per determinare se viene rilevato un oggetto in movimento. Il rilevamento di oggetti in movimento è stato utilizzato per wi
Tracciamento degli oggetti basato sul rilevamento del colore: 10 passaggi
Tracciamento degli oggetti basato sul rilevamento del colore: storia Ho realizzato questo progetto per imparare l'elaborazione delle immagini utilizzando Raspberry PI e aprire CV. Per rendere questo progetto più interessante ho usato due servomotori SG90 e ci ho montato una telecamera. Un motore utilizzato per muoversi orizzontalmente e il secondo motore utilizzato per muoversi verticalmente
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento con le forbici: 5 passaggi
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento Utilizzo delle forbici: metodo di apprendimento/insegnamento per studenti nuovi alla programmazione orientata agli oggetti. Questo è un modo per consentire loro di visualizzare e vedere il processo di creazione di oggetti dalle classi. Parti: 1. Forbici (va bene qualsiasi tipo). 2. Pezzo di carta o cartoncino. 3. Indicatore
Tracciamento oggetti - Controllo del montaggio della fotocamera: 4 passaggi
Object Tracking - Camera Mount Control: Ciao a tutti, in questo Instructable vi mostrerò i progressi fatti per il mio Object Tracking Project. Qui potete trovare il precedente Instructable: https://www.instructables.com/id/Object-Tracking/ e qui puoi trovare una playlist di youtube con tutte le t