INHOUDSOPGAWE:
- Stap 1: Inleiding
- Stap 2: materiaal en sagteware benodig
- Stap 3: Bou die Rover -onderstel
- Stap 4: Bou van ultrasoniese afstandsmeter -samestelling
- Stap 5: Skema's en elektriese verbindings
- Stap 6: SSH en Open CV -installasie
- Stap 7: Gebruik die Python -kode vir Rover
Video: Raspberry Pi - Outonome Mars Rover Met OpenCV -voorwerpopsporing: 7 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Aangedryf deur 'n Raspberry Pi 3, Open CV -objekherkenning, Ultrasoniese sensors en gemotoriseerde DC -motors. Hierdie rover kan enige voorwerp waarvoor hy opgelei is, opspoor en op enige terrein beweeg.
Stap 1: Inleiding
In hierdie instruksies gaan ons 'n outonome Mars Rover bou wat voorwerpe kan herken en opspoor met behulp van die Open CV -sagteware wat op 'n Raspberry Pi 3 gebruik word, met 'n opsie om 'n webcam -toestel of die oorspronklike framboospi -kamera te gebruik. Dit is ook toegerus met 'n ultraklank -sensor wat op 'n servo gemonteer is om in donker omgewings op te spoor waar die kamera nie werk nie. Seine wat van Pi ontvang word, word gestuur na die motorbestuurder IC (L293D), wat 4 x 150 rpm DC -motors aandryf wat gemonteer is op 'n bak met PVC -pype.
Stap 2: materiaal en sagteware benodig
Materiaal benodig
- Framboos Pi (enige maar nul)
- Framboos PI -kamera of 'n webkamera
- L293D motorbestuurder IC
- Robotwiele (7x4cm) X 4
- Geskikte DC -motors (150 omw / min) X 4
- PVC pype vir onderstel
Sagteware benodig
- Putty vir SSH ing the Pi
- Maak CV oop vir objekherkenning
Stap 3: Bou die Rover -onderstel
U benodig hierdie PVC -onderstel
- 2 x 8"
- 2 X 4"
- 4 T-gewrigte
Plaas die PVC-pype in 'n leeragtige struktuur en plaas dit in T-verbindings. U kan die PVC -seëlaar gebruik om die voeë nog sterker te maak.
Die gemotoriseerde DC -motors word met klemme verbind met die PVC -pyponderstel, en dan word wiele met skroewe met die motors verbind.
Stap 4: Bou van ultrasoniese afstandsmeter -samestelling
Die ultrasoniese afstandsmeter-samestelling is gebou met behulp van 'n HC-SR04 Ultrasoniese sensor wat met 'n Micro Servo-motor verbind is. Kabels word vooraf met die ultrasoniese sensor gekoppel voordat hulle in die plastiekkas geplaas word wat via skroewe aan die servomotor gekoppel is.
Stap 5: Skema's en elektriese verbindings
Maak die elektriese aansluitings volgens die skets wat hierby aangeheg is.
Stap 6: SSH en Open CV -installasie
Nou moet ons in ons framboos -pi inskakel om die nodige sagteware te installeer. Ons begin met SSHing na ons Raspberry Pi. Maak seker dat u Pi aan dieselfde router as u rekenaar gekoppel is en dat u weet dat dit die IP -adres is wat deur u router toegeken is. Maak nou 'n opdragprompt of PUTTY oop as u Windows gebruik en voer die volgende opdrag uit.
Die IP van u Pi kan anders wees; myne is 192.168.1.6.
Voer u standaard wagwoord in - "framboos"
Noudat u SSH in u Pi gehad het, laat ons begin met die opdatering met hierdie opdrag.
sudo apt-get update && sudo apt-get upgrade
Laat ons nou die vereiste ontwikkelaarhulpmiddels installeer, sudo apt-get install build-essential cmake pkg-config
Vervolgens moet ons 'n paar beeld -I/O -pakkette installeer wat ons Pi sal help om verskillende beeldformate van die skyf af te haal.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Nou 'n paar pakkette om video, live streaming en optimalisering van OpenCV -prestasie te gaan haal
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get installeer libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
Ons moet ook Python 2.7 en Python 3 koptekst lêers installeer sodat ons OpenCV kan saamstel met python bindings
sudo apt-get install python2.7-dev python3-dev
Laai tans OpenCV -bronkode af
cd ~
wget -O opencv.zip
pak opencv.zip uit
Laai die opencv_contrib -bewaarplek af
wget -O opencv_contrib.zip
pak opencv_contrib.zip uit
Dit word ook aanbeveel om 'n virtuele omgewing te gebruik vir die installering van OpenCV.
sudo pip installeer virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Noudat die virtualenv en virtualenvwrapper geïnstalleer is, moet ons ons ~/.profiel opdateer om die volgende reëls onderaan te bevat
uitvoer WORKON_HOME = $ HOME/.virtualenvs uitvoer VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 bron /usr/local/bin/virtualenvwrapper.sh
Skep u virtuele python -omgewing
mkvirtualenv cv -p python2
skakel oor na die geskepte virtuele omgewing
bron ~/.profiel
werk cv
Installeer NumPy
pip installeer numpy
Stel OpenCV op en installeer dit
cd ~/opencv-3.3.0/
mkdir bou
cd bou
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 ON -DPLES..
Stel uiteindelik OpenCV saam
maak -j4
Nadat hierdie opdrag uitgevoer is. Al wat u hoef te doen is om dit te installeer.
sudo maak config
sudo ldconfig
Stap 7: Gebruik die Python -kode vir Rover
Skep 'n Python -lêer met die naam tracker.py en voeg die volgende kode daarby.
sudo nano tracker.py
kode:-
#ASAR -program
#Hierdie program volg 'n rooi bal en gee 'n framboos pi opdrag om dit te volg. invoer 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)#Links Motor agteruit IO.uitgang (22, 1) IO.uitgang (13, 0)#Regs motor agteruit IO.uitgang (15, 1) def ryt (): IO.output (21, 0) #Links Motor agteruit IO.uitgang (22, 1) IO.output (13, 1)#Regs motor vorentoe 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)#Regter Motor stop IO.output (15, 0) ############################## #################################################### ####################### def main (): capWebcam = cv2. VideoCapture (0)#verklaar 'n VideoCapture -voorwerp en assosieer met die webkamera, 0 => gebruik die eerste webkamera # wys oorspronklike resolusie druk "standaardresolusie =" + 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) # verander resolusie na 320x240 vir vinniger verwerking van capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # wys opgedateerde resolusie druk "updated resolution =" + str (capWebcam.get (cv2. CAP_PRO_PRO_PRO_PRO_PRO_PRO)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) as capWebcam.isOpened () == Onwaar: # kyk of VideoCapture -voorwerp aan die webkamera suksesvol gedruk is "fout": capWebcam is nie suksesvol benader nie / n / n " # indien nie, druk 'n foutboodskap uit om os.system uit te skakel ("pouse"))! = 27 en capWebcam.isOpened (): # totdat die Esc -toets ingedruk word of die webcamverbinding verbreek word blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lees volgende raam as nie blnFrameReadSuccessfully of imgOriginal is Geen: # as raam nie suksesvol gelees nie druk "fout: raam nie gelees van webcam nie \" "drukfoutboodskap om OS.system uit te skakel ("pouse") # pouse totdat die gebruiker op 'n sleutel druk, sodat die gebruiker die foutboodskap kan sien breek # uitgang terwyl lus (wat die program verlaat) # einde as 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 (ng. 5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape sirkels = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # vul veranderlike sirkels met alle sirkels in die verwerkte prent as sirkels is nie Geen: # hierdie reël is nodig om te voorkom dat die program op die volgende reël vasval as daar nie sirkels gevind word nie IO.uitvoer (7, 1) vir sirkel in sirkels [0]: # vir elke sirkel x, y, radius = sirkel # breek x, y en radius uit druk "balposisie x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # druk balposisie en 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) # teken 'n klein groen sirkel in die middel van die bespeurde voorwerp cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # teken 'n rooi sirkel om die bespeurde voorwerp # einde vir # einde as anders: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # skep vensters, gebruik WINDOW_AUTOSIZE vir 'n vaste venstergrootte cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # of gebruik WINDOW_NORMAL om die grootte van vensters cv2.imshow ("imgOriginal", imgOri toe te laat ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ###################### #################################################### ############################# if _name_ == "_main_": main ()
Al wat u hoef te doen is om die program uit te voer
python tracker.py
Geluk! jou selfbestuurde rover is gereed! Die navigasie -gedeelte op basis van die ultrasoniese sensor sal binnekort voltooi word, en ek sal hierdie instruksies opdateer.
Dankie vir die lees!
Aanbeveel:
Verander jou Roomba in 'n Mars Rover: 5 stappe
Omskep jou Roomba in 'n Mars Rover:
Mars Rover met Raspberry Pi: 5 stappe
Mars Rover met behulp van Raspberry Pi: Beste almal, ek is altyd nuuskierig om te weet oor Mars Rover, met 6 wiele wat die hele oppervlak van Mars kan verken en dinge van die aarde kan verken. Ek wil ook iets verken deur op my skootrekenaar te sit. So ek dink dit is die regte tyd om dit te maak en
Hondebot: Lego Robot Rover met webkamera: 17 stappe (met foto's)
Dog Bot: Lego Robot Rover Met Webcam: Hier is hoe u 'n Lego -robot kan maak wat u vanaf enige skerm via wifi kan beheer. Dit het ook 'n webcam, sodat u kan sien waarheen u op pad is, en LED -ligte vir u oë! Dit is 'n wonderlike projek om saam met u kinders te doen, aangesien hulle die logo kan bou en u kan betrokke raak by
IRobot Create-Mars Expedition Rover Mark I: 4 stappe
IRobot Create-Mars Expedition Rover Mark I: Hierdie instruksies sal u leer hoe om die iRobot Create op te stel deur MatLab-kodering te gebruik. Jou robot het die vermoë om na minerale te soek deur vorms te onderskei, ruwe terrein te bestuur deur die gebruik van kranssensors en het die vermoë
Wi-fi-beheerde FPV Rover Robot (met Arduino, ESP8266 en Stepper Motors): 11 stappe (met foto's)
Wi-fi-beheerde FPV Rover Robot (met Arduino, ESP8266 en Stepper Motors): Hierdie instruksies wys hoe u 'n afstandbeheerde tweewielige robotrover oor 'n wi-fi-netwerk kan ontwerp met 'n Arduino Uno gekoppel aan 'n ESP8266 Wi-fi-module en twee stepper motors. Die robot kan beheer word vanaf 'n gewone internetblaai