Kazalo:
- 1. korak: Uvod
- 2. korak: Potrebni materiali in programska oprema
- 3. korak: Izdelava podvozja Roverja
- 4. korak: Zgradite ultrazvočni daljinomer
- 5. korak: Sheme in električne povezave
- 6. korak: Namestitev SSH in odprtega življenjepisa
- 7. korak: Zaženite kodo Python za Rover
Video: Raspberry Pi - avtonomni Mars Rover s sledenjem objektom OpenCV: 7 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
Poganjajo ga Raspberry Pi 3, odprto prepoznavanje objektov CV, ultrazvočni senzorji in motorji z enosmernim tokom. Ta rover lahko sledi vsakemu objektu, za katerega je usposobljen, in se premika po katerem koli terenu.
1. korak: Uvod
V tem navodilu bomo izdelali avtonomni Mars Rover, ki bo lahko prepoznal predmete in jim sledil s programsko opremo Open CV, ki se izvaja na Raspberry Pi 3 z možnostjo uporabe spletne kamere ali originalne kamere maline pi. Opremljen je tudi z ultrazvočnim senzorjem, nameščenim na servo, da sledi poti v temnih okoljih, kjer kamera ne bi delovala. Signali, prejeti od Pi, se pošljejo v gonilnik motorja IC (L293D), ki poganja 4 x 150 vrtljajev DC motorjev, nameščenih na ohišju, izdelanem iz PVC cevi.
2. korak: Potrebni materiali in programska oprema
Potrebni materiali
- Raspberry Pi (vse razen nič)
- Raspberry PI kamera ali spletna kamera
- IC gonilnika motorja L293D
- Robotska kolesa (7x4 cm) X 4
- Motorji z enosmernim tokom (150 vrt / min) X 4
- PVC cevi za podvozje
Potrebna programska oprema
- Kiti za SSH ing Pi
- Odprite življenjepis za prepoznavanje predmetov
3. korak: Izdelava podvozja Roverja
Za izdelavo tega PVC ohišja boste potrebovali
- 2 x 8"
- 2 x 4"
- 4 T-spoji
PVC cevi razporedite v lestvesto strukturo in jih vstavite v T-spoje. Za povečanje trdnosti spojev lahko uporabite PVC tesnilo.
Motorji z enosmernim tokom so povezani z ohišjem PVC cevi s sponkami, nato pa so kolesa z motorji povezana z vijaki.
4. korak: Zgradite ultrazvočni daljinomer
Sklop ultrazvočnega daljinomera je izdelan z ultrazvočnim senzorjem HC-SR04, povezanim z motorjem Micro Servo. Kable predhodno povežemo z ultrazvočnim senzorjem, preden jih vstavimo v plastično ohišje, ki je z vijaki povezano s servo motorjem.
5. korak: Sheme in električne povezave
Električne priključke izvedite v skladu s priloženo shemo vezja.
6. korak: Namestitev SSH in odprtega življenjepisa
Zdaj moramo SSH vstaviti v naš malinov pi, da namestimo potrebno programsko opremo. Začeli bomo s SSHingom do našega Raspberry Pi. Prepričajte se, da je vaš Pi povezan z istim usmerjevalnikom kot vaš računalnik in da veste, da je naslov IP, ki mu ga dodeli usmerjevalnik. Zdaj odprite ukazni poziv ali PUTTY, če uporabljate Windows, in zaženite naslednji ukaz.
IP vašega Pi je lahko drugačen, moj je 192.168.1.6.
Zdaj vnesite privzeto geslo - "malina"
Zdaj, ko imate v svojem Pi -ju SSH'd, začnimo s posodobitvijo s tem ukazom.
sudo apt-get update && sudo apt-get upgrade
Namestimo zdaj potrebna orodja za razvijalce, sudo apt-get install build-bistvena cmake pkg-config
Nato moramo namestiti nekaj slikovnih V/I paketov, ki bodo našemu Pi pomagali pri pridobivanju različnih formatov slik z diska.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Zdaj nekaj paketov za pridobivanje videa, pretakanje v živo in optimizacijo delovanja 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
Prav tako moramo namestiti datoteke z glavo Python 2.7 in Python 3, da lahko sestavimo OpenCV z vezmi python
sudo apt-get install python2.7-dev python3-dev
Prenos izvorne kode OpenCV
cd ~
wget -O opencv.zip
razpakiraj opencv.zip
Prenos skladišča opencv_contrib
wget -O opencv_contrib.zip
razpakirajte opencv_contrib.zip
Priporočljivo je tudi, da za namestitev OpenCV uporabite virtualno okolje.
sudo pip namestite virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Zdaj, ko sta nameščena virtualenv in virtualenvwrapper, moramo posodobiti naš ~/.profile tako, da bo na dnu vključil naslednje vrstice
izvozi WORKON_HOME = $ HOME/.virtualenvs izvozi VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 vir /usr/local/bin/virtualenvwrapper.sh
Ustvarite svoje virtualno okolje python
mkvirtualenv cv -p python2
preklopite na ustvarjeno virtualno okolje
source ~/.profile
workon cv
Namestitev programa NumPy
pip install numpy
Prevedite in namestite OpenCV
cd ~/opencv-3.3.0/
mkdir build
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/BPL
Končno prevedite OpenCV
naredi -j4
Ko se ta ukaz konča z izvajanjem. Vse kar morate storiti je, da ga namestite.
sudo naredi konfiguracijo
sudo ldconfig
7. korak: Zaženite kodo Python za Rover
Ustvarite datoteko Python, imenovano tracker.py, in ji dodajte naslednjo kodo.
sudo nano tracker.py
Koda:-
#ASAR Program
#Ta program sledi rdeči kroglici in naroči malinemu pi, naj ji sledi. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') uvoz cv2 uvoz numpy kot np uvoz os uvoz RPi. GPIO kot 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)#IO. LO motor naprej (22, 0) IO.output (13, 1)#IO. Inter. Interput (15, 0) def bac (): IO.output (21, 0) #Ile.motor IO. Izhod (22, 1) IO. Izhod (13, 0)#IO. Izhodni vhod IO. Desno (15, 1) def ryt (): IO.output (21, 0) #IO. Izhod levo nazaj (22, 1) IO.izhod (13, 1)#IO izhod desnega motorja naprej (15, 0) def lft (): IO.izhod (21, 1) #LO.output (22, 0) IO.output (13, 0) #Right Motor IO.out output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right stop motorja IO.output (15, 0) ######################### ################################################# ###################### def main (): capWebcam = cv2. VideoCapture (0)#razglasi Objekt VideoCapture in ga povežite s spletno kamero, 0 => uporabite prvo spletno kamero # pokaži izvirno ločljivost natisni "privzeta ločljivost =" + 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) # spremenite ločljivost na 320 x 240 za hitrejšo obdelavo) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), če je capWebcam.isOpened () == False: # preverite, ali je bil objekt VideoCapture povezan s spletno kamero, je uspešno natisnjena "napaka: capWebcam ni dostopen / n / n" # če ne, natisnite sporočilo o napaki, da std out os.system ("premor") # premor, dokler uporabnik ne pritisne tipke, tako da lahko uporabnik vidi sporočilo o napaki return # in izhod iz funkcije (ki zapre program) # end if while cv2.waitKey (1)! = 27 in capWebcam.isOpened (): # dokler ne pritisnete tipke Esc ali prekinete povezavo s kamero blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # preberi naslednji okvir, če ne blnFrameReadSuccessfully ali imgOriginal je Brez: # če okvir ni bil uspešno prebran print "error: frame not read from webcam / n" # message error error to std out os.system ("premor") # premor, dokler uporabnik ne pritisne tipke, tako da lahko uporabnik vidi sporočilo o napaki prekinitev # exit medtem ko zanka (ki zapre program) # end, če je imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.ray ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. matrika ([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 krogi = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # zapolni spremenljive kroge z vsemi krogi na obdelani sliki, če krogi ni nič: # ta vrstica je potrebna, da se program ne zruši v naslednji vrstici, če ni bilo najdenih krogov IO.output (7, 1) za krog v krogih [0]: # za vsak krog x, y, polmer = krog # izbiti x, y in polmer natisni "položaj krogle x =" + str (x) + ", y =" + str (y) + ", polmer =" + str (polmer) # položaj krogle za tiskanje in polmer obRadius = int (polmer) xAxis = int (x), če je obRadius> 0 & obRadius100 & xAxis180: print ("Premikanje desno") ryt () elif xAxis <100: print ("Premikanje levo") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # narišite majhen zeleni krog v središče zaznanega predmeta cv2.circle (imgOriginal, (x, y), polmer, (0, 0, 255), 3) # narišite rdeč krog okoli zaznanega predmeta # konec za # konec, če drugače: IO.output (7, 0) cv2. namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # ustvari okna, uporabite WINDOW_AUTOSIZE za fiksno velikost okna cv2. namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # ali uporabite WINDOW_NORMAL, da omogočite spreminjanje velikosti okna cv2.imshow ("imgOriginal", imgOri ginal)#pokaži okna cv2.imshow ("imgThresh", imgThresh)#konec, medtem ko cv2.destroyAllWindows ()#odstrani okna iz pomnilnika return #################### ################################################# ############################ if _name_ == "_main_": main ()
Zdaj je ostalo le še zagnati program
python tracker.py
Čestitke! vaš samovozeči rover je pripravljen! Navigacijski del na osnovi ultrazvočnega senzorja bo kmalu dokončan in to navodilo bom posodobil.
Hvala za branje!
Priporočena:
Premikajoči se motor s sledenjem oči: 8 korakov
Premikanje motorja s sledenjem očesom: Trenutno so senzorji za sledenje očesu pogostejši na različnih področjih, komercialno pa so bolj znani po interaktivnih igrah. Ta vadnica se ne pretvarja, da bi izdelala senzorje, saj je zelo zapletena in zaradi vse pogostejše uporabe
Pametni nahrbtnik s sledenjem GPS in samodejnimi lučmi: 15 korakov
Pametni nahrbtnik s sledenjem GPS in samodejnimi lučmi: V tem navodilu bomo izdelali pameten nahrbtnik, ki lahko spremlja naš položaj, hitrost in ima avtomatizirane luči, ki nas lahko varujejo ponoči. Uporabljam 2 senzorja, da zaznam, če je na tvojih ramenih, in se prepričam, da se ne ugasne, ko ni treba,
Sledenje objektom Opencv: 3 koraki
Sledenje objektom Opencv: Odkrivanje premikajočih se predmetov je tehnika, ki se uporablja pri računalniškem vidu in obdelavi slik. Več zaporednih sličic iz videoposnetka se z različnimi metodami primerja, da se ugotovi, ali je zaznan premikajoč se predmet
Drsnik kamere za sledenje objektom z rotacijsko osjo. 3D natisnjeno in vgrajeno v krmilnik DC motorja RoboClaw & Arduino: 5 korakov (s slikami)
Drsnik kamere za sledenje objektom z rotacijsko osjo. 3D natisnjeno in izdelano na krmilniku RoboClaw DC Motor & Arduino: Ta projekt je bil eden mojih najljubših projektov, odkar sem združil zanimanje za snemanje videa z DIY. Vedno sem gledal in želel posnemati tiste kinematografske posnetke v filmih, kjer se kamera premika po zaslonu, medtem ko se premika, da sledi
Robot za prosjačenje s sledenjem obraza in nadzorom s krmilnikom Xbox - Arduino: 9 korakov (s slikami)
Robot za prosjačenje s sledenjem obraza in nadzorom s strani Xbox Controller - Arduino: Naredili bomo robot za beračenje. Ta robot bo poskušal dražiti ali pritegniti pozornost mimoidočih ljudi. Zaznal bo njihove obraze in jih poskušal ustreliti z laserji. Če robotu podarite kovanec, bo zapel pesem in plesal. Robot bo potreboval