Satura rādītājs:
- 1. darbība. Ievads
- 2. darbība. Nepieciešamie materiāli un programmatūra
- 3. darbība: Rover šasijas izveide
- 4. solis: izveidojiet ultraskaņas attāluma meklētāju
- 5. darbība: shēmas un elektriskie savienojumi
- 6. darbība: SSH un atvērtā CV instalēšana
- 7. darbība: Rover Python koda palaišana
Video: Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu: 7 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:53
Darbojas ar Raspberry Pi 3, Open CV objektu atpazīšanu, ultraskaņas sensoriem un reduktoriem līdzstrāvas motoriem. Šis roveris var izsekot jebkuram objektam, kuram tas ir apmācīts, un pārvietoties pa jebkuru reljefu.
1. darbība. Ievads
Šajā instrukcijā mēs izveidosim autonomu Mars Rover, kas var atpazīt objektus un tos izsekot, izmantojot programmatūru Open CV, kas darbojas Raspberry Pi 3, ar iespēju izmantot tīmekļa kameras ierīci vai oriģinālo aveņu pi kameru. Tas ir aprīkots arī ar ultraskaņas sensoru, kas uzstādīts uz servo, lai izsekotu ceļu tumšā vidē, kur kamera nedarbotos. Signāli, kas saņemti no Pi, tiek nosūtīti motora vadītājam IC (L293D), kas vada 4 x 150 apgr./min līdzstrāvas motorus, kas uzstādīti uz korpusa, kas būvēts ar PVC caurulēm.
2. darbība. Nepieciešamie materiāli un programmatūra
Nepieciešamie materiāli
- Raspberry Pi (jebkurš, izņemot nulli)
- Aveņu PI kamera vai tīmekļa kamera
- L293D motora vadītāja IC
- Robota riteņi (7x4cm) X 4
- Pārnesumkārbas līdzstrāvas motori (150 apgriezieni minūtē) X 4
- PVC caurules šasijām
Nepieciešama programmatūra
- Tepe SSH ing the Pi
- Atveriet CV objektu atpazīšanai
3. darbība: Rover šasijas izveide
Lai izveidotu šo PVC šasiju, jums būs nepieciešams
- 2 X 8"
- 2 X 4"
- 4 T-locītavas
Sakārtojiet PVC caurules kāpnēm līdzīgā konstrukcijā un ievietojiet T veida savienojumos. Jūs varat izmantot PVC hermētiķi, lai padarītu savienojumus vēl stiprākus.
Pārnesumkārbas līdzstrāvas motori ir savienoti ar PVC cauruļu šasiju, izmantojot skavas, un pēc tam riteņi tiek savienoti ar motoriem, izmantojot skrūves.
4. solis: izveidojiet ultraskaņas attāluma meklētāju
Ultraskaņas diapazona meklētāja komplekts ir veidots, izmantojot ultraskaņas sensoru HC-SR04, kas savienots ar Micro Servo motoru. Kabeļi ir iepriekš savienoti ar ultraskaņas sensoru pirms ievietošanas plastmasas korpusā, kas ar skrūvēm ir savienots ar servomotoru.
5. darbība: shēmas un elektriskie savienojumi
Lūdzu, veiciet elektriskos savienojumus saskaņā ar pievienoto shēmu.
6. darbība: SSH un atvērtā CV instalēšana
Tagad mums ir jāieslēdz SSH mūsu aveņu pi, lai instalētu nepieciešamo programmatūru. Mēs sāksim ar SSHing mūsu Raspberry Pi. Pārliecinieties, vai jūsu Pi ir savienots ar to pašu maršrutētāju kā jūsu dators, un vai jūs zināt, ka tā ir IP adrese, ko tam piešķīris maršrutētājs. Tagad, atverot komandu uzvedni vai PUTTY, ja izmantojat Windows, un palaidiet šādu komandu.
Jūsu Pi IP var būt atšķirīgs, mans ir 192.168.1.6.
Tagad ievadiet noklusējuma paroli - "aveņu"
Tagad, kad jūsu Pi ir SSH'd, sāksim ar atjaunināšanu ar šo komandu.
sudo apt-get update && sudo apt-get upgrade
Instalēsim nepieciešamos izstrādātāja rīkus tūlīt, sudo apt-get install build-essential cmake pkg-config
Tālāk mums jāinstalē dažas attēlu I/O pakotnes, kas palīdzēs mūsu Pi izgūt dažādus attēla formātus no diska.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Tagad dažas paketes video iegūšanai, tiešraidei un OpenCV veiktspējas optimizēšanai
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
Mums ir jāinstalē arī Python 2.7 un Python 3 galvenes faili, lai mēs varētu apkopot OpenCV ar python saistībām
sudo apt-get install python2.7-dev python3-dev
OpenCV avota koda lejupielāde
cd ~
wget -O opencv.zip
unzip opencv.zip
Lejupielādē opencv_contrib repozitoriju
wget -O opencv_contrib.zip
unzip opencv_contrib.zip
OpenCV instalēšanai ieteicams izmantot arī virtuālo vidi.
sudo pip instalēt virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Tagad, kad ir instalēts virtualenv un virtualenvwrapper, mums ir jāatjaunina mūsu profils ~/., Lai apakšā iekļautu šādas rindas
eksportēt WORKON_HOME = $ HOME/.virtualenvs eksportēt VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
Izveidojiet savu python virtuālo vidi
mkvirtualenv cv -p python2
pārslēgties uz izveidoto virtuālo vidi
avots ~/.profils
workon cv
NumPy instalēšana
pip instalēt numpy
Apkopojiet un instalējiet OpenCV
cd ~/opencv-3.3.0/
mkdir uzbūve
cd būve
cmake -D CMAKE_BUILD_TYPE = ATLAIST / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_cribrib -3.3.0/modules..
Visbeidzot apkopojiet OpenCV
padarīt -j4
Pēc šīs komandas darbības pabeigšanas. Viss, kas jums jādara, ir to instalēt.
sudo veikt konfigurāciju
sudo ldconfig
7. darbība: Rover Python koda palaišana
Izveidojiet Python failu ar nosaukumu tracker.py un pievienojiet tam šādu kodu.
sudo nano tracker.py
kods:-
#ASAR programma
#Šī programma izseko sarkano bumbiņu un uzdod aveņu pi tam sekot. importēt sys sys.path.append ('/usr/local/lib/python2.7/site-paketes') importēt cv2 importēt numpy kā np importēt os importēt RPi. GPIO kā 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)#Kreisais motors atpakaļ IO. Izeja (22, 1) IO. Izeja (13, 0)#Pareizā motora atpakaļgaitas izeja (15, 1) def ryt (): IO. #Kreisais motors atpakaļ IO. Izeja (22, 1) IO. Izeja (13, 1)#Labā motora virzība uz priekšu IO. Izeja (15, 0) def lft (): IO. Izeja (21, 1)#Kreisā motora virzība uz priekšu IO. izeja (22, 0) IO. izeja (13, 0)#Pareizā motora atpakaļgaitas IO. izeja (15, 1) def stp (): IO. izeja (21, 0)#Kreisā motora apstāšanās IO. izeja (22, 0) IO. Izvade (13, 0)#Pareiza motora apstāšanās IO. Izeja (15, 0) ################### ################################################# #################### def main (): capWebcam = cv2. VideoCapture (0)#deklarēt a VideoCapture objekts un saistīts ar tīmekļa kameru, 0 => izmantot 1. tīmekļa kameru # rādīt oriģinālo izšķirtspēju drukāt "noklusējuma izšķirtspēja =" + 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) # mainīt izšķirtspēju uz 320x240, lai ātrāk apstrādātu capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # rādīt atjauninātu izšķirtspēju drukāt "atjaunināta izšķirtspēja =" + str (capWebcam.get (cv2. CAP_PROP_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), ja capWebcam.isOpened () == Nepareizi: # pārbaudiet, vai VideoCapture objekts ir saistīts ar tīmekļa kameru, lai izdrukātu "kļūda: capWebcam nav veiksmīgi piekļuvis / n / n" # ja nē, izdrukājiet kļūdas ziņojumu, lai std out os.system ("pauze") # pauze, līdz lietotājs nospiež taustiņu, lai lietotājs varētu redzēt kļūdas ziņojumu return # un iziešanas funkciju (kas iziet no programmas) # beidzas, ja, kamēr cv2.waitKey (1)! = 27 un capWebcam.isOpened (): # līdz tiek nospiests taustiņš Esc vai tiek zaudēts savienojums ar tīmekļa kameru blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lasīt nākamo kadru, ja ne blnFrameReadSuccessfully vai imgOriginal ir None: # ja rāmis netika sekmīgi lasīts drukāt "error: frame not read from webcam / n" # drukas kļūdas ziņojums std out os.system ("pauze") # pauze, līdz lietotājs nospiež taustiņu, lai lietotājs varētu redzēt kļūdas ziņojumu break # exit, kamēr cilpa (kas iziet no programmas) # end, ja 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. masīvs ([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 apļi = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # aizpildiet mainīgos apļus ar visiem aplīšiem apstrādātajā attēlā, ja apļi nav Nav: # šī rinda ir nepieciešama, lai programma netiktu avarējusi nākamajā rindā, ja apļi netika atrasti izlauzties x, y un rādiusa druka "lodītes stāvoklis x =" + str (x) + ", y =" + str (y) + ", rādiuss =" + str (rādiuss) # drukas lodītes stāvoklis un rādiuss obRadius = int (rādiuss) xAxis = int (x), ja obRadius> 0 & obRadius100 & xAxis180: print ("Kustoties pa labi") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.aplis (imgOriginal, (x, y), 3, (0, 255, 0), -1) # uzzīmējiet nelielu zaļu apli atklātā objekta cv2.circle centrā (imgOriginal, (x, y), rādiuss, (0, 0, 255), 3) # uzzīmējiet sarkanu apli ap konstatēto objektu # beigas # beigām, ja citādi: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # izveidot logus, izmantojiet WINDOW_AUTOSIZE fiksēta loga izmēram cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # vai izmantojiet WINDOW_NORMAL, lai atļautu loga lieluma maiņu cv2.imshow ("imgOriginal", imgOri ginal)#rādīt logus cv2.imshow ("imgThresh", imgThresh)#beigas, kamēr cv2.destroyAllWindows ()#noņemt logus no atmiņas atgriešanās ##################### ################################################# ############################# ja _name_ == "_main_": main ()
Tagad atliek tikai palaist programmu
python tracker.py
Apsveicu! jūsu pašbraucošais roveris ir gatavs! Drīz tiks pabeigta uz ultraskaņas sensoriem balstītā navigācijas daļa, un es atjaunināšu šo pamācību.
Paldies, ka izlasījāt!
Ieteicams:
Motora pārvietošana ar acu izsekošanu: 8 soļi
Kustīgais motors ar acu izsekošanu: Pašlaik acu izsekošanas sensori ir biežāk sastopami dažādās jomās, bet komerciāli tie ir vairāk pazīstami ar interaktīvām spēlēm. Šī apmācība neizliekas par sensoru izstrādi, jo tā ir ļoti sarežģīta un arvien biežāk izmanto
Palieliniet klīrensu starp vara plakni un signāla izsekošanu: 3 soļi
Palieliniet klīrensu starp vara plakni un signāla izsekošanu: Esmu hobijs un projektēju iespiedshēmas plates (PCB) saviem emuāriem un Youtube videoklipiem. Es pasūtīju savu PCB tiešsaistē no LionCircuits. Tas ir Indijas uzņēmums, un viņiem ir automatizēta platforma ražošanai. Tas automātiski pārskata jūsu Ger
Viedā mugursoma ar GPS izsekošanu un automātiskām gaismām: 15 soļi
Viedā mugursoma ar GPS izsekošanu un automātiskajām gaismām: šajā pamācībā mēs izgatavosim gudru mugursomu, kas var izsekot mūsu atrašanās vietai, ātrumam un tai ir automātiskas gaismas, kas var mūs pasargāt naktī. Es izmantoju 2 sensorus, lai noteiktu, vai tas ir uz jūsu pleciem, lai pārliecinātos, ka tas nenodziest, kad tas nav jādara
Sieviešu drošības ierīce ar GPS izsekošanu un brīdinājumiem, izmantojot Arduino: 6 soļi
Sieviešu drošības ierīce ar GPS izsekošanu un brīdinājumiem, izmantojot Arduino: Izmantojot visas pēdējā laikā pieejamās tehnoloģijas, nav grūti izveidot drošības ierīci sievietēm, kas ne tikai radīs avārijas trauksmi, bet arī nosūtīs ziņu draugiem, ģimenei vai attiecīgā persona. Šeit mēs izveidosim grupu
Ubagošanas robots ar sejas izsekošanu un kontroli, ko veic Xbox kontrolieris - Arduino: 9 soļi (ar attēliem)
Ubagošanas robots ar sejas izsekošanu un kontroli, ko veic Xbox kontrolieris - Arduino: Mēs izgatavosim ubagošanas robotu. Šis robots mēģinās kairināt vai piesaistīt garāmbraucošos cilvēkus. Tas atklās viņu sejas un mēģinās šaut uz tām lāzerus. Ja iedosit robotam monētu, viņš dziedās dziesmu un dejos. Robotam būs nepieciešams