İçindekiler:

MATLAB Kontrollü Roomba: 5 Adım
MATLAB Kontrollü Roomba: 5 Adım

Video: MATLAB Kontrollü Roomba: 5 Adım

Video: MATLAB Kontrollü Roomba: 5 Adım
Video: Sigorta Nedir, Nasıl Çalışır, Sigorta Sağlamlık Testi 2024, Kasım
Anonim
MATLAB Kontrollü Roomba
MATLAB Kontrollü Roomba
MATLAB Kontrollü Roomba
MATLAB Kontrollü Roomba

Bu projenin amacı, modifiye edilmiş bir iRobot programlanabilir robotun yanı sıra MATLAB'ı kullanmaktır. Grubumuz, uçurum sensörleri, tampon sensörleri, ışık sensörleri ve kamera dahil olmak üzere iRobot'un birçok işlevini kullanan bir MATLAB komut dosyası oluşturmak için kodlama becerilerimizi birleştirdi. Bu sensör ve kamera okumalarını girdi olarak kullandık ve MATLAB kod fonksiyonlarını ve döngülerini kullanarak istediğimiz belirli çıktıları oluşturmamıza izin verdik. Ayrıca MATLAB mobil cihazı ve jiroskopu iRobot'a bağlanmanın ve onu kontrol etmenin bir yolu olarak kullanıyoruz.

Adım 1: Parçalar ve Malzemeler

Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler

MATLAB 2018a

-MaTLAB'ın 2018 versiyonu, çoğunlukla mobil cihaza bağlanan kod ile en iyi şekilde çalıştığı için en çok tercih edilen versiyondur. Ancak, kodlarımızın çoğu MATLAB sürümlerinin çoğunda yorumlanabilir.

iRobot Cihaz Oluştur

-Bu cihaz, tek amacı programlama ve kodlama olan özel yapılmış bir cihazdır. (Gerçek bir boşluk değil)

Raspberry Pi (kameralı)

- Bu, iRobot'un beyni olarak çalışan, pahalı olmayan bir bilgisayar kartıdır. Küçük olabilir, ancak birçok şeyi yapabilir. Kamera ek bir eklentidir. Ayrıca tüm işlevlerini ve komutlarını elde etmek için ahududu pi'yi kullanır. Yukarıda resmedilen kamera, Tennessee Üniversitesi'ndeki Mühendislik Temelleri bölümleri tarafından oluşturulan 3D baskılı bir stand üzerine monte edilmiştir.

2. Adım: Roomba Veritabanı Dosyası

Roomba Veritabanı Dosyası
Roomba Veritabanı Dosyası

Roomba'nız için uygun fonksiyonları ve komutları kullanabilmeniz için ihtiyaç duyacağınız bir ana dosya bulunmaktadır. Bu dosya, roomba'nızı daha yönetilebilir hale getirmek için kod yazdığınız işlevlerdir.

Dosyayı bu linkten veya aşağıdaki indirilebilir dosyadan indirebilirsiniz.

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

3. Adım: Roomba'ya bağlanma

Öncelikle robotunuzun bir mikro USB fişi kullanarak ahududu pi kartınıza bağlı olduğundan emin olmalısınız. Ardından bilgisayarınızı ve robotunuzu aynı WiFi'ye düzgün şekilde bağlamanız gerekir. Bu yapıldıktan sonra robotunuzu çalıştırabilir ve robot veritabanı dosyasında verilen komutu kullanarak ona bağlanabilirsiniz. (Robotunuzu kullanmadan önce ve sonra her zaman donanımdan sıfırlayın). Örneğin robotumuza bağlanmak için "r.roomba(19)" komutunu kullanıyoruz, r değişkenini cihazımıza atadık. Bu, değişkenimizi herhangi bir anda başvurabileceğimiz bir yapı olarak kuran veritabanı dosyasına atıfta bulunur.

Adım 4: Kod

kod
kod
kod
kod

Aşağıdaki kodun tamamını ekledik, ancak burada komut dosyamızdaki önemli unsurları vurgulayan kısa bir genel bakış var. Robotumuzun potansiyelini en üst düzeye çıkarmak için tüm sensörleri ve kamerayı kullandık. Ayrıca robotumuza bir mobil cihaz bağlamamıza ve onu manuel olarak kontrol etmek için groskopu kullanmamıza izin veren kodu da ekledik.

Robotun ileri hızını 0,06 m/s'ye ayarlayan basit "r.setDriveVelocity(.06)" komutuyla başladık. Bu sadece robotu önceden hareket ettirmek içindir

Ardından, ana betiğimiz, aşağıdaki koşullu ifadelerde başvurabileceğimiz ve kullanabileceğimiz yapılar oluşturarak verilen robotun verilerini alan bir while döngüsü ile başlatılır, böylece robota yapı verilerine dayanarak belirli bir komutu çalıştırdığını söylememizi sağlar. robot sensörleri ile okur. Robotun uçurum sensörlerini okuması ve siyah bir yol izlemesi için ayarladık

while true % while döngüsü "false" bir şey oluşana kadar devam eder (bu durumda sonsuza kadar devam eder) data = r.getCliffSensors; data2 = r.getBumpers;% uçurum sensörü değerleri hakkında sürekli olarak veri alır ve bunları bir değişkene atar % img = r.getImage; % Takılı kameradan resim çeker % image(img); % Alınan görüntüyü gösterir % red_mean = ortalama(mean(img(:,:, 1)));% data.rightFront < 2000 r.turnAngle(-2); %, sağ ön uçurum sensörlerinin değeri 2000 r.setDriveVelocity(.05) altına düştüğünde Roomba'yı yaklaşık 0,2 derece CW döndürür; elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); %, sağ ön ve sol ön sensörlerden gelen her iki değer de 2000 % r.turnAngle(0)'ın altına düşerse Roomba'ya yaklaşık 0,2 m/s'de ilerlemeye devam etmesini söyler; % yukarıda belirtilen koşullar doğruysa Roomba'ya dönmemesini söyler

elseif data2.right == 1 r.moveDistance(-.12); r.turnAngle(160); r.setDriveVelocity(.05); elseif data2.left == 1 r.moveDistance(-.2); r.turnAngle(5); r.setDriveVelocity(.05); elseif data2.front == 1 r.moveDistance(-.12); r.turnAngle(160); r.setDriveVelocity(.05);

Bu while döngüsünden sonra kamera üzerinden elde edilen verileri tetikleyen başka bir while döngüsüne giriyoruz. Ve bu while döngüsü içinde, belirli bir program (alexnet) kullanarak bir görüntüyü tanıyan bir if ifadesi kullanıyoruz ve görüntüyü tanımladıktan sonra hemen mobil cihazın uzaktan kumandasını tetikliyor

anet = alexnet; % alexnet derin öğrenmeyi bir değişkene atar while true % Infinite while döngüsü img = r.getImage; img = imresize(img, [227, 227]); etiket = sınıflandır(anet, img); if etiketi == "kağıt havlu" || etiket == "buzdolabı" etiket = "su"; bitiş resmi(img); başlık(char(etiket)); çizilmiş;

Cihazı telefonumuzla kontrol etmemizi sağlayan while döngüsü, bu verileri telefonun jiroskopundan alır ve onu, sürekli olarak bilgisayardaki MATLAB'a geri aktaran bir matrise bağlarız. Matrisin verilerini okuyan ve telefonun jiroskopunun belirli değerlerine göre cihazı hareket ettiren bir çıktı veren bir if ifadesi kullanıyoruz. Mobil cihazın Oryantasyon sensörlerini kullandığımızı bilmek önemlidir. Yukarıda bahsedilen üçe bir matris, telefonun yön sensörlerinin azimut, eğim ve yan olan her bir elemanı tarafından kategorize edilir. if ifadeleri, kenar 50 değerini aştığında veya -50'nin altına düştüğünde, robot belirli bir mesafe ileri (pozitif 50) veya geri (negatif 50) hareket ettiğinde belirtilen koşulları yarattı. Aynısı adım değeri için de geçerlidir. Hatve değeri 25 değerini aşarsa -25'in altına düşerse robot 1 derece (pozitif 25) veya negatif 1 derece (negatif 25) açıyla döner

while gerçek duraklama(.1) % Her değer alınmadan önce.5 saniyelik duraklama Kontrolör=iphone. Orientation; % iPhone'un oryantasyon değerleri için matrisi Azimuthal=Controller(1); % Matrisin ilk değerini bir değişkene atar Pitch=Controller(2); % Matrisin ikinci değerini bir değişkene atar (iPhone yana doğru tutulduğunda ileri ve geri eğin) Side=Controller(3); % Matrisin üçüncü değerini bir değişkene atar (iPhone yana tutulduğunda sola ve sağa eğin) % Yan > 130 || Yan 25 r.moveMesafe(-.1) % iPhone geriye doğru yatırılırsa Roomba'yı yaklaşık 0,1 metre geriye doğru hareket ettirir, aksi takdirde Yan 25 r.dönüşAçı(-1) % iPhone ise Roomba'yı yaklaşık 1 derece sola döndürür en az 25 derece sola eğik ise Pitch < -25 r.turnAngle(1) % iPhone en az 25 derece sonunda eğilirse Roomba'yı yaklaşık 1 derece CW döndürür

Bunlar, kendi yararınıza bir bölümü hızlı bir şekilde kopyalayıp yapıştırmanız gerektiğinde eklediğimiz kodumuzun ana parçalarının yalnızca öne çıkan kısımlarıdır. Ancak, gerekirse kodumuzun tamamı aşağıya eklenmiştir

Adım 5: Sonuç

Yazdığımız bu kod, projeye ilişkin genel vizyonumuzun yanı sıra robotumuz için özel olarak tasarlanmıştır. Amacımız, robotun özelliklerinin çoğunu kullanan iyi bir tasarım komut dosyası oluşturmak için tüm MATLAB kodlama becerilerimizi kullanmaktı. Telefon kumandasını kullanmak düşündüğünüz kadar zor değildir ve umarız kodumuz bir iRobot kodlamanın ardındaki konsepti daha iyi anlamanıza yardımcı olabilir.

Önerilen: