Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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!