Mündəricat:

Raspberry Pi - OpenCV Obyekt İzləmə ilə Avtonom Mars Rover: 7 Addım (Şəkillərlə)
Raspberry Pi - OpenCV Obyekt İzləmə ilə Avtonom Mars Rover: 7 Addım (Şəkillərlə)

Video: Raspberry Pi - OpenCV Obyekt İzləmə ilə Avtonom Mars Rover: 7 Addım (Şəkillərlə)

Video: Raspberry Pi - OpenCV Obyekt İzləmə ilə Avtonom Mars Rover: 7 Addım (Şəkillərlə)
Video: Lesson 5: Greyscale Line Tracking with PICAR-X Raspberry Pi Smart Robot car by SunFounder 2024, Noyabr
Anonim
Raspberry Pi - OpenCV Obyekt İzləmə ilə Avtonom Mars Rover
Raspberry Pi - OpenCV Obyekt İzləmə ilə Avtonom Mars Rover

Raspberry Pi 3, Açıq CV obyekt tanıma, Ultrasonik sensorlar və dişli DC mühərrikləri ilə təchiz edilmişdir. Bu rover təlim aldığı hər hansı bir obyekti izləyə və istənilən ərazidə hərəkət edə bilər.

Addım 1: Giriş

Image
Image
Tələb olunan materiallar və proqram təminatı
Tələb olunan materiallar və proqram təminatı

Bu Təlimatlarda, veb kamerası cihazı və ya orijinal moruq pi kamerası istifadə etmək imkanı ilə Raspberry Pi 3 -də işləyən Açıq CV proqramından istifadə edərək obyektləri tanıya bilən və onları izləyə bilən Muxtar Mars Rover quracağıq. Kameranın işləməyəcəyi qaranlıq mühitlərdə yolunu izləmək üçün servoya quraşdırılmış Ultrasonik sensorla da təchiz edilmişdir. Pi -dən alınan siqnallar, PVC borularla qurulmuş bir gövdəyə quraşdırılmış 4 x 150RPM DC mühərrikləri idarə edən IC (L293D) motor sürücüsünə göndərilir.

Addım 2: Lazım olan materiallar və proqram təminatı

Tələb olunan materiallar və proqram təminatı
Tələb olunan materiallar və proqram təminatı
Tələb olunan materiallar və proqram təminatı
Tələb olunan materiallar və proqram təminatı

Tələb olunan materiallar

  1. Raspberry Pi (sıfırdan başqa)
  2. Raspberry PI Kamera və ya veb kamera
  3. L293D motor sürücü IC
  4. Robot Təkərlər (7x4 sm) X 4
  5. Dişli DC Motorlar (150RPM) X 4
  6. Şassi üçün PVC borular

Proqram tələb olunur

  1. SSH üçün Pi macunu
  2. Obyektin tanınması üçün CV -ni açın

Addım 3: Rover Şassisinin qurulması

Rover şassisinin tikintisi
Rover şassisinin tikintisi
Rover şassisinin tikintisi
Rover şassisinin tikintisi
Rover şassisinin tikintisi
Rover şassisinin tikintisi

Bu PVC şassini qurmaq üçün sizə lazım olacaq

  • 2 X 8"
  • 2 X 4"
  • 4 T-birləşmə

PVC boruları nərdivan kimi bir quruluşa yerləşdirin və T-oynaqlarına daxil edin. Derzləri daha da gücləndirmək üçün PVC mastik istifadə edə bilərsiniz.

Dişli DC mühərrikləri sıxaclardan istifadə edərək PVC boru şassisi ilə bağlanır və sonra təkərlər mühərriklərə vintlər ilə bağlanır.

Addım 4: Ultrasonik Rangefinder Assambleyasının qurulması

Ultrasonik Rangefinder Assambleyasının qurulması
Ultrasonik Rangefinder Assambleyasının qurulması

Ultrasonik diapazon tapma qurğusu, mikro Servo mühərriki ilə əlaqəli HC-SR04 Ultrasonik sensoru istifadə edərək qurulmuşdur. Vidalar vasitəsilə servo mühərrikə bağlanan plastik qutuya qoymadan əvvəl kabellər ultrasəs sensoru ilə əvvəlcədən bağlanır.

Addım 5: Şemalar və Elektrik Bağlantıları

Sxemlər və Elektrik Əlaqələri
Sxemlər və Elektrik Əlaqələri
Sxemlər və Elektrik Əlaqələri
Sxemlər və Elektrik Əlaqələri

Zəhmət olmasa elektrik əlaqələrini əlavə edilmiş sxemə uyğun olaraq edin.

Addım 6: SSH və Açıq CV Quraşdırması

SSH və Açıq CV Quraşdırılması
SSH və Açıq CV Quraşdırılması

İndi lazımi proqramı qurmaq üçün moruq pi -yə SSH etməliyik. Raspberry Pi -ə SSHing -dən başlayacağıq. Pi'nizin PC ilə eyni yönləndiriciyə qoşulduğundan və marşrutlaşdırıcınızın ona təyin etdiyi IP ünvanını bildiyinizdən əmin olun. İndi Windows -da bir əmr istəyi və ya PUTTY açın və aşağıdakı əmri işlədin.

ssh [email protected]

Pi'nizin IP ünvanı fərqli ola bilər, mənimki 192.168.1.6.

İndi standart parolunuzu daxil edin - "moruq"

İndi Pi -yə SSH daxil etdiyinizə görə, bu əmrlə yeniləməklə başlayaq.

sudo apt-get update && sudo apt-get upgrade

İndi lazım olan geliştirici vasitələrini quraşdıraq, sudo apt-get install-essential cmake pkg-config qurun

Sonra, Pi -yə diskdən müxtəlif şəkil formatlarını almağa kömək edəcək bir neçə görüntü G/Ç paketini quraşdırmalıyıq.

sudo apt-get libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev quraşdırın

İndi video əldə etmək, canlı yayım və OpenCV performansını optimallaşdırmaq üçün bəzi paketlər

sudo apt-get libavcodec-dev libavformat-dev libswscale-dev libv4l-dev quraşdırın

sudo apt-get libxvidcore-dev libx264-dev qurun

sudo apt-get libgtk2.0-dev libgtk-3-dev qurun

sudo apt-get libatlas-base-dev gfortran quraşdırın

Python cildləri ilə OpenCV -ni tərtib edə biləcəyimiz üçün Python 2.7 və Python 3 başlıq fayllarını da quraşdırmalıyıq.

sudo apt-get install python2.7-dev python3-dev

OpenCV mənbə kodu yüklənir

cd ~

wget -O opencv.zip

opencv.zip açın

Opencv_contrib anbarı endirilir

wget -O opencv_contrib.zip

opencv_contrib.zip açın

OpenCV qurmaq üçün virtual mühitdən istifadə etmək də tövsiyə olunur.

sudo pip virtualenv virtualenvwrapper qurun

sudo rm -rf ~/.cache/pip

İndi bu virtualenv və virtualenvwrapper quraşdırılıbsa, aşağıdakı sətirləri aşağıya daxil etmək üçün ~/.profile faylımızı yeniləməliyik.

ixrac WORKON_HOME = $ HOME/.virtualenvs ixrac VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

Python virtual mühitinizi yaradın

mkvirtualenv cv -p python2

yaradılan virtual mühitə keçin

mənbə ~/.profil

iş cv

NumPy quraşdırılır

pip qurmaq numpy

OpenCV tərtib edin və quraşdırın

cd ~/opencv-3.3.0/

mkdir qurmaq

cd qurmaq

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib --DD_PD_PDF = 3.3.0/

Nəhayət OpenCV tərtib edin

etmək -j4

Bu əmr işlədildikdən sonra. Etməyiniz lazım olan tək şey onu quraşdırmaqdır.

sudo konfiqurasiya edin

sudo ldconfig

Addım 7: Rover üçün Python Kodunu Çalışdırın

Image
Image

Tracker.py adlı bir Python faylı yaradın və ona aşağıdakı kodu əlavə edin.

sudo nano tracker.py

kod:-

#ASAR Proqramı

#Bu proqram qırmızı topu izləyir və ona moruq pi -ni izləməyi tapşırır. sys sys.path.append ('/usr/local/lib/python2.7/site-packages') idxal cv2 idxal numpy kimi np import os idxal RPi. GPIO kimi 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. çıxışı (21, 1)#Sol Motor İrəli IO. çıxışı (22, 0) IO. çıxışı (13, 1)#Sağ Motor İrəli IO. çıxışı (15, 0) def bac (): IO.çıxış (21, 0)#Sol Motor geriyə IO. çıxışı (22, 1) IO. çıxışı (13, 0)#Sağ Motor geriyə IO. çıxışı (15, 1) def ryt (): IO.çıxış (21, 0) #Sol Motor geriyə IO.çıxış (22, 1) IO.çıxış (13, 1)#Sağ Motor irəli Çıxış (15, 0) def lft (): IO.çıxış (21, 1)#Sol Motor irəli IO.output (22, 0) IO.output (13, 0)#Sağ Motor geriyə IO.output (15, 1) def stp (): IO.put (21, 0)#Sol Motor stop IO.output (22, 0) IO.output (13, 0)#Sağ Motor stop IO.output (15, 0) ########################### ################################################### ##################### def main (): capWebcam = cv2. VideoCapture (0)#elan edin VideoCapture obyekti və veb kamerası ilə əlaqəli, 0 => 1 -ci veb kameradan istifadə edin # orijinal qətnaməni göstər "standart qətnamə =" + 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) # daha sürətli işlənmək üçün qətnaməni 320x240 olaraq dəyişdirin capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # yenilənmiş qətnamə çapını göstər "yenilənmiş qətnamə =" + str (capWebcam.get (cv2_FRAME)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), əgər capWebcam.isOpened () == Yanlış: # VideoCapture obyektinin veb kamerası ilə uğurla əlaqəli olub olmadığını yoxlayın "xətası: capWebcam'a uğurla daxil edilmədi / n / n" # deyilsə, səhv mesajını yazın os.system ("pause") # istifadəçi bir düyməni basana qədər durdurun ki, istifadəçi səhv mesajının qaytarılması # və çıxış funksiyasını (proqramdan çıxan) # sonda cv2.waitKey (1))! = 27 və capWebcam.isOpened (): # Esc düyməsinə basılana və ya veb kamera bağlantısı kəsilənə qədər blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # blnFrameReadSuccessfully yoxsa növbəti çərçivəni oxuyun və ya imgOriginal Heç biri deyil: # əgər çərçivə uğurla oxunmadısa "xəta: çərçivə veb kameradan oxunmadı / n" # os.systemi çıxarmaq üçün çap xətası mesajı yazın ("pauza") İstifadəçi bir düyməni basana qədər fasilə, istifadəçi səhv mesajını görə bilər # döngə zamanı çıxın (proqramdan çıxan) # son əgər 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 (imgThresh (np) 5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape çevrələri = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # dəyişən dairələri işlənmiş şəkildəki bütün dairələrlə doldurun yoxdur: # bu xətt, heç bir dairə tapılmadığı təqdirdə, proqramın növbəti sətirdə çökməsinin qarşısını almaq üçün lazımdır [0]: dairələrdəki dairə üçün IO.output (7, 1): # hər dairə üçün x, y, radius = dairə # x, y və radius çapını çıxarın "top mövqeyi x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # çap topunun mövqeyi və radiusu obRadius = int (radius) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Sağda Hərəkətdə") ryt () elif xAxis <100: print ("Solda Hərəkətdə") lft () başqa: stp () başqa: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # aşkar edilmiş obyektin mərkəzində kiçik yaşıl dairə cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # aşkar edildikdə obyektin ətrafında # qırmızı dairə çəkin # əgər başqa bir şey varsa: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # pəncərələr yaradın, cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # sabit pəncərə ölçüsü üçün WINDOW_AUTOSIZE istifadə edin və ya pəncərənin ölçüsünü dəyişmək üçün WINDOW_NORMAL istifadə edin cv2.imshow ("imgOriginal", imgOri ginal)#pəncərələri göstər cv2.imshow ("imgThresh", imgThresh)#end isə cv2.destroyAllWindows ()#pəncərələri yaddaşın qaytarılmasından sil ##################### ################################################### ############################## _ == "_main_": main ()

İndi yalnız proqramı işlətmək qalır

python tracker.py

Təbriklər! özüyeriyən rover hazırdır! Ultrasonik sensora əsaslanan naviqasiya hissəsi tezliklə tamamlanacaq və bu təlimatı yeniləyəcəyəm.

Oxuduğunuz üçün təşəkkürlər!

Tövsiyə: