Innholdsfortegnelse:

Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing: 7 trinn (med bilder)
Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing: 7 trinn (med bilder)

Video: Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing: 7 trinn (med bilder)

Video: Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing: 7 trinn (med bilder)
Video: Adeept MARS ROVER Raspberry Pi Smart Car Robot Kit PiCar-B is Coming Soon... 2024, November
Anonim
Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing
Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing

Drevet av en Raspberry Pi 3, åpen CV -gjenkjenning, ultralydsensorer og girede DC -motorer. Denne roveren kan spore ethvert objekt den er trent for og bevege seg i alle terreng.

Trinn 1: Introduksjon

Image
Image
Materialer og programvare påkrevd
Materialer og programvare påkrevd

I denne instruksen skal vi bygge en autonom Mars Rover som kan gjenkjenne objekter og spore dem ved hjelp av Open CV -programvaren som kjører på en Raspberry Pi 3 med mulighet for å bruke en webkamera eller det originale bringebær pi -kameraet. Den er også utstyrt med en ultralydsensor montert på en servo for å spore seg i mørke miljøer der kameraet ikke ville fungere. Signaler mottatt fra Pi sendes til motorføreren IC (L293D) som driver 4 x 150 o / min likestrømsmotorer montert på et karosseri bygget med PVC -rør.

Trinn 2: Materialer og programvare påkrevd

Materialer og programvare påkrevd
Materialer og programvare påkrevd
Materialer og programvare påkrevd
Materialer og programvare påkrevd

Materialer som kreves

  1. Bringebær Pi (alle unntatt null)
  2. Bringebær PI -kamera eller et webkamera
  3. L293D motordriver IC
  4. Robothjul (7x4cm) X 4
  5. Girmotorer (150 o / min) X 4
  6. PVC -rør for chassis

Programvare nødvendig

  1. Kitt for SSH ing av Pi
  2. Åpen CV for gjenkjenning av objekter

Trinn 3: Bygg Rover -chassiset

Bygg Rover -chassiset
Bygg Rover -chassiset
Bygg Rover -chassiset
Bygg Rover -chassiset
Bygg Rover -chassiset
Bygg Rover -chassiset

Du trenger for å bygge dette PVC -chassiset

  • 2 x 8"
  • 2 X 4"
  • 4 T-ledd

Plasser PVC-rørene i en stige som struktur og sett dem inn i T-skjøter. Du kan bruke PVC -tetningsmassen for å gjøre leddene enda sterkere.

De girede DC -motorene er koblet til PVC -rørchassiset ved hjelp av klemmer og deretter kobles hjulene til motorene ved hjelp av skruer.

Trinn 4: Bygging av ultralydsmåler

Bygging av ultralydavstandsmåler
Bygging av ultralydavstandsmåler

Den ultralydsmåler er bygget ved hjelp av en HC-SR04 ultralydssensor koblet til en mikro-servomotor. Kabler er forhåndskoblet med ultralydssensoren før de settes i plasthuset som er koblet til servomotoren via skruer.

Trinn 5: Skjemaer og elektriske tilkoblinger

Skjematikk og elektriske tilkoblinger
Skjematikk og elektriske tilkoblinger
Skjematikk og elektriske tilkoblinger
Skjematikk og elektriske tilkoblinger

Gjør de elektriske tilkoblingene i henhold til kretsdiagrammet som er vedlagt.

Trinn 6: SSH og åpen CV -installasjon

Installasjon av SSH og Open CV
Installasjon av SSH og Open CV

Nå må vi SSH inn i bringebær -pi for å installere nødvendig programvare. Vi starter med SSHing til Raspberry Pi. Sørg for at Pi er koblet til den samme ruteren som PC -en og at du vet at IP -adressen er tilordnet den av ruteren. Nå åpner du en ledetekst eller PUTTY hvis du er på Windows og kjører følgende kommando.

ssh [email protected]

Din Pis IP kan være annerledes, min er 192.168.1.6.

Skriv inn standardpassordet ditt - "bringebær"

Nå som du har SSH'et inn i Pi, la oss starte med å oppdatere med denne kommandoen.

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

La oss installere de nødvendige utviklerverktøyene nå, sudo apt-get install build-essential cmake pkg-config

Deretter må vi installere noen bilde -I/O -pakker som vil hjelpe Pi -en vår med å hente forskjellige bildeformater fra disken.

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

Nå, noen pakker for å hente video, live streaming og optimalisere OpenCV -ytelse

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

Vi må også installere Python 2.7 og Python 3 header -filer slik at vi kan kompilere OpenCV med python -bindinger

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

Laster ned kildekode for OpenCV

cd ~

wget -O opencv.zip

pakke ut opencv.zip

Last ned opencv_contrib -depot

wget -O opencv_contrib.zip

pakke ut opencv_contrib.zip

Det anbefales også å bruke et virtuelt miljø for å installere OpenCV.

sudo pip installere virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Nå som virtualenv og virtualenvwrapper er installert, må vi oppdatere vår ~/.profil for å inkludere følgende linjer nederst

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

Lag ditt virtuelle python -miljø

mkvirtualenv cv -p python2

bytte til det skapte virtuelle miljøet

kilde ~/.profil

workon cv

Installere NumPy

pip installer numpy

Kompiler og installer OpenCV

cd ~/opencv-3.3.0/

mkdir build

bygge 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 / -DPLES..

Til slutt kompilerer du OpenCV

lage -j4

Etter at denne kommandoen er ferdig. Alt du trenger å gjøre er å installere det.

sudo lage config

sudo ldconfig

Trinn 7: Kjøre Python -koden for Rover

Image
Image

Lag en Python -fil som heter tracker.py og legg til følgende kode i den.

sudo nano tracker.py

kode:-

#ASAR -program

#Dette programmet sporer en rød ball og instruerer en bringebærpi til å følge den. 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)#venstre motor bakover IO.utgang (22, 1) IO.utgang (13, 0)#høyre motor bakover IO.utgang (15, 1) def ryt (): IO.utgang (21, 0) #Venstre motor bakover IO.utgang (22, 1) IO.utgang (13, 1)#Høyre motor fremover IO.utgang (15, 0) def lft (): IO.utgang (21, 1) #Venstre motor forover IO.utgang (22, 0) IO.utgang (13, 0)#Høyre motor bakover IO. utgang (15, 1) def stp (): IO.utgang (21, 0)#venstre Motorstopp IO.utgang (22, 0) IO.utgang (13, 0)#Høyre motorstopp IO.utgang (15, 0) ############################## #################################################### ####################### def main (): capWebcam = cv2. VideoCapture (0)#erklærer en VideoCapture -objekt og tilknytning til webkamera, 0 => bruk første webkamera # vis originaloppløsning 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) # endre oppløsning til 320x240 for raskere behandling capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # Vis oppdatert oppløsning print "updated resolution =" + str (capWebcam.get (cv2. CAP_PRO_PRO_PRO_PRO_PRO_PRO_PRO)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) hvis capWebcam.isOpened () == Falske: # sjekk om VideoCapture -objektet var tilknyttet webkameraet med vellykket utskrift "feil: capWebcam ble ikke åpnet vellykket / n / n" # hvis ikke, skriv ut feilmelding for å fjerne OS.system ("pause") # pause til brukeren trykker på en tast, slik at brukeren kan se feilmeldingen returnere # og avslutte funksjonen (som går ut av programmet) # ende hvis mens cv2.waitKey (1)! = 27 og capWebcam.isOpened (): # til Esc -tasten trykkes eller webkamera -tilkoblingen blir tapt blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # les neste ramme hvis ikke blnFrameReadSuccessfully eller imgOriginal er Ingen: # hvis rammen ikke ble lest vellykket skrive ut "feil": rammen ble ikke lest fra webkamera / n " # utskriftsfeilmelding for å fjerne OS.system ("pause") # pause til brukeren trykker på en tast, slik at brukeren kan se feilmelding bryte # avslutte mens loop (som går ut av programmet) # ende hvis 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 (imgThh (5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape sirkler = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # fyll variable sirkler med alle sirkler i det behandlede bildet hvis sirkler er ikke Ingen: # denne linjen er nødvendig for å forhindre at programmet krasjer på neste linje hvis ingen sirkler ble funnet IO.output (7, 1) for sirkel i sirkler [0]: # for hver sirkel x, y, radius = sirkel # bryte ut x, y, og radius print "ball posisjon x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # print ball posisjon og radius obRadius = int (radius) 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) # tegne liten grønn sirkel i midten av det oppdagede objektet cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # tegne rød sirkel rundt det oppdagede objektet # ende for # ende hvis ellers: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # lag vinduer, bruk WINDOW_AUTOSIZE for en fast vindusstørrelse cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # eller bruk WINDOW_NORMAL for å tillate størrelse på vindu cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ##################### #################################################### ############################# if _name_ == "_main_": main ()

Nå gjenstår det bare å kjøre programmet

python tracker.py

Gratulerer! din selvkjørende rover er klar! Den ultralydsensorbaserte navigasjonsdelen vil snart bli ferdig, og jeg vil oppdatere denne instruerbare.

Takk for at du leste!

Anbefalt: