İçindekiler:

Bahçe Yardımcısı Roomba Bot: 8 Adım
Bahçe Yardımcısı Roomba Bot: 8 Adım

Video: Bahçe Yardımcısı Roomba Bot: 8 Adım

Video: Bahçe Yardımcısı Roomba Bot: 8 Adım
Video: Denediğim En Akıllı Robot Süpürge! iRobot Roomba j7+ 2024, Kasım
Anonim
Bahçe Yardımcısı Roomba Bot
Bahçe Yardımcısı Roomba Bot

Kiara Myers, Ahmad Alghadeer ve Madison Tippet

Amaç:

Bu talimat size, MATLAB kullanarak bir bahçede gezinmek ve boyutlarına göre toplanacak kadar olgun olan dairesel şekilli meyveleri/sebzeleri tespit etmek için bir Roomba Bot'u nasıl programlayacağınızı öğretecektir. Bu robot ayrıca size kaç tane meyvenin toplanmaya hazır olduğunu ve gittiği yolu bildiren bir e-posta gönderir.

Özellikleri:

  • Duvarları algılamak için ışık sensörleri kullanır ve onlara çarpmamak için hafifçe döner
  • Bahçenin sonundaki kayaya çarptığında programı bozmak için çarpma sensörleri kullanır
  • Bahçedeki bir daireyi algılamak ve ardından yarıçapını belirlemek için görüntü işlemeyi kullanır
  • Bir meyvenin varlığını gösteren renkli bir bandı algılamak için uçurum sensörlerini kullanır

Adım 1: Malzemeler ve Malzemeler:

  • Bir Dizüstü Bilgisayar
  • MATLAB 2017
  • Roomba Elektrikli Süpürge
  • Ahududu Pi
  • Tahta blokları
  • Beyaz kağıt
  • Siyah kağıt
  • Renkli bant/ince renkli kağıt şeridi
  • Büyük kaya

Adım 2:

Adım 3: "Bahçenizi" Birleştirme

Sizin Montaj
Sizin Montaj
  1. Siyah kağıdınızı alın ve çeşitli boyutlarda daireler kesin
  2. Bu siyah daireleri büyük beyaz bir kağıda bantlayın.

    Bu kontrast, bir meyve tespit edilirken gerekli olacaktır

  3. Robotunuzun gezinmesi için labirent benzeri bir bahçe yolu oluşturmak için tahta bloklarınızı kullanın

    Yukarıda gösterildiği gibi U şeklinde bir yol seçtik

  4. Bahçenizin sonuna, robotunuzun bittiğini anlaması için bir kaya, kapı veya başka bir nesne ekleyin.
  5. Beyaz kağıdınızı daire ile bahçenin duvarlarına bantlayın

    Duvarlarımız kamera için çok kısa olduğu için bantlamak için kovalar kullandık

  6. Meyvenin önüne renkli bant/ince renkli kağıt şeritleri yere koyun.

Adım 4: Kodu Yazma

Bahçede Gezinmek

Bump Sensörlerini Kullanma: Programı çalıştırmak için, kodlamayı, kod bozulana kadar çeşitli if ifadeleri arasında dolaşan bir while ifadesine yerleştiririz. Tamponlardan herhangi biri vurulursa, değerleri true değerine eşit olur (Boolean'da 1 değeridir). Değerlerinden biri 1'e eşit olduğunda kodu kırmak için if ifadesi kullanılır.

Uçurum Sensörlerini Kullanma: while deyimi içinde, Roomba'ya bir bitkinin bulunduğu yere ne zaman ulaştığını söylemek için bir if deyimi kullanırız. Roomba, uçurum sensörlerinin algıladığı kırmızı eşiği inceleyerek zemindeki renkli bandı algılar. Sol veya sağ uçurum sensörü, zeminden daha büyük bir eşiği olan bir renk algılarsa, robotu 2 saniyeliğine durdurur (duraklatma komutunu kullanarak). Bu 2 saniye boyunca Roomba meyvenin bir görüntüsünü alacak ve gösterecektir. Komutta yerleşik imfindcircles'ı kullanarak çevrelerinizin yarıçapı için bir aralık belirleyin ve Roomba'nız sözde meyvenizi bulacaktır.

Görüntü İşlemeyi Kullanma: if ifadesinin içine, şunu söyleyen başka bir if ifadesini yerleştiririz: yarıçap tespit edilirse, yarıçap3, olgun bir meyve için minimum gereksinimimiz olan r1'e eşit veya bundan büyükse (buna siz karar verirsiniz), sonra sayın ve görüntüleyin Roomba kaç meyve hazır ve bahçeden devam etmek için dönüyor. Değilse, sıra bahçeden devam edin. Not: Her Roomba farklı olduğundan döndüğünüz açıyı ayarlamanız gerekebilir.

Işık Tamponlarının Kullanılması: Başka bir if ifadesinde, ışık tamponlarının hiçbirinin bizim belirlediğimiz eşiği aşmadığından emin olmak için analiz edilir. Sol, sağ, sol orta, sağ orta, sol ön veya sağ ön ışık tamponu eşiğin üzerine çıkarsa, Roomba duvara çarpmamak için uygun açıda hafifçe dönecektir. Bu nedenle, labirentte gezinmek.

Kodun geri kalanı, Roomba tarafından alınan yolu çizmek ve ardından sonuçları e-postanıza göndermek için kullanılır.

Adım 5: Kodu Kopyalayın

% Amaç: Roomba boyutlarına göre bir bahçeden geçecek ve toplanmaya hazır sebze/meyveleri ayırt edecektir. % Girişler: Işık çarpması sensörleri, Uçurum sensörleri, Çarpma sensörleri, kameradan görüntü % Çıkışlar: Işık sensörleri eşikten büyük olduğunda, roomba döner ve bir resim çeker, % sebze/meyve yarıçapı belirli bir aralık arasındaysa bip sesi çıkarır. Roomba bir nesnenin %'sine çarptığında kod kırılır, astronota kaç tane meyvenin % toplanmaya hazır olduğuna dair bir e-posta ve roomba'nın hareketinin bir haritasını gönderir. % Kullanım: If ve while ifadeleri, çizim komutları, MATLAB'dan e-posta kodu

k=0

tik

timerVal=tic

doğru iken

v=.2; % hız r.setDriveVelocity(v, v);%roomba ileri git L=r.getLightBumpers; LC=L.leftCenter; Rr=L.sağ; Lf=L.sol; RC=L.sağMerkez; LF=L.solÖn; RF=L.sağÖn; Q= 75; % eşik. RTH=30; %Yüksek kırmızı eşik RTL=10; %Düşük kırmızı eşik B=r.getBumpers S=r.getCliffSensors; r1=24; r3=10; PL1=1800; eğer S.leftFront > PL1 || S.rightFront > PL1 %, zemindeki rengin eşiğin üzerinde olup olmadığını algılar r.durdur duraklama(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % 2 saniye duraklama img = r.getImage; %resmi al imshow(img)%görüntü göster [centers3, radii3] = imfindcircles(img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = iç çemberler(merkezler3, yarıçap3); Eğer yarıçap3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime ise resimde belirtilen aralıkta yarıçaplı daireleri arayın, sonra Roomba bu meyveyi sayar elseif radii3<=r3 T=0 else T=0 dist2=0.2.*elapsedTime %Değilse, meyve sonunu saymaz

if T==1 r.setLEDDigits(num2str(k)) r.bip r.bip r.bip r.turnAngle(78) %Eğer bir meyve algılanırsa, Roomba'da sayıyı görüntüleyin, %ses çıkar ve çevirin elseif T==2 r.turnAngle(78) %2 meyve tespit edilirse, %bahçe'den devam etmek için dönün else r.turnAngle(78) %Eğer meyve tespit edilmezse, %bahçe sonundan devam etmek için çevirin eğer LC >Q r.stop r.turnAngle(-7) elseif RC >Q r.stop r.turnAngle(7) elseif LF >Q r.stop r.turnAngle(-7) elseif RF >Q r.stop r. turnAngle(7) elseif Lf > Q r.stop r.turnAngle(-7) elseif Rr >Q r.stop r.turnAngle(7) end % Işık tamponlarının değerlerinden herhangi biri eşiğin üzerine çıkarsa, % Roomba duvara çarpmamak için uygun yönde hafifçe dönecektir

eğer B.sağ ==1 || B.sol==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Eğer bunlardan herhangi biri bumbers vurulur, sonra oda sesi çalar, döner, % ve kodu kırar

ara sonu

bitiş dağılım(0.533, 0, '^') dağılımda beklet(0.533, dist1, '<') dağılımda bekle(-dist2, dist1, 'v') dağılımda bekle(-dist2, 0, 'd') saveas (gcf, 'Hareket.png')

kmsg=num2str(k) mail= '[email protected]' password='Srsora123#' host='smtp.gmail.com' port='465'

setpref('İnternet', 'E_posta', posta); setpref('Internet', 'SMTP_Server', ana bilgisayar) sahne = Java.lang. System.getProperties; props.setProperty('mail.smtp.user', mail); props.setProperty('mail.smtp.host', host); props.setProperty('mail.smtp.port', port); props.setProperty('mail.smtp.starttls.enable', 'true'); props.setProperty('mail.smtp.debug', 'true'); props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.port', port); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.fallback', 'yanlış'); sendmail(mail, 'Merhaba Astronot! Bahçede bu kadar meyve var', kmsg, {'movement.png'})

Önerilen: