Sisukord:

Aiaabiline Roomba Bot: 8 sammu
Aiaabiline Roomba Bot: 8 sammu

Video: Aiaabiline Roomba Bot: 8 sammu

Video: Aiaabiline Roomba Bot: 8 sammu
Video: Голубая стрела (1958) фильм 2024, Juuli
Anonim
Aiaabiline Roomba Bot
Aiaabiline Roomba Bot

Kiara Myers, Ahmad Alghadeer ja Madison Tippet

Eesmärk:

See juhend õpetab teile, kuidas programmeerida Roomba Bot MATLAB-i abil aias navigeerimiseks, tuvastades ringikujulised puuviljad/köögiviljad, mis on piisavalt küpsed, et neid nende suuruse järgi korjata. See robot saadab teile ka meili, hoiatades teid, kui palju puuvilju on valmis korjama ja millisel teel see kulges.

Funktsioonid:

  • Kasutab valgusandureid seinte tuvastamiseks ja kergeks pööramiseks, et vältida nende löömist
  • Kasutab põrkumisandureid, et katkestada programm, kui see tabab aia otsas asuvat kivi
  • Kasutab pilditöötlust, et tuvastada ring aias ja seejärel määrata selle raadius
  • Kasutab kaljuandureid, et tuvastada värviline lint, mis näitab vilja olemasolu

Samm: materjalid ja tarvikud:

  • Üks sülearvuti
  • MATLAB 2017
  • Roomba tolmuimeja
  • Vaarika Pi
  • Puitklotsid
  • Valge paber
  • Must paber
  • Värviline lint/õhuke riba värvilisest paberist
  • Suur kivi

2. samm:

Samm: aia kokkupanek

Teie kokkupanek
Teie kokkupanek
  1. Võtke must paber ja lõigake erineva suurusega ringid
  2. Kleepige need mustad ringid suurele valgele paberile

    See kontrast on vajalik puuviljade avastamisel

  3. Kasutage oma puitplokke, et ehitada oma robotile navigeerimiseks labürindisarnane aiatee

    Valisime U-kujulise tee, nagu ülaltoodud pildil

  4. Lisage oma aia lõppu kivi, uks või mõni muu ese, et robot saaks teada, et see on tehtud
  5. Kleepige oma valge paber ringiga aia seintele

    Teipimiseks kasutasime ämbreid, kuna meie seinad olid kaamera jaoks liiga lühikesed

  6. Pange värviline lint/õhuke värvilise paberi riba vilja ette maapinnale

Samm: koodi kirjutamine

Aias navigeerimine

Pumpamissensorite kasutamine: programmi käivitamiseks paigutame kodeeringu mõnda aega lause, mis vaatab läbi erinevaid if -avaldusi, kuni kood on katki. Kui mõni põrkeraud tabatakse, on nende väärtus võrdne tõesega (mis on Booleanis väärtus 1). Kui lauset kasutatakse koodi murdmiseks, kui üks nende väärtustest on 1.

Cliff Sensorite kasutamine: avalduse while ajal kasutame lause if, et öelda Roombale, kui see on jõudnud tehase asukohta. Roomba tuvastab põrandal oleva värvilindi, uurides punase läve, mille kaljuandurid üles võtavad. Kui vasaku või parema kaljuandur tuvastab värvi, mille lävi on suurem kui maapinnal, peatab see roboti 2 sekundiks (kasutades pausi käsku). Nende kahe sekundi jooksul võtab Roomba ette ja kuvab puuvilja pildi. Kasutades sisseehitatud käsklusi, määrake ringide raadiuste vahemik ja teie Roomba leiab teie niinimetatud vilja.

Pilditöötluse kasutamine: kui kasutame lauset if, sisestame teise if -lause, mis ütleb: kui tuvastatud raadius, raadius3, on suurem või võrdne meie küpsete puuviljade miinimumnõudega r1 (teie otsustate selle), siis loendage ja kuvage Roomba, kui palju puuvilju on valmis ja pöörduge aias jätkamiseks. Kui ei, siis pööre jätkata läbi aia. Märkus. Võimalik, et peate muutma pöördenurka, kuna iga Roomba on erinev

Kergete kaitseraudade kasutamine: teises juhul, kui väide, analüüsitakse kergeid kaitseraudasid, et olla kindel, et ükski neist ei ületa meie määratud läve. Kui vasak-, parem-, vasakpoolne keskosa, parempoolne kesk, vasakpoolne eesmine või parempoolne esitulede kaitseraud lähevad üle künnise, pöördub Roomba seina sobiva nurga all veidi sobivas nurgas. Seega labürindis navigeerimine.

Ülejäänud koodi kasutatakse Roomba valitud tee joonistamiseks ja tulemuste saatmiseks teie e -posti aadressile

Samm: kopeerige kood

Eesmärk: Roomba läbib nende suuruse põhjal aia ja eristab korjamiseks valmis köögivilju/puuvilju. % Sisendid: Lightbump andurid, Cliff andurid, Bump andurid, pilt kaamerast % Väljundid: Kui valgusandurid on üle läve, pöörab roomba ja teeb pildi, piiksub, kui % köögivilja/puuvilja raadius jääb teatud vahemikku. Kood puruneb, kui roomba põrkub % objekti, saadab astronaudile e -kirja selle kohta, kui palju puuvilju on valmis ära võtma ja roomba liikumise kaardistamiseks. % Kasutamine: Kui ja avalduste ajal, käskude joonistamine, e -posti kood MATLABist

k = 0

tic

timerVal = tic

kuigi tõsi

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba edasi L = r.getLightBumpers; LC = L. vasakpoolne keskus; Rr = L.õigus; Lf = L.vasak; RC = L. paremkeskus; LF = L. vasakpoolne; RF = L. paremal ees; Q = 75; % lävi. RTH = 30; %Kõrge punane lävi RTL = 10; %Madal punane lävi B = r.getBumpers S = r.getCliffSensors; rl = 24; r3 = 10; PL1 = 1800; kui S.leftFront> PL1 || S.rightFront> PL1 % tuvastab, kas maapinna värv ületab läve r.stop paus (2) möödunudTime = toc (timerVal-2) tic timerVal = tic % paus 2 sekundiks img = r.getImage; %pildista imshow (img)%kuva pilt [keskused3, raadius3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscircles (keskused3, raadius3); %otsige raadiust ringidega, mille raadius on määratud vahemikus, kui raadius3> = r1 T = 1 k = k+1 dist1 = 0,2.*kulunudTime %Kui tuvastatud raadius on suurem või võrdne küpse vilja minimaalse %-nõudega, siis arvestab Roomba selle vilja muud raadiused3 <= r3 T = 0 muud T = 0 dist2 = 0,2.*kulunud aeg %Kui ei, siis see ei loe vilja lõppu

kui T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Kui avastati puu, näidake numbrit Roombal, %teeb müra ja pöörab elseif T == 2 r.turnAngle (78) %Kui tuvastatakse 2 vilja, siis pöörake, et jätkata läbi %aia muust r.turnAngle (78) %Kui vilju ei tuvastata, keerake, et jätkata läbi %aiaotsa kui 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 %Kui mõni kaitseraudade väärtus ületab läve, siis %Roomba keerab veidi sobivas suunas, et vältida %seinale löömist

kui B.õigus == 1 || B.vasak == 1 || B. front == 1 dist3 = 0.2.*Kulunud aeg r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Kui mõni pommitajad saavad pihta, siis roomba mängib heli, keerutab ringi, %ja rikub koodi

murda lõpp

lõpp-hajumine (0,533, 0, '^') hoidke hajumist (0,533, dist1, '<') hoidke laiali (-dist2, dist1, 'v') hoidke hajumist (-dist2, 0, 'd') saveas (gcf, "Movement.png")

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

setpref ('Internet', 'E_mail', post); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', post); 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', 'false'); sendmail (mail, 'Tere astronaut! Aias on nii palju vilju', kmsg, {'motion.png'})

Soovitan: