- Gerekli Donanım:
- Programlama Gereksinimi:
- Raspberry Pi'de İşlemeyi Ayarlama:
- Devre şeması:
- Raspberry Pi Ball izleme Programı:
- Raspberry Pi Top Takip Robotunun Çalışması:
Robotik, Yapay Zeka ve Makine Öğrenimi alanı hızla gelişiyor ve yakın gelecekte insanlığın yaşam tarzını değiştireceğinden emin. Robotların, sensörler ve makine öğrenimi işlemleri aracılığıyla gerçek dünyayı anladığı ve onunla etkileşime girdiği düşünülüyor. Görüntü tanıma, tıpkı bizim yaptığımız gibi, robotların nesneleri gerçek dünyaya bir kamerayla bakarak anladıklarının düşünüldüğü popüler yöntemlerden biridir. Bu projede Raspberry Pi'nin gücünü futbol oynayan robotlar gibi topu takip edebilecek ve takip edebilecek bir Robot yapmak için kullanalım.
OpenCV, Görüntü işleme için kullanılan çok ünlü ve açık kaynaklı bir araçtır, ancak bu eğitimde işleri basit tutmak için IDE İşleme'yi kullanıyoruz. ARM için işleme, işleme için GPIO kitaplığını da yayınladığından, artık Raspberry Pi ile çalışmak için python ve işleme arasında geçiş yapmak zorunda kalmayacağız. Kulağa hoş geliyor değil mi? Öyleyse başlayalım.
Gerekli Donanım:
- Ahududu Pi
- Şerit kablolu kamera modülü
- Robot Şasi
- Tekerlekli dişli motorlar
- L293D motor sürücüsü
- Güç bankası veya başka herhangi bir taşınabilir güç kaynağı
Programlama Gereksinimi:
- Raspberry pi için monitör veya diğer ekran
- Pi için klavye veya fare
- ARM yazılımı işleniyor
Not: Programlama sırasında Pi'ye kablolarla bağlanan bir ekranın olması zorunludur çünkü ancak o zaman kameranın videosu görüntülenebilir.
Raspberry Pi'de İşlemeyi Ayarlama:
Daha önce de belirtildiği gibi, işlem ortamını, python kullanmanın varsayılan yolu değil, Raspberry Pi'mizi Programlamak için kullanacağız. Bu nedenle, aşağıdaki adımları izleyin:
Adım 1: - Raspberry Pi'nizi monitörünüze, klavyenize ve farenize bağlayın ve açın.
Adım 2: - Pi'nizin aktif bir internet bağlantısına bağlı olduğundan emin olun çünkü birkaç şey indirmek üzereyiz.
Adım 3: - Raspberry Pi için işleme IDE'sini indirmek için İşleme ARM üzerine tıklayın. İndirme, bir ZIP dosyası biçiminde olacaktır.
Adım 4: - İndirdikten sonra, ZIP klasörünüzdeki dosyaları tercih ettiğiniz dizine çıkartın. Masaüstümde yeni çıkardım.
Adım 5: - Şimdi, çıkarılan klasörü açın ve işleme adlı dosyaya tıklayın. Aşağıda gösterildiği gibi bir pencere açmalıdır.
Adım 6: - Bu, kodlarımızı yazacağımız ortamdır. Arduino'ya aşina olan insanlar için şok olmayın EVET IDE, Arduino'ya benziyor ve program da öyle.
Adım 7: - Topu takip eden programımızın çalışması için iki kütüphaneye ihtiyacımız var, ardından sadece Sketch -> Import Library -> Add Library'ye tıklayın . Aşağıdaki iletişim kutusu açılacaktır.
Adım 8: - Raspberry Pi'yi aramak için sol üst metin kutusunu kullanın ve enter tuşuna basın, arama sonucunuz böyle bir şeye benzemelidir.
Adım 9: - “GL Video” ve “Donanım G / Ç” adlı kitaplıkları arayın ve kurmak için kur'a tıklayın. Her iki kitaplığı da kurduğunuzdan emin olun.
Adım 10: - İnternetinize bağlı olarak kurulum birkaç dakika sürecektir. Bittiğinde, işleme yazılımı için hazırız.
Devre şeması:
Bu Raspberry Pi Top İzleme Projesinin devre şeması aşağıda gösterilmiştir.
Gördüğünüz gibi devre bir PI kamera, Motor Sürücü modülü ve Raspberry pi'ye bağlı bir çift motor içeriyor. Devrenin tamamı bir Mobil Güç bankası tarafından çalıştırılır (yukarıdaki devrede AAA pil ile temsil edilir).
Raspberry Pi üzerinde pin detaylarından bahsedilmediği için aşağıdaki resmi kullanarak pinleri doğrulamamız gerekmektedir.
Motorları sürmek için dört pime (A, B, A, B) ihtiyacımız var. Bu dört pim sırasıyla GPIO14,4,17 ve 18'den bağlanır. Turuncu ve beyaz tel birlikte bir motor için bağlantı oluşturur. Yani iki motor için böyle iki çiftimiz var.
Motorlar, resimde gösterildiği gibi L293D Motor Sürücüsü modülüne bağlanır ve sürücü modülü bir güç bankası tarafından beslenir. Güç bankasının topraklamasının Raspberry Pi'nin zeminine bağlı olduğundan emin olun, ancak o zaman bağlantınız çalışacaktır.
Yani, Donanım bağlantımızla işimiz bitti, işleme ortamımıza geri dönelim ve robotumuza bir topu nasıl takip edeceğini öğretmek için programlamaya başlayalım.
Raspberry Pi Ball izleme Programı:
Tam İşlem programı bu projenin doğrudan kullanmak bu sayfada, sonunda verilir. Hemen aşağıda, diğer benzer projeler için kullanabilmeniz için kodun çalışmasını açıkladım.
Program kavramı çok basittir. Projenin amacı bir topu takip etmek olsa da aslında bunu yapmayacağız. Sadece rengini kullanarak topu tanımlayacağız. Hepimizin bildiği gibi videolar sürekli resim karelerinden başka bir şey değildir. Bu yüzden her bir resmi çekip piksellere ayırıyoruz. Sonra her piksel rengini topun rengiyle karşılaştırıyoruz; Eğer bir eşleşme bulunursa o zaman topu bulduğumuzu söyleyebiliriz. Bu bilgilerle, topun ekrandaki konumunu (piksel rengi) de belirleyebiliriz. Konum en soldaysa robotu sağa hareket ettiririz, konum çok sağsa robotu sola hareket ettiririz, böylece piksel konumu her zaman ekranın ortasında kalır. Net bir görüntü elde etmek için Daniel shiffman'ın Computer Vision videosunu izleyebilirsiniz.
Her zaman olduğu gibi , indirdiğimiz iki kütüphaneyi içe aktararak başlıyoruz. Bu, aşağıdaki iki satırla yapılabilir. Donanım I / O kitaplığı, PI'nın GPIO pinlerine doğrudan işlem ortamından erişmek için kullanılır, glvideo kitaplığı Raspberry Pi kamera modülüne erişmek için kullanılır.
import processing.io. *; ithal gohai.glvideo. *;
Kurulum işlevinin içinde motoru kontrol etmek için çıkış pinlerini başlatıyoruz ve ayrıca videoyu pi kameradan alıp 320 * 240 boyutunda bir pencerede boyutlandırıyoruz.
geçersiz kurulum () {boyut (320, 240, P2D); video = yeni GLCapture (bu); video.start (); trackColor = renk (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Hükümsüz beraberlik bu döngü içinde kod sürece programın sona kadar yürütmek olacak sonsuz döngüye gibidir. Bir kamera kaynağı varsa, çıkan videoyu okuruz
void draw () {arkaplan (0); eğer (video.available ()) {video.read (); }}
Ardından video karesini piksellere ayırmaya başlarız. Her pikselin kırmızı, yeşil ve mavi değerleri vardır. Bu değerler r1, g1 ve b1 değişkenlerinde saklanır.
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Geçerli renk rengi nedir currentColor = video.pixels; float r1 = kırmızı (currentColor); float g1 = yeşil (currentColor); float b1 = mavi (currentColor);
To başlangıçta topun rengini tespit, biz renge tıklayın gerekiyor. Bir kez tıkladığınızda topun rengi trackColour adlı değişkene kaydedilecektir.
void mousePressed () {// trackColor değişkeninde farenin tıklandığı yerde rengi kaydedin int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Parça rengine ve mevcut renge sahip olduğumuzda bunları karşılaştırmamız gerekir. Bu karşılaştırma dist işlevini kullanıyor. Mevcut rengin iz rengine ne kadar yakın olduğunu kontrol eder.
şamandıra d = dist (r1, g1, b1, r2, g2, b2);
Dist değeri tam bir eşleşme sıfır olacaktır. Öyleyse, dist değeri belirtilen bir değerden (dünya rekoru) düşükse, iz rengini bulduğumuzu varsayarız. Sonra bu pikselin konumunu alırız ve topun yerini bulmak için onu en yakın X ve Y'ye en yakın değişkene kaydederiz.
eğer (d <worldRecord) {worldRecord = d; en yakınX = x; en yakınY = y; }
Ayrıca , rengin bulunduğunu belirtmek için bulunan rengin etrafına bir elips çizeriz. Konumun değeri de konsolda basılıdır, bu hata ayıklama sırasında çok yardımcı olacaktır.
if (worldRecord <10) {// İzlenen piksel dolgusunda bir daire çizin (trackColor); strok Ağırlığı (4.0); inme (0); elips (en yakın X, en yakın Y, 16, 16); println (en yakınX, en yakınY);
Son olarak , en yakın X ve en yakın Y'nin konumunu karşılaştırabilir ve motorları, renk ekranın ortasına gelecek şekilde ayarlayabiliriz. Rengin X konumu ekranın sol tarafında olduğu (<140) bulunduğu için aşağıdaki kod robotu sağa çevirmek için kullanılır.
eğer (en yakınX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); gecikme (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Sağa Dön"); }
Benzer şekilde, motorları istenen yönde kontrol etmek için X ve Y'nin konumunu kontrol edebiliriz. Her zaman olduğu gibi programın tamamı için sayfanın alt kısmına bakabilirsiniz.
Raspberry Pi Top Takip Robotunun Çalışması:
Donanım ve programa hazır olduğunuzda, biraz eğlenme zamanı. Botumuzu yerde test etmeden önce, her şeyin yolunda gittiğinden emin olmalıyız. İşlem kodunu izlemek ve başlatmak için Pi'nizi bağlayın. Video akışını küçük bir pencerede görmelisiniz. Şimdi, topu çerçevenin içine getirin ve robota bu rengi izlemesi gerektiğini öğretmek için topa tıklayın. Şimdi topu ekranın etrafında hareket ettirin ve tekerleklerin döndüğünü fark etmelisiniz.
Her şey beklendiği gibi çalışıyorsa, botu yere bırakın ve onunla oynamaya başlayın. En iyi sonuçlar için odanın eşit şekilde aydınlatıldığından emin olun. Projenin tam çalışması aşağıdaki videoda gösterilmektedir. Umarım projeyi anlamışsınızdır ve benzer bir şey yapmaktan zevk almışsınızdır. Herhangi bir sorununuz varsa, bunları aşağıdaki yorum bölümüne göndermekten çekinmeyin veya yardım edin.