Mündəricat:

Bağ Köməkçisi Roomba Bot: 8 addım
Bağ Köməkçisi Roomba Bot: 8 addım

Video: Bağ Köməkçisi Roomba Bot: 8 addım

Video: Bağ Köməkçisi Roomba Bot: 8 addım
Video: How to use DEEBOT N8 PRO 2024, Iyul
Anonim
Bağ Köməkçisi Roomba Bot
Bağ Köməkçisi Roomba Bot

Kiara Myers, Ahmad Alghadeer və Madison Tippet

Məqsəd:

Bu təlimat, MATLAB-dan istifadə edərək, ölçüsünə görə yığılacaq qədər yetişmiş dairəvi şəkilli meyvə/tərəvəzləri aşkar edərək, bir bağda gəzmək üçün MATLAB-dan istifadə edərək Roomba Botu necə proqramlaşdırmağı öyrədəcək. Bu robot sizə nə qədər meyvə yığmağa hazır olduğunu və hansı yolu keçdiyini bildirən bir e -poçt da göndərir.

Xüsusiyyətləri:

  • Divarları aşkar etmək və vurmamaq üçün bir az dönmək üçün işıq sensorlarından istifadə edir
  • Bağçanın sonundakı qayaya çırpıldıqda proqramı pozmaq üçün qabar sensorlar istifadə edir
  • Bağdakı bir dairəni aşkar etmək və sonra onun radiusunu təyin etmək üçün görüntü işlənməsindən istifadə edir
  • Meyvənin varlığını göstərən rəngli lenti aşkar etmək üçün uçurum sensörlərindən istifadə edir

Addım 1: Materiallar və Təchizatlar:

  • Bir noutbuk
  • MATLAB 2017
  • Roomba tozsoran
  • Moruq Pi
  • Taxta bloklar
  • Ağ kağız
  • Qara Kağız
  • Rəngli lent/rəngli kağızdan nazik zolaq
  • Böyük Qaya

Addım 2:

Addım 3: "Bağçanızı" yığın

Özünüzü yığmaq
Özünüzü yığmaq
  1. Qara kağızınızı götürün və müxtəlif ölçülü dairələri kəsin
  2. Bu qara dairələri böyük bir ağ kağıza yapışdırın

    Bir meyvə aşkar edərkən bu ziddiyyət lazım olacaq

  3. Robotunuzun hərəkət etməsi üçün labirentə bənzər bir bağ yolu qurmaq üçün ağac bloklarınızı istifadə edin

    Yuxarıda göstərildiyi kimi U şəkilli bir yol seçdik

  4. Bahçenizin sonunda robotunuzun bitdiyini bilmək üçün bir qaya və ya qapı və ya başqa bir şey əlavə edin
  5. Ağ kağızınızı dairə ilə bağın divarlarına yapışdırın

    Divarlarımız kamera üçün çox qısa olduğu üçün lent üçün kovalardan istifadə etdik

  6. Meyvənin qarşısında yerə rəngli lent/rəngli kağızdan nazik zolaq qoyun

Addım 4: Kod yazmaq

Bağda gəzmək

Çarpma Sensorlarından istifadə edərək: Proqramı işə salmaq üçün, kod pozulana qədər müxtəlif if ifadələrini döngə verən bir zaman ifadəsinə yerləşdiririk. Tamponlardan hər hansı biri vurulursa, bu, onların dəyərinin doğruya bərabər olması ilə nəticələnəcək (Boolean dilində 1 -dir). If ifadəsi, dəyərlərindən biri 1 -ə bərabər olduqda kodu pozmaq üçün istifadə olunur.

Cliff Sensorlarından İstifadə: Bu vaxt ifadəsində, Roomba'nın bir bitkinin yerinə gəldiyini bildirmək üçün if ifadəsindən istifadə edirik. Roomba, uçurum sensorlarının götürdüyü qırmızı eşikini araşdıraraq, yerdəki rəngli lenti aşkarlayır. Sol və ya sağ uçurum sensoru yerdən daha böyük bir eşik olan bir rəng algılarsa, robotu 2 saniyə dayandıracaq (fasilə əmrindən istifadə edərək). Bu 2 saniyə ərzində Roomba meyvənin şəklini çəkəcək və göstərəcək. Komanda ilə qurulmuş imfindcircles istifadə edərək, dairələrinizin radiusu üçün bir sıra seçin və Roomba sözdə meyvənizi tapacaq.

Şəkil İşlənməsindən istifadə: if ifadəsinin içərisində başqa bir if ifadəsi yerləşdiririk: əgər aşkar edilmiş radius radius3, yetişmiş meyvənin minimum tələbimizdən böyükdürsə və ya ona bərabərdirsə, r1 (buna siz qərar verirsiniz), sonra sayın və göstərin Roomba nə qədər meyvə hazırdır və bağçada davam etmək üçün açılır. Əks təqdirdə növbə bağçada davam edir. Qeyd: Hər Roomba fərqli olduğu üçün döndüyünüz bucağı tənzimləməyiniz lazım ola bilər

İşıq Bamperlərindən istifadə: Başqa bir if ifadəsində, işıq tamponlarının heç birinin müəyyən edilmiş həddimizdən artıq olmamasına əmin olmaq üçün analiz edilir. Sol, sağ, sol mərkəz, sağ mərkəz, sol ön və ya sağ ön işıq tamponu eşikin üstündən keçərsə, Roomba divara dəyməmək üçün uyğun bucaqda bir qədər dönəcəkdir. Beləliklə, labirentdə gəzmək.

Kodun qalan hissəsi, Roombanın keçdiyi yolu qurmaq və sonra nəticələri e -poçtunuza göndərmək üçün istifadə olunur

Addım 5: Kodu kopyalayın

Məqsəd: Ölçülərinə əsasən, roomba bir bağdan keçəcək və götürülməyə hazır olan tərəvəzləri/meyvələri ayıracaq. Girişlər: Lightbump sensorlar, Cliff sensorlar, Bump sensorlar, kameradan görüntü Çıxışlar: İşıq sensorlar eşikdən daha böyük olduqda, roomba dönəcək və bir şəkil çəkəcək, əgər tərəvəz/meyvənin radiusu müəyyən bir aralığındadırsa. Roomba bir obyektə girəndə kod pozulur, astronavta neçə meyvənin hazır olması barədə bir e -poçt göndərir və otaq hərəkətinin xəritəsini yaradır. İstifadə: Əgər və ifadələr, əmrlər, MATLAB -dan e -poçt kodu

k = 0

tik

timerVal = tic

doğru olarkən

v =.2; % sürət r.setDriveVelocity (v, v);% roomba irəli getmək L = r.getLightBumpers; LC = L. Sol Mərkəz; Rr = L. sağ; Lf = L. sol; RC = L. sağ mərkəz; LF = L.leftFront; RF = L.rightFront; Q = 75; % eşik. RTH = 30; Yüksək qırmızı eşik RTL = 10; %Aşağı qırmızı eşik B = r.getBampers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; əgər S.leftFront> PL1 || S.rightFront> PL1 %, yerdəki rəngin eşikdən yuxarı olub olmadığını algılar. Durdur duraklama (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % 2 saniyə fasilə img = r.getImage; %image imshow (img)%ekran görüntüsü [mərkəzlər3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'qaranlıq', 'Həssaslıq', 0.9); h = viscircles (mərkəzlər3, radius3); radii3> = r1 T = 1 k = k+1 dist1 = 0.2 olarsa, görüntünün müəyyən aralığında olan radius dairələrini axtarın.*keçən zaman %Əgər aşkar olunan radius yetişmiş meyvənin minimum %tələbindən çox və ya bərabərdirsə, sonra Roomba bu meyvəni sayar elseif radii3 <= r3 T = 0 başqa T = 0 dist2 = 0.2.

əgər T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Bir meyvə aşkar edilərsə, nömrəni Roombada göstər, %səs çıxar və dön elseif T == 2 r.turnAngle (78) %2 meyvə aşkar edilərsə, %bağçası boyunca davam etmək üçün dönün başqa r.turnAngle (78) %Heç bir meyvə aşkar edilmirsə, %bağ sonu boyunca davam etmək üçün dönün. əgər LC> Q r.stop r.turnAngle (-7) başqa RC> Q r.stop r.turnAngle (7) başqa LF> Q r.stop r.turnAngle (-7) başqa RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end %İşıq tamponlarının dəyərlərindən biri eşikdən yuxarı çıxırsa, Roomba % %divara dəyməməsi üçün uyğun istiqamətə bir az dönəcək

əgər B.right == 1 || B. sol == 1 || B.front == 1 dist3 = 0.2.*Keçən Zaman r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) % bumbers vurulur, sonra roomba səs çalır, ətrafında fırlanır, %və kodu pozur

sonu qırmaq

son səpələnmə (0.533, 0, '^') səpələnməni (0.533, dist1, '<') səpələnməni (-dist2, dist1, 'v') saxlamanı (-dist2, 0, 'd') saxla (gcf, 'Movement.png')

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

setpref ('İnternet', 'E_mail', poçt); setpref ('İnternet', 'SMTP_Server', host) rekvizitləri = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', poçt); props.setProperty ('mail.smtp.host', host); props.setProperty ('mail.smtp.port', liman); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'doğru'); props.setProperty ('mail.smtp.auth', 'doğru'); props.setProperty ('mail.smtp.socketFactory.port', liman); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'yalan'); sendmail (poçt, 'Salam Astronavt! Bağda bu qədər meyvə var', kmsg, {'motion.png'})

Tövsiyə: