Innehållsförteckning:
- Steg 1: Introduktion
- Steg 2: Material och programvara krävs
- Steg 3: Bygga Rover -chassit
- Steg 4: Bygga ultraljudsmätare
- Steg 5: Schema och elektriska anslutningar
- Steg 6: SSH och Öppna CV -installation
- Steg 7: Kör Python -koden för Rover
Video: Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking: 7 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
Drivs av en Raspberry Pi 3, Open CV -objektigenkänning, ultraljudssensorer och växlade likströmsmotorer. Denna rover kan spåra alla föremål den är utbildad för och röra sig på vilken terräng som helst.
Steg 1: Introduktion
I denna instruktion kommer vi att bygga en autonom Mars Rover som kan känna igen föremål och spåra dem med programvaran Open CV som körs på en Raspberry Pi 3 med möjlighet att använda en webbkamera eller den ursprungliga hallon Pi -kameran. Den är också utrustad med en ultraljudssensor monterad på en servo för att spåra sin väg i mörka miljöer där kameran inte skulle fungera. Signaler som tas emot från Pi skickas till motorföraren IC (L293D) som driver 4 x 150 varv / min DC -motorer monterade på en kaross byggd med PVC -rör.
Steg 2: Material och programvara krävs
Material som krävs
- Raspberry Pi (Alla utom noll)
- Hallon PI -kamera eller en webbkamera
- L293D motordrivrutin IC
- Robothjul (7x4cm) X 4
- Växlade likströmsmotorer (150 varv / min) X 4
- PVC -rör för chassi
Programvara krävs
- Spackel för SSH i Pi
- Öppna CV för objektigenkänning
Steg 3: Bygga Rover -chassit
För att bygga detta PVC -chassi behöver du
- 2 X 8"
- 2 X 4"
- 4 T-leder
Placera PVC-rören i en stege som struktur och sätt in dem i T-fogar. Du kan använda PVC -tätningsmedlet för att göra lederna ännu starkare.
De växlade likströmsmotorerna är anslutna till PVC -rörchassit med hjälp av klämmor och sedan är hjul anslutna till motorerna med hjälp av skruvar.
Steg 4: Bygga ultraljudsmätare
Ultraljudsavläsarenheten är byggd med en HC-SR04 ultraljudssensor ansluten till en mikro servomotor. Kablar är föranslutna med ultraljudssensorn innan de sätts i plasthuset som är anslutet till servomotorn via skruvar.
Steg 5: Schema och elektriska anslutningar
Gör de elektriska anslutningarna enligt kopplingsschemat.
Steg 6: SSH och Öppna CV -installation
Nu måste vi SSH i vår hallon pi för att installera den nödvändiga programvaran. Vi börjar med SSHing till vår Raspberry Pi. Se till att din Pi är ansluten till samma router som din dator och att du vet att den är IP -adress som tilldelats den av din router. Öppna nu en kommandotolk eller PUTTY om du använder Windows och kör följande kommando.
Din Pi: s IP kan vara annorlunda, min är 192.168.1.6.
Ange nu ditt standardlösenord - "hallon"
Nu när du har SSH till din Pi, låt oss börja med att uppdatera med det här kommandot.
sudo apt-get update && sudo apt-get upgrade
Låt oss installera de utvecklingsverktyg som krävs nu, sudo apt-get install build-essential cmake pkg-config
Därefter måste vi installera några bild -I/O -paket som hjälper vår Pi att hämta olika bildformat från hårddisken.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Nu några paket för hämtning av video, livestreaming och optimering av OpenCV -prestanda
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åste också installera Python 2.7 och Python 3 header -filer så att vi kan kompilera OpenCV med pythonbindningar
sudo apt-get install python2.7-dev python3-dev
Hämtar OpenCV -källkod
cd ~
wget -O opencv.zip
packa upp opencv.zip
Hämtar opencv_contrib -förvaret
wget -O opencv_contrib.zip
packa upp opencv_contrib.zip
Det rekommenderas också att använda en virtuell miljö för att installera OpenCV.
sudo pip installera virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Nu när virtualenv och virtualenvwrapper har installerats måste vi uppdatera vår ~/.profil för att inkludera följande rader längst ner
export WORKON_HOME = $ HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
Skapa din virtuella python -miljö
mkvirtualenv cv -p python2
växla till den skapade virtuella miljön
källa ~/.profile
workon cv
Installera NumPy
pip installera numpy
Kompilera och installera OpenCV
cd ~/opencv-3.3.0/
mkdir build
cd -byggnad
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..
Slutligen kompilera OpenCV
gör -j4
När detta kommando har körts. Allt du behöver göra är att installera det.
sudo gör config
sudo ldconfig
Steg 7: Kör Python -koden för Rover
Skapa en Python -fil som heter tracker.py och lägg till följande kod i den.
sudo nano tracker.py
koda:-
#ASAR -program
#Detta program spårar en röd boll och instruerar en hallonpi att följa den. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') import cv2 import numpy som np import os import RPi. GPIO som 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)#Vänster motor bakåt IO.output (22, 1) IO.output (13, 0)#Höger motor bakåt IO.output (15, 1) def ryt (): IO.output (21, 0) #Vänster motor bakåt IO.output (22, 1) IO.output (13, 1)#Höger motor fram IO.output (15, 0) def lft (): IO.output (21, 1)#Left Motor forward IO.output (22, 0) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def stp (): IO.output (21, 0)#Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################## #################################################### ####################### def main (): capWebcam = cv2. VideoCapture (0)#deklarera en VideoCapture -objekt och associera till webbkamera, 0 => använd första webbkamera # visa originalupplö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) # ändra upplösning till 320x240 för snabbare bearbetning capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # visa uppdaterad upplösning print "updated resolution =" + str (capWebcam.get (cv2. CAP_PRO_PRO_PRO_PRO_PRO_PRO_PRO_PRO)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) om capWebcam.isOpened () == Falskt: # kontrollera om VideoCapture -objektet var associerat till webbkameran lyckades skriva ut "fel: capWebcam kunde inte nås framgångsrikt / n / n" # om inte, skriv ut felmeddelande för att stoppa os.system ("paus") # pausa tills användaren trycker på en knapp så att användaren kan se felmeddelandet returnera # och avsluta funktionen (som lämnar programmet) # avsluta om medan cv2.waitKey (1)! = 27 och capWebcam.isOpened (): # tills Esc -tangenten trycks ned eller webbkamerans anslutning förloras blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # läs nästa bildruta om inte blnFrameReadSuccessfully eller imgOriginal är Ingen: # om ramen inte lästes framgångsrikt skriv ut "fel": ramen lästes inte från webbkamera / n " # utskriftsfelmeddelande för att stoppa OS.system ("paus") # paus tills användaren trycker på en knapp så att användaren kan se felmeddelandet bryta # avsluta medan loop (som avslutar programmet) # slut om 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 cirklar = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # fyll variabla cirklar med alla cirklar i den bearbetade bilden om cirklar är inte Ingen: # denna rad är nödvändig för att programmet inte ska krascha på nästa rad om inga cirklar hittades IO.output (7, 1) för cirkel i cirklar [0]: # för varje cirkel x, y, radie = cirkel # bryta ut x, y och radieutskrift "kulposition x =" + str (x) + ", y =" + str (y) + ", radie =" + str (radie) # skriv ut kulposition och radie obRadius = int (radie) 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) # rita en liten grön cirkel i mitten av det detekterade objektet cv2.circle (imgOriginal, (x, y), radie, (0, 0, 255), 3) # rita röd cirkel runt det detekterade objektet # ände för # ände om annars: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # skapa fönster, använd WINDOW_AUTOSIZE för en fast fönsterstorlek cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # eller använd WINDOW_NORMAL för att tillåta fönsterändring cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ###################### #################################################### ############################# if _name_ == "_main_": main ()
Nu är det bara att köra programmet
python tracker.py
grattis! din självkörande rover är redo! Den ultraljuds sensorbaserade navigationsdelen kommer snart att vara klar och jag kommer att uppdatera denna instruerbara.
Tack för att du läser!
Rekommenderad:
Opencv Object Tracking: 3 steg
Opencv Object Tracking: Detektering av rörliga objekt är en teknik som används vid datorsyn och bildbehandling. Flera på varandra följande bildrutor från en video jämförs med olika metoder för att avgöra om något rörligt objekt detekteras. Detektering av rörliga objekt har använts för wi
Mars Rover med Raspberry Pi: 5 steg
Mars Rover Använda Raspberry Pi: Kära alla stora lärare, jag är alltid nyfiken på att veta om mars rover, med 6 hjul som kan gå överallt på Mars och utforska saker från jorden. Jag vill också utforska saken genom att sitta på min bärbara dator. Så nu tycker jag att det är rätt tid att göra det och
"GRECO" - Arduino Object Avoiding Robot för nybörjare: 6 steg (med bilder)
"GRECO" - Arduino -objekt som undviker robot för nybörjare: Tja, om du är nybörjare, här hittar du det enklaste sättet att bygga ditt eget föremål som undviker robot! Vi kommer att använda ett mini -runt robotchassi med två likströmsmotorer för att bygga det lättare . För en gång till väljer vi att använda det berömda Arduino UNO -kortet. Vår
Trafikmönsteranalysator med Live Object Detection: 11 steg (med bilder)
Trafikmönsteranalysator som använder liveobjektdetektering: I dagens värld är trafikljus avgörande för en säker väg. Men många gånger kan trafikljus vara irriterande i situationer där någon närmar sig ljuset precis som det blir rött. Detta slösar bort tid, särskilt om ljuset är för
Visual Object Detection With a Camera (TfCD): 15 steg (med bilder)
Visual Object Detection With a Camera (TfCD): Kognitiva tjänster som kan känna igen känslor, ansikten hos människor eller enkla objekt är för närvarande fortfarande i ett tidigt utvecklingsstadium, men med maskininlärning utvecklas denna teknik alltmer. Vi kan förvänta oss att se mer av denna magi i