İçindekiler:

Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini: 7 Adım (Resimlerle)
Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini: 7 Adım (Resimlerle)

Video: Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini: 7 Adım (Resimlerle)

Video: Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini: 7 Adım (Resimlerle)
Video: 5 ZORLUK DERECESİNDE 5 KAMERA PROJESİ 2024, Kasım
Anonim
Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini
Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini

Raspberry Pi 3, Açık CV nesne tanıma, Ultrasonik sensörler ve dişli DC motorlar ile güçlendirilmiştir. Bu gezici, eğitildiği herhangi bir nesneyi takip edebilir ve herhangi bir arazide hareket edebilir.

Adım 1: Giriş

Image
Image
Gerekli Malzemeler ve Yazılım
Gerekli Malzemeler ve Yazılım

Bu Eğitilebilir Kitapta, bir web kamerası cihazı veya orijinal ahududu pi kamera kullanma seçeneği ile bir Raspberry Pi 3 üzerinde çalışan Open CV yazılımını kullanarak nesneleri tanıyabilen ve takip edebilen bir Otonom Mars Gezgini oluşturacağız. Ayrıca, kameranın çalışmadığı karanlık ortamlarda yolunu izlemek için bir servo üzerine monte edilmiş bir Ultrasonik sensör ile donatılmıştır. Pi'den alınan sinyaller, PVC borularla yapılmış bir gövde üzerine monte edilmiş 4 x 150RPM DC motorları çalıştıran motor sürücüsü IC'ye (L293D) gönderilir.

2. Adım: Gerekli Malzemeler ve Yazılım

Gerekli Malzemeler ve Yazılım
Gerekli Malzemeler ve Yazılım
Gerekli Malzemeler ve Yazılım
Gerekli Malzemeler ve Yazılım

Gerekli malzemeler

  1. Raspberry Pi (Sıfır hariç herhangi biri)
  2. Raspberry PI Kamera veya web kamerası
  3. L293D motor sürücüsü IC
  4. Robot Tekerlekleri (7x4cm) X 4
  5. Redüktörlü DC Motorlar (150RPM) X 4
  6. Şasi için PVC borular

Yazılım gerekli

  1. Pi'yi SSH için Macun
  2. Nesne tanıma için açık CV

Adım 3: Rover Kasasını İnşa Etme

Rover Şasisini İnşa Etme
Rover Şasisini İnşa Etme
Rover Şasisini İnşa Etme
Rover Şasisini İnşa Etme
Rover Şasisini İnşa Etme
Rover Şasisini İnşa Etme

Bu PVC kasayı inşa etmek için ihtiyacınız olacak

  • 2X8"
  • 2X4"
  • 4 T-Eklem

PVC boruları merdiven benzeri bir yapıda düzenleyin ve T-bağlantılarına yerleştirin. Derzleri daha da güçlendirmek için PVC dolgu macunu kullanabilirsiniz.

Redüktörlü DC motorlar PVC boru şaseye kelepçelerle bağlandıktan sonra tekerlekler motorlara vidalarla bağlanır.

Adım 4: Ultrasonik Telemetre Düzeneğinin Oluşturulması

Ultrasonik Telemetre Meclisi Oluşturma
Ultrasonik Telemetre Meclisi Oluşturma

Ultrasonik telemetre tertibatı, bir Mikro Servo motora bağlı bir HC-SR04 Ultrasonik sensör kullanılarak yapılmıştır. Kablolar, servo motora vidalar ile bağlanan plastik kasaya yerleştirilmeden önce ultrasonik sensör ile önceden bağlanmıştır.

Adım 5: Şemalar ve Elektrik Bağlantıları

Şemalar ve Elektrik Bağlantıları
Şemalar ve Elektrik Bağlantıları
Şemalar ve Elektrik Bağlantıları
Şemalar ve Elektrik Bağlantıları

Lütfen elektrik bağlantılarını ekteki devre şemasına göre yapınız.

Adım 6: SSH ve Açık CV Kurulumu

SSH ve Açık CV Kurulumu
SSH ve Açık CV Kurulumu

Şimdi, gerekli yazılımı kurmak için ahududu pi'mize SSH yapmamız gerekiyor. Raspberry Pi'mize SSHing yaparak başlayacağız. Pi'nizin PC'nizle aynı yönlendiriciye bağlı olduğundan ve yönlendiriciniz tarafından kendisine atanan IP adresini bildiğinizden emin olun. Şimdi, Windows kullanıyorsanız bir komut istemi veya PUTTY açın ve aşağıdaki komutu çalıştırın.

ssh [email protected]

Pi'nizin IP'si farklı olabilir, benimki 192.168.1.6.

Şimdi varsayılan şifrenizi girin - "ahududu"

Şimdi, Pi'nize SSH'niz olduğuna göre, bu komutla güncelleme yaparak başlayalım.

sudo apt-get güncelleme && sudo apt-get yükseltme

Şimdi gerekli geliştirici araçlarını yükleyelim, sudo apt-get install build-essential cmake pkg-config

Ardından, Pi'mizin diskten çeşitli görüntü formatlarını almasına yardımcı olacak bazı görüntü G/Ç paketleri kurmamız gerekiyor.

sudo apt-get kurulumu libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Şimdi, video getirmek, canlı akış yapmak ve OpenCV performansını optimize etmek için bazı paketler

sudo apt-get kurulumu libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get kurulum libxvidcore-dev libx264-dev

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

sudo apt-get install libatlas-base-dev gfortran

OpenCV'yi python bağlamalarıyla derleyebilmemiz için Python 2.7 ve Python 3 başlık dosyalarını da yüklememiz gerekiyor.

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

OpenCV kaynak kodunun indirilmesi

cd ~

wget -O opencv.zip

opencv.zip dosyasını aç

opencv_contrib deposu indiriliyor

wget -O opencv_contrib.zip

opencv_contrib.zip dosyasını açın

OpenCV'yi yüklemek için sanal bir ortam kullanılması da önerilir.

sudo pip virtualenv virtualenvwrapper yükleyin

sudo rm -rf ~/.cache/pip

Şimdi, virtualenv ve virtualenvwrapper yüklendi, ~/.profile'imizi aşağıdaki satırları altta içerecek şekilde güncellememiz gerekiyor.

dışa aktar WORKON_HOME=$HOME/.virtualenvs dışa aktar VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 kaynağı /usr/local/bin/virtualenvwrapper.sh

Python sanal ortamınızı oluşturun

mkvirtualenv özgeçmiş -p python2

oluşturulan sanal ortama geç

kaynak ~/.profile

çalışma özgeçmişi

NumPy'yi Yükleme

pip kurulum numpy

OpenCV'yi Derleyin ve Yükleyin

cd ~/opencv-3.3.0/

mkdir inşa

cd oluşturma

cmake -D CMAKE_BUILD_TYPE=RELEASE / -D CMAKE_INSTALL_PREFIX=/usr/local / -D INSTALL_PYTHON_EXAMPLES=AÇIK / -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modüller_. AMP=D BUILOND

Sonunda OpenCV'yi derleyin

-j4 yap

Bu komut çalıştırmayı bitirdikten sonra. Tek yapmanız gereken yüklemek.

sudo yapılandırma

sudo ldconfig

Adım 7: Rover için Python Kodunu Çalıştırma

Image
Image

tracker.py adında bir Python dosyası oluşturun ve buna aşağıdaki kodu ekleyin.

sudo nano izleyici.py

kod:-

#ASAR Programı

#Bu program kırmızı bir topu izler ve bir ahududu pi'ye onu takip etmesini söyler. içe aktar sys sys.path.append('/usr/local/lib/python2.7/site-packages') cv2'yi içe aktar numpy'yi içe aktar işletim sistemi içe aktar RPi. GPIO'yu IO.setmode(IO. BOARD) IO.setup olarak içe aktar (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)#Sol Motor İleri IO.output(22, 0) IO.output(13, 1)#Sağ Motor İleri IO.output(15, 0) def bac(): IO.output (21, 0)#Sol Motor geri IO.output(22, 1) IO.output(13, 0)#Sağ Motor geri IO.output(15, 1) def ryt(): IO.output(21, 0) #Sol Motor geri IO.output(22, 1) IO.output(13, 1)#Sağ Motor ileri IO.output(15, 0) def lft(): IO.output(21, 1)#Sol Motor ileri IO.output(22, 0) IO.output(13, 0)#Sağ Motor geri IO.output(15, 1) def stp(): IO.output(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) # beyan VideoCapture nesnesi ve web kamerası ile ilişkilendirin, 0 => 1. web kamerasını kullan # orijinal çözünürlüğü göster yazdır "varsayılan çözünürlük = " + 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 hızlı işleme için çözünürlüğü 320x240 olarak değiştirin capWebcam.set(cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # güncellenmiş çözünürlüğü göster print "güncellenmiş çözünürlük = " + str(capWebcam.get(cv2. CAP_PROIDP)TH)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened() == False: # VideoCapture nesnesinin web kamerası ile ilişkili olup olmadığını kontrol edin başarıyla yazdırın "hata: capWebcam'e başarıyla erişilemedi\n\n" # değilse, std out os.system'e hata mesajını yazdır("pause") # kullanıcı hata mesajını görebilsin diye bir tuşa basana kadar duraklat # ve fonksiyondan çık (programdan çıkar) # if while cv2.waitKey(1) != 27 ve capWebcam.isOpened(): # Esc tuşuna basılana veya web kamerası bağlantısı kesilene kadar blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # blnFrameReadSuccessfully veya imgOriginal değilse None ise sonraki kareyi oku: # çerçeve başarıyla okunmadıysa yazdır "hata: çerçeve web kamerasından okunamadı\n" # std out os.system'e hata mesajı yazdır ("duraklat") # kullanıcı hata mesajını görebilmesi için bir tuşa basana kadar duraklat # çıkış while döngüsü (programdan çıkar) # end if 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. dizi([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 çevreler = cv2. HoughCircles(imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # değişken daireleri işlenen görüntüdeki tüm dairelerle doldur eğer daireler is not None: # bu satır, herhangi bir daire bulunmazsa programın bir sonraki satırda çökmesini önlemek için gereklidir IO.output(7, 1) daireler içindeki daire için[0]: # her daire için x, y, yarıçap = daire # x, y ve yarıçapı yazdır "top konumu x = " + str(x) + ", y = " + str(y) + ", yarıçap = " + str(yarıçap) # top konumunu ve yarıçapını yazdır obRadius = int(yarıçap) xAxis = int(x) if obRadius>0 & obRadius100&xAxis180: print("Sağa Hareket") ryt() elif xAxis<100: print("Sola Hareket") lft() başka: stp() başka: stp () cv2.circle(imgOriginal, (x, y), 3, (0, 255, 0), -1) # algılanan nesnenin merkezine küçük yeşil daire çiz cv2.circle(imgOriginal, (x, y), radius, (0, 0, 255), 3) # algılanan nesnenin etrafına kırmızı daire çiz # end for # else if: IO.output(7, 0) cv2.namedWindow("imgOriginal", cv2. WINDOW_AUTOSIZE) # pencereler oluştur, sabit bir pencere boyutu cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) için WINDOW_AUTOSIZE kullanın veya pencerenin yeniden boyutlandırılmasına izin vermek için WINDOW_NORMAL kullanın cv2.imshow("imgOriginal", imgOri ginal) # pencereleri göster cv2.imshow("imgThresh", imgThresh) # end while cv2.destroyAllWindows() # bellekten pencereleri kaldır döndür ################### ################################################# ########################### if _name_ == "_main_": ana()

Şimdi geriye sadece programı çalıştırmak kalıyor.

piton izleyici.py

Tebrikler! kendi kendine giden geziciniz hazır! Ultrasonik sensör tabanlı navigasyon bölümü yakında tamamlanacak ve bu talimatı güncelleyeceğim.

Okuduğunuz için teşekkürler!

Önerilen: