Tartalomjegyzék:

Kerti segítő Roomba Bot: 8 lépés
Kerti segítő Roomba Bot: 8 lépés

Videó: Kerti segítő Roomba Bot: 8 lépés

Videó: Kerti segítő Roomba Bot: 8 lépés
Videó: Felsőjózsán igényes villa és családi ház egy telken eladó. 2024, Július
Anonim
Kerti segítő Roomba Bot
Kerti segítő Roomba Bot

Kiara Myers, Ahmad Alghadeer és Madison Tippet

Célja:

Ez az utasítás megtanítja, hogyan programozhat egy Roomba Bot programot a MATLAB segítségével a kertben való navigáláshoz, felismerve a kör alakú gyümölcsöket/zöldségeket, amelyek érettek ahhoz, hogy méretük alapján szedni lehessen. Ez a robot e -mailt is küld Önnek, amely figyelmezteti Önt, hogy hány gyümölcsöt lehet szedni, és milyen útvonalon haladt.

Jellemzők:

  • Fényérzékelőkkel érzékeli a falakat, és enyhén elfordul, hogy ne ütközzenek rájuk
  • Ütésérzékelőket használ, hogy megtörje a programot, amikor a kert végén lévő kőzetbe ütközik
  • Képfeldolgozással felismer egy kört a kertben, majd meghatározza annak sugarát
  • Sziklaérzékelőket használ egy színes szalag észlelésére, amely egy gyümölcs jelenlétét jelzi

1. lépés: Anyagok és kellékek:

  • Egy Laptop
  • MATLAB 2017
  • Roomba porszívótisztító
  • Raspberry Pi
  • Fakockák
  • Fehér papír
  • Fekete papír
  • Színes szalag/vékony színes papírcsík
  • Nagy szikla

2. lépés:

Lépés: A "kert" összeszerelése

Összeszerelés
Összeszerelés
  1. Vegye elő a fekete papírt, és vágjon különböző méretű köröket
  2. Ragassza ezeket a fekete köröket egy nagy fehér papírra

    Ez a kontraszt szükséges a gyümölcs észlelésekor

  3. A fafalakkal építsen útvesztőhöz hasonló kerti utat a robot számára a navigáláshoz

    U alakú utat választottunk, ahogy a fenti képen látható

  4. A kert végén adjon hozzá egy sziklát vagy ajtót vagy más tárgyat, hogy a robot tudja, hogy kész
  5. Ragassza fel fehér papírját a körrel a kert falaira

    Vödrökkel ragasztottuk, mert falaink túl rövidek voltak a kamerához

  6. Tegyen színes szalagot/vékony színes papírcsíkot a földre a gyümölcs elé

4. lépés: A kód írása

Navigálás a kertben

Ütközésérzékelők használata: A program futtatásához a kódolást egy while utasításba helyezzük, amely a különböző if utasítások között végigmegy, amíg a kód meg nem törik. Ha bármelyik ütközőt eltalálják, akkor az értéke egyenlő lesz a valódi értékkel (ami Boole -ban 1. Az if utasítást a kód feltörésére használják, ha egyik értékük 1.

Cliff -érzékelők használata: A while utasításon belül if utasítással közöljük a Roomba -val, hogy mikor érkezett meg az üzem helyére. A Roomba felismeri a padlón lévő színes szalagot, ha megvizsgálja a vörös küszöböt, amelyet a sziklaérzékelők felvesznek. Ha a bal vagy jobb sziklaérzékelő olyan színt észlel, amelynek a küszöbértéke nagyobb, mint a talajé, akkor 2 másodpercre leállítja a robotot (a szünet parancs használatával). Ez alatt a 2 másodperc alatt a Roomba felveszi és megjeleníti a gyümölcs képét. A beépített parancs segítségével állítsa be a körök sugarának tartományát, és a Roomba megtalálja az úgynevezett gyümölcsét.

Képfeldolgozás használata: Az if utasításon belül beágyazunk egy másik if állítást, amely azt mondja: ha az észlelt sugár, a sugarak3 nagyobb vagy egyenlő az érett gyümölcs r1 minimális követelményével (ezt Ön dönti el), akkor számolja és jelenítse meg a Roomba mennyi gyümölcsöt készen áll, és megfordul, hogy továbbhaladjon a kertben. Ha nem, akkor forduljon tovább a kertben. Megjegyzés: előfordulhat, hogy módosítania kell a dőlésszöget, mivel minden Roomba más

Fénylökhárítók használata: Egy másik if állításban a lökhárítókat elemzik annak biztosítására, hogy egyikük sem lesz nagyobb a meghatározott küszöbértéknél. Ha a bal, a jobb, a bal középső, a jobb középső, a bal első vagy a jobb első lökhárító átlépi a küszöböt, akkor a Roomba kissé elfordul a megfelelő szögben, nehogy falba ütközzön. Ezért a labirintusban való navigálás.

A többi kódot a Roomba által megtett útvonal ábrázolására használjuk, majd az eredményeket elküldjük az e -mail címére

Lépés: Másolja ki a kódot

% Cél: Méretük alapján a roomba átmegy egy kerten, és megkülönbözteti a felszedésre kész zöldségeket/gyümölcsöket. % Bemenetek: Lightbump érzékelők, Cliff szenzorok, ütésérzékelők, kép a kamerából % Kimenetek: Amikor a fényérzékelők meghaladják a küszöböt, a roomba elfordul, és képet készít, sípol, ha % zöldség/gyümölcs sugara egy meghatározott tartomány között van. A kód megszakad, amikor a Roomba % objektumba ütközik, e -mailt küld az űrhajósnak arról, hogy hány gyümölcsöt lehet készen venni, és feltérképezi a roomba mozgását. % Használat: Ha és közben utasításokat, parancsokat ábrázol, e -mail kódot a MATLAB -tól

k = 0

tic

timerVal = tic

míg igaz

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba megy előre L = r.getLightBumpers; LC = L.balközpont; Rr = L.jobb; Lf = L.bal; RC = L.jobbközpont; LF = L.baloldal; RF = L.jobbFront; Q = 75; % küszöb. RTH = 30; %Magas piros küszöb RTL = 10; %Alacsony piros küszöb B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; ha S.leftFront> PL1 || Az S.rightFront> PL1 % észleli, hogy a talaj színe meghaladja-e a küszöbértéket r. Stop szünet (2) eltelt Idő = toc (timerVal-2) tic timerVal = tic % szünet 2 másodpercig img = r.getImage; %képfelvétel imshow (img)%display image [cent3, radius3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscircles (cent3, sugar 3); %keressen sugarakat a megadott tartományban a képen, ha sugarak3> = r1 T = 1 k = k+1 dist1 = 0,2.*eltelt idő, akkor a Roomba számolja ezt a gyümölcsöt, ha a sugarak3 <= r3 T = 0 else T = 0 dist2 = 0.2.*eltelt idő %Ha nem, akkor nem számolja a gyümölcs végét

ha T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Ha gyümölcsöt észlelt, akkor jelenítse meg a számot a Roomba -n, %zajt adjon és forduljon elseif T == 2 r.turnAngle (78) %Ha 2 gyümölcsöt észlel, akkor forduljon a folytatáshoz a %kertben else r.turnAngle (78) %Ha nem észlel gyümölcsöt, akkor forduljon a folytatáshoz a %kert végén ha 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 %Ha a lökhárítók bármely értéke meghaladja a küszöbértéket, akkor %a Roomba kissé elfordul a megfelelő irányba, nehogy %falba ütközzön

ha B.jobb == 1 || B.bal == 1 || B. front == 1 dist3 = 0.2.*Eltelt idő r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Ha a bumereket ütnek, majd a roomba hangot játszik, körbeforog, %és megtöri a kódot

szünet vége

end scatter (0.533, 0, '^') hold scatter (0.533, dist1, '<') hold scatter (-dist2, dist1, 'v') hold scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

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

setpref ('Internet', 'E_mail', mail); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', gazdagép); 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, 'Hello asztronauta! Ennyi gyümölcs van a kertben', kmsg, {'motion.png'})

Ajánlott: