Sisukord:
- Samm 1: Sissejuhatus
- 2. samm: vajalikud materjalid ja tarkvara
- Samm: ehitage Roveri šassii
- 4. samm: ehitage ultraheli kaugusmõõtja koost
- Samm: skeemid ja elektriühendused
- 6. samm: SSH ja avatud CV installimine
- Samm: käivitage Roveri jaoks Pythoni kood
Video: Raspberry Pi - autonoomne Mars Rover koos OpenCV objektide jälgimisega: 7 sammu (koos piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Toiteallikaks on Raspberry Pi 3, avatud CV objektide tuvastamine, ultraheli andurid ja käigukastiga alalisvoolumootorid. See rover saab jälgida mis tahes objekti, mille jaoks ta on koolitatud, ja liikuda igal maastikul.
Samm 1: Sissejuhatus
Selles juhendis ehitame autonoomse Mars Roveri, mis tuvastab objekte ja jälgib neid, kasutades Raspberry Pi 3 -l töötavat Open CV tarkvara koos võimalusega kasutada veebikaamera seadet või originaalset vaarika pi kaamerat. See on varustatud ka servole paigaldatud ultrahelianduriga, mis jälgib teed pimedas keskkonnas, kus kaamera ei tööta. Pi -lt saadud signaalid saadetakse mootori juhi IC -le (L293D), mis juhib 4 x 150 p / min alalisvoolumootorit, mis on paigaldatud PVC -torudega ehitatud korpusele.
2. samm: vajalikud materjalid ja tarkvara
Vajalikud materjalid
- Vaarika Pi (kõik, kuid null)
- Vaarika PI -kaamera või veebikaamera
- L293D mootorijuhi IC
- Robotrattad (7x4cm) X 4
- Hammasülekandega alalisvoolumootorid (150 p / min) X 4
- PVC torud šassiile
Vajalik tarkvara
- Kitt SS -i jaoks
- Avage CV objektide tuvastamiseks
Samm: ehitage Roveri šassii
Selle PVC šassii ehitamiseks vajate
- 2 X 8"
- 2 X 4"
- 4 T-liigest
Asetage PVC-torud redelitaolises konstruktsioonis ja sisestage T-liigestesse. Liigendite tugevamaks muutmiseks võite kasutada PVC hermeetikut.
Hammasülekandega alalisvoolumootorid ühendatakse klambrite abil PVC toru šassiiga ja seejärel rattad kruvidega mootoritega.
4. samm: ehitage ultraheli kaugusmõõtja koost
Ultraheli kaugusmõõtja koost on ehitatud Micro Servo mootoriga ühendatud ultraheli anduri HC-SR04 abil. Kaablid on eelnevalt ühendatud ultrahelianduriga, enne kui need pannakse plastkorpusesse, mis on kruvide abil servomootoriga ühendatud.
Samm: skeemid ja elektriühendused
Palun tehke elektriühendused vastavalt lisatud skeemile.
6. samm: SSH ja avatud CV installimine
Nüüd peame vajaliku tarkvara installimiseks oma vaarika pi sisse SSH -ga ühendama. Alustame SSHingist meie Raspberry Pi -le. Veenduge, et teie Pi on ühendatud sama ruuteriga nagu teie arvuti ja teate, et see on ruuteri poolt määratud IP -aadress. Nüüd avage käsuviip või PUTTY, kui olete Windowsis, ja käivitage järgmine käsk.
Teie Pi IP võib olla erinev, minu oma on 192.168.1.6.
Nüüd sisestage oma vaikeparool - "vaarikas"
Nüüd, kui teil on oma Pi -s SSH, alustame selle käsuga värskendamisega.
sudo apt-get update && sudo apt-get upgrade
Paigaldame kohe vajalikud arendustööriistad, sudo apt-get install build-essential cmake pkg-config
Järgmisena peame installima mõned kujutise I/O paketid, mis aitavad meie Pi -l kettale tuua erinevaid pildivorminguid.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Nüüd mõned paketid video hankimiseks, otseülekandeks ja OpenCV jõudluse optimeerimiseks
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
Peame installima ka päisefailid Python 2.7 ja Python 3, et saaksime koostada OpenCV koos Pythoni sidumistega
sudo apt-get install python2.7-dev python3-dev
OpenCV lähtekoodi allalaadimine
cd ~
wget -O opencv.zip
pakkige lahti opencv.zip
Opencv_contrib hoidla allalaadimine
wget -O opencv_contrib.zip
pakkige lahti opencv_contrib.zip
Samuti on OpenCV installimiseks soovitatav kasutada virtuaalset keskkonda.
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Nüüd, kui virtualenv ja virtualenvwrapper on installitud, peame värskendama oma ~/.profiili, et see sisaldaks alljärgnevaid ridu
eksport WORKON_HOME = $ HOME/.virtualenvs eksport VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
Looge oma python virtuaalne keskkond
mkvirtualenv cv -p python2
lülituda loodud virtuaalsele keskkonnale
allikas ~/.profiil
töö cv
NumPy installimine
pip install numpy
Kompileerige ja installige OpenCV
cd ~/opencv-3.3.0/
mkdir ehitada
cd ehitada
cmake -D CMAKE_BUILD_TYPE = VABASTUS
Lõpuks kompileerige OpenCV
teha -j4
Pärast selle käsu käivitamist. Kõik, mida pead tegema, on see installida.
sudo teha config
sudo ldconfig
Samm: käivitage Roveri jaoks Pythoni kood
Looge Pythoni fail nimega tracker.py ja lisage sellele järgmine kood.
sudo nano tracker.py
kood:-
#ASAR programm
#See programm jälgib punast palli ja käsib vaarika piil seda järgida. import sys sys.path.append ('/usr/local/lib/python2.7/site-package') import cv2 import numpy np import os import RPi. GPIO kui 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. väljund (21, 1)#Vasak mootor edasi (21, 0)#Vasak mootor tagurpidi IO väljund (22, 1) IO väljund (13, 0)#parema mootori tagumine IO väljund (15, 1) def ryt (): IO väljund (21, 0) #Vasakmootor tagasi IO. Väljund (22, 1) IO. Väljund (13, 1)#Paremmootor edasi IO. Väljund (15, 0) def lft (): IO. Väljund (21, 1)#Vasak mootor edasi IO.väljund (22, 0) IO.väljund (13, 0)#Paremmootori tagurpidi IO.väljund (15, 1) def stp (): IO.väljund (21, 0)#Vasakpoolne mootori seiskamine IO.väljund (22, 0) IO. Väljund (13, 0)#Mootori parem seiskamine IO. Väljund (15, 0) ################## ########################################### #################### def main (): capWebcam = cv2. VideoCapture (0)#deklareeri a VideoCapture objekt ja veebikaameraga seostamine, 0 => kasuta esimest veebikaamerat # näita algse eraldusvõimega printimist "vaikeresolutsioon =" + 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) # muutke eraldusvõime 320x240 kiiremaks töötlemiseks capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # näita värskendatud eraldusvõimega print "uuendatud resolutsioon =" + str (capWebcam.get (cv2. CAP_PRW_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), kui capWebcam.isOpened () == Vale: # kontrollige, kas VideoCapture'i objekt on veebikaameraga edukalt trükitud "error: capWebcam ei õnnestunud / n / n" # kui ei, printige veateade std out os.system ("paus") # paus, kuni kasutaja vajutab klahvi, et kasutaja saaks näha veateate return # ja väljumisfunktsiooni (mis väljub programmist) # lõpp, kui cv2.waitKey (1)! = 27 ja capWebcam.isOpened (): # kuni Esc klahvi vajutatakse või veebikaamera ühendus katkeb blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # loe järgmist kaadrit, kui mitte blnFrameReadSuccessly or imgOriginal is None: # kui kaadrit ei õnnestunud lugeda, prinditakse "tõrge: raami ei loeta veebikaamerast / n" # prindi veateade std out os.system ("paus") # paus, kuni kasutaja vajutab klahvi, et kasutaja saaks näha veateadet break # exit, kui tsükkel (mis väljub programmist) # end, kui 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. massiiv ([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 rings = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # täitke muutuvad ringid kõigi ringidega töödeldud pildil, kui ringid ei ole Puudub: # see rida on vajalik, et programm ei jookseks kokku järgmisel real, kui ringid ei leitud murda välja x, y ja raadius printida "palli asend x =" + str (x) + ", y =" + str (y) + ", raadius =" + str (raadius) # prindipalli asukoht ja raadius obRadius = int (raadius) xAxis = int (x) kui obRadius> 0 & obRadius100 & xAxis180: print ("Liigub paremale") ryt () elif xAxis <100: print ("Liigub vasakule") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # joonista väike roheline ring tuvastatud objekti cv2.circle keskele (imgOriginal, (x, y), radius, (0, 0, 255), 3) # joonista tuvastatud objekti ümber punane ring # lõpp # otsa jaoks, kui muidu: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # loo aknad, kasutage WINDOW_AUTOSIZE fikseeritud akna suuruse jaoks cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # või kasutage nuppu WINDOW_NORMAL, et lubada akna suuruse muutmine cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#eemalda aknad mälust tagastamine ##################### ########################################### ############################# kui _name_ == "_main_": main ()
Nüüd jääb üle ainult programm käivitada
python tracker.py
Palju õnne! teie isesõitev rover on valmis! Ultraheli anduritel põhinev navigeerimisosa valmib peagi ja uuendan seda juhendit.
Täname lugemise eest!
Soovitan:
Mootori liigutamine silmade jälgimisega: 8 sammu
Mootori liigutamine silmade jälgimisega: praegu on silma jälgimise andurid erinevates piirkondades tavalisemad, kuid kaubanduslikult on need rohkem tuntud interaktiivsete mängude poolest. See õpetus ei pretendeeri andurite väljatöötamisele, kuna see on väga keeruline ja selle üha tavalisema kasutamise tõttu
IoT ilmajaam koos lenduvate orgaaniliste ühendite jälgimisega: 6 sammu
IoT ilmajaam koos lenduvate orgaaniliste ühendite jälgimisega: selles juhendis näitan, kuidas ehitada asjade Interneti (IoT) ilmajaam koos lenduvate orgaaniliste ühendite (VOC) jälgimisega. Selle projekti jaoks töötasin välja DIY (tee ise) komplekti. Riistvara ja tarkvara on avatud lähtekoodiga
Opencv objektide jälgimine: 3 sammu
Opencv objektide jälgimine: liikuvate objektide tuvastamine on tehnika, mida kasutatakse arvuti nägemises ja pilditöötluses. Videost võrreldakse mitut järjestikust kaadrit erinevate meetoditega, et teha kindlaks, kas tuvastatakse liikuvaid objekte. Liikuvate objektide tuvastamist on kasutatud
Ukse ja ukse jälgimisega ühendatud automaatsed tuled: 5 sammu
Ukse ja ukse jälgimisega ühendatud automaatsed tuled: tundub, et pimedas on lülitusplaati väga raske leida, kuid see projekt on selle probleemi lahendamiseks tõesti kasulik. Selle lahenduse leidmiseks järgige alltoodud samme
Parandage katkine lülitusplaat nutikaks puutetundlikuks lülitiks koos temperatuuri jälgimisega: 4 sammu
Parandage katkine lülitusplaat nutikaks puutetundlikuks lülitiks koos temperatuuri jälgimisega: ma tean, et teil kõigil on selle probleemiga silmitsi vähemalt üks kord, kui lülitusplaat purunes pideva kasutamise tõttu. Enamik mehaanilist lülitit puruneb selle sisse- ja väljalülitamise tõttu palju aega kas lüliti sees olev vedru nihkub või m