Innholdsfortegnelse:
- Trinn 1: Introduksjon
- Trinn 2: Materialer og programvare påkrevd
- Trinn 3: Bygg Rover -chassiset
- Trinn 4: Bygging av ultralydsmåler
- Trinn 5: Skjemaer og elektriske tilkoblinger
- Trinn 6: SSH og åpen CV -installasjon
- Trinn 7: Kjøre Python -koden for Rover
Video: Raspberry Pi - Autonom Mars Rover med OpenCV -objektsporing: 7 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
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
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 som kreves
- Bringebær Pi (alle unntatt null)
- Bringebær PI -kamera eller et webkamera
- L293D motordriver IC
- Robothjul (7x4cm) X 4
- Girmotorer (150 o / min) X 4
- PVC -rør for chassis
Programvare nødvendig
- Kitt for SSH ing av Pi
- Åpen CV for gjenkjenning av objekter
Trinn 3: 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
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
Gjør de elektriske tilkoblingene i henhold til kretsdiagrammet som er vedlagt.
Trinn 6: SSH og åpen CV -installasjon
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.
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
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:
Gjør Roomba til en Mars Rover: 5 trinn
Gjør Roomba til en Mars Rover:
Mars Rover som bruker Raspberry Pi: 5 trinn
Mars Rover ved hjelp av Raspberry Pi: Kjære alle store lærere, jeg er alltid nysgjerrig på å vite om mars rover, med 6 hjul som kan gå over hele Mars og utforske ting fra jorden. Jeg vil også utforske ting ved å sitte på den bærbare datamaskinen min. Så nå synes jeg det er på tide å gjøre det og
Star Recognition Using Computer Vision (OpenCV): 11 trinn (med bilder)
Stjernegjenkjenning ved hjelp av Computer Vision (OpenCV): Denne instruksjonen vil beskrive for deg hvordan du lager et datasynprogram for å automatisk identifisere stjernemønstre i et bilde. Metoden bruker OpenCV (Open-Source Computer Vision) -biblioteket til å lage et sett med trente HAAR-kaskader som kan
IRobot Create-Mars Expedition Rover Mark I: 4 trinn
IRobot Create-Mars Expedition Rover Mark I: Denne instruksen vil lære deg hvordan du konfigurerer iRobot Create ved å bruke MatLab-koding. Roboten din vil ha muligheten til å søke etter mineraler ved å skille mellom former, manøvrere ulendt terreng ved bruk av klippesensorer, og har evnen
Wi-fi-kontrollert FPV Rover Robot (med Arduino, ESP8266 og Stepper Motors): 11 trinn (med bilder)
Wi-fi-kontrollert FPV Rover Robot (med Arduino, ESP8266 og Stepper Motors): Denne instruksjonen viser hvordan du designer en fjernstyrt tohjulet robotrover over et wi-fi-nettverk, ved hjelp av en Arduino Uno koblet til en ESP8266 Wi-fi-modul og to trinnmotorer. Roboten kan styres fra en vanlig nettleser