İçindekiler:
- Adım 1: Giriş
- 2. Adım: Gerekli Malzemeler ve Yazılım
- Adım 3: Rover Kasasını İnşa Etme
- Adım 4: Ultrasonik Telemetre Düzeneğinin Oluşturulması
- Adım 5: Şemalar ve Elektrik Bağlantıları
- Adım 6: SSH ve Açık CV Kurulumu
- Adım 7: Rover için Python Kodunu Çalıştırma
Video: Raspberry Pi - OpenCV Nesne Takibi ile Otonom Mars Gezgini: 7 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
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ş
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
- Raspberry Pi (Sıfır hariç herhangi biri)
- Raspberry PI Kamera veya web kamerası
- L293D motor sürücüsü IC
- Robot Tekerlekleri (7x4cm) X 4
- Redüktörlü DC Motorlar (150RPM) X 4
- Şasi için PVC borular
Yazılım gerekli
- Pi'yi SSH için Macun
- Nesne tanıma için açık CV
Adım 3: Rover Kasasını İ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 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ı
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
Ş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.
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
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:
Roomba'nızı Mars Gezgini'ne Dönüştürmek: 5 Adım
Roomba'nızı Mars Gezgini'ne Dönüştürmek:
Nesne Yönelimli Programlama: Nesne Oluşturma Şekil Delgeç Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: 5 Adım
Nesneye Yönelik Programlama: Nesneler Oluşturma Shape Punch Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: Nesne yönelimli programlamaya yeni başlayan öğrenciler için öğrenme/öğretme yöntemi. Bu, sınıflardan nesne oluşturma sürecini görselleştirmelerine ve görmelerine izin vermenin bir yoludur. Parçalar:1. EkTools 2 inç büyük zımba; katı şekiller en iyisidir.2. Kağıt parçası veya c
Raspberry Pi Kullanan Mars Gezgini: 5 Adım
Raspberry Pi Kullanan Mars Gezgini: Sevgili tüm Büyük Öğreniciler, Mars'ın tüm yüzeyine gidebilen ve Dünya'dan bir şeyler keşfedebilen 6 tekerleğe sahip olan mars gezgini hakkında her zaman merak ediyorum. Ben de dizüstü bilgisayarımda oturarak bir şeyler keşfetmek istiyorum. Şimdi bunu yapmak için doğru zamanı düşünüyorum ve
Renk Algılama Tabanlı Nesne Takibi: 10 Adım
Renk Algılamaya Dayalı Nesne Takibi: Öykü Bu projeyi Raspberry PI ve açık CV kullanarak görüntü işlemeyi öğrenmek için yaptım. Bu projeyi daha ilginç hale getirmek için iki adet SG90 Servo motor kullandım ve üzerine kamera monte ettim. Bir motor yatay olarak hareket etmek için kullanılırken, ikinci motor dikey olarak hareket etmek için
Nesne Yönelimli Programlama: Nesne Oluşturma Makas Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: 5 Adım
Nesne Yönelimli Programlama: Nesne Oluşturma Öğrenme/Öğretme Yöntemi/Teknik Makas Kullanarak: Nesne yönelimli programlamaya yeni başlayan öğrenciler için öğrenme/öğretme yöntemi. Bu onların sınıflardan nesne yaratma sürecini görselleştirmelerine ve görmelerine izin vermenin bir yoludur. Parçalar: 1. Makas (her türlü olur). 2. Kağıt veya karton parçası. 3. İşaretleyici.