Talaan ng mga Nilalaman:

Garden Helper Roomba Bot: 8 Hakbang
Garden Helper Roomba Bot: 8 Hakbang

Video: Garden Helper Roomba Bot: 8 Hakbang

Video: Garden Helper Roomba Bot: 8 Hakbang
Video: Обзор: iRobot Roomba i3+: бюджетный бот с крутыми функциями 2024, Hulyo
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

Kiara Myers, Ahmad Alghadeer, at Madison Tippet

Layunin:

Ang magtuturo na ito ay magtuturo sa iyo kung paano magprogram ng isang Roomba Bot, gamit ang MATLAB, upang mag-navigate sa isang hardin, na mahahanap ang mga pabilog na hugis na prutas / gulay na hinog na sapat upang makuha batay sa kanilang laki. Nagpapadala sa iyo ang robot na ito ng isang email, binabalaan ka kung gaano karaming mga prutas ang handa na pumili at ang landas kung saan ito naglakbay.

Mga Tampok:

  • Gumagamit ng mga light sensor upang makita ang mga pader at bahagyang lumiko upang maiwasan ang pagpindot sa mga ito
  • Gumagamit ng mga sensor ng bunggo upang masira ang programa kapag tumama ito sa bato sa dulo ng hardin
  • Gumagamit ng pagproseso ng imahe upang makita ang isang bilog sa hardin at pagkatapos ay matukoy ang radius nito
  • Gumagamit ng mga cliff sensor upang makakita ng isang kulay na tape na nagsasaad ng pagkakaroon ng isang prutas

Hakbang 1: Mga Materyales at Kagamitan:

  • Isang Laptop
  • MATLAB 2017
  • Roomba Vaccum Cleaner
  • Raspberry Pi
  • Mga Bloke ng Kahoy
  • Puting papel
  • Itim na Papel
  • May kulay na tape / manipis na guhit ng may kulay na papel
  • Malaking Bato

Hakbang 2:

Hakbang 3: Pagtitipon ng Iyong "Hardin"

Pagtitipon ng Iyong
Pagtitipon ng Iyong
  1. Kunin ang iyong itim na papel at gupitin ang mga bilog ng iba't ibang laki
  2. I-tape ang mga itim na bilog sa isang malaking puting papel

    Kakailanganin ang kaibahan na ito kapag nakakita ng isang prutas

  3. Gamitin ang iyong mga woodblocks upang makabuo ng mala-hardin na landas sa hardin para makapag-navigate ang iyong robot

    Pumili kami ng isang hugis-U na landas tulad ng nakalarawan sa itaas

  4. Sa dulo ng iyong hardin magdagdag ng isang bato o pintuan o ibang bagay para malaman ng iyong robot na tapos na ito
  5. I-tape ang iyong puting papel na may bilog papunta sa mga dingding ng hardin

    Gumamit kami ng mga balde upang i-tape ito dahil ang aming mga dingding ay masyadong maikli para sa camera

  6. Ilagay ang may kulay na tape / manipis na guhit ng kulay na papel sa lupa sa harap ng prutas

Hakbang 4: Pagsulat ng Code

Pagna-navigate sa Hardin

Paggamit ng Mga Bump Sensor: Upang patakbuhin ang programa, inilalagay namin ang pag-coding sa isang habang pahayag na umikot sa iba't ibang kung mga pahayag hanggang sa masira ang code. Kung ang alinman sa mga bumper ay na-hit, magreresulta ito sa kanilang halaga na katumbas ng totoo (na sa Boolean ay isang halaga ng 1). Ginagamit ang isang if statement upang masira ang code kapag ang isa sa kanilang mga halaga ay katumbas ng 1.

Paggamit ng Mga Cliff Sensor: Sa loob ng pahayag na pansamantala, gumagamit kami ng isang pahayag kung sasabihin sa Roomba pagdating sa lokasyon ng isang halaman. Nakita ng Roomba ang may kulay na tape sa sahig sa pamamagitan ng pagsusuri sa threshold ng pula na kukunin ng mga sensor ng bangin. Kung ang kaliwa o kanang cliff sensor ay nakakita ng isang kulay na may mas malaking threshold kaysa sa lupa, ititigil nito ang robot sa loob ng 2 segundo (gamit ang pause command). Sa loob ng 2 segundo na ito, kukuha at magpapakita ang Roomba ng isang imahe ng prutas. Gamit ang mga imfindcircle na built in na utos, magtakda ng isang saklaw para sa radii ng iyong mga lupon, at mahahanap ng iyong Roomba ang iyong tinaguriang prutas.

Paggamit ng Pagproseso ng Imahe: Sa loob ng pahayag kung, maglalagay kami ng isa pa kung pahayag na nagsasabing: kung nakita ang radius, ang radii3, ay mas malaki kaysa o katumbas ng aming minimum na kinakailangan ng isang hinog na prutas, r1 (magpasya ka dito), pagkatapos ay bilangin at ipakita sa ang Roomba kung gaano karaming mga prutas ang handa at lumiko upang magpatuloy sa hardin. Kung hindi, ang pagliko upang magpatuloy sa hardin. Tandaan: maaaring kailanganin mong ayusin ang anggulo na iyong babaling sapagkat ang bawat Roomba ay magkakaiba

Paggamit ng Light Bumpers: Sa isa pang pahayag, ang mga light bumper ay sinusuri upang matiyak na wala sa kanila ang magiging mas malaki kaysa sa aming tinukoy na threshold. Kung alinman sa kaliwa, kanan, kaliwang gitna, kanang gitna, kaliwang harap, o kanang front light bumper ay napupunta sa itaas ng threshold, pagkatapos ang Roomba ay bahagyang lumiliko sa naaangkop na anggulo upang maiwasan ang pagpindot sa isang pader. Samakatuwid, pag-navigate sa maze.

Ang natitirang code ay ginagamit upang magbalak ng landas na tinahak ng Roomba at pagkatapos ay ipadala ang mga resulta sa iyong email

Hakbang 5: Kopyahin ang Code

% Layunin: Batay sa kanilang laki ang roomba ay dumaan sa isang hardin at makikilala ang mga gulay / prutas na handa nang kunin. % Input: Lightbump sensors, Cliff sensors, Bump sensors, imahe mula sa camera% Mga Output: Sa tuwing ang mga light sensor ay mas malaki kaysa sa threshold ang roomba ay liliko at kukuha ng isang imahe, beep kung ang radius ng% gulay / prutas ay nasa pagitan ng isang tukoy na saklaw. Masisira ang code kapag ang roomba ay nabunggo sa% isang bagay, nagpapadala sa astronaut ng isang email tungkol sa kung gaano karaming mga prutas ang handa nang makuha at isang pagmamapa ng paggalaw ng roomba. % Paggamit: Kung at habang ang mga pahayag, paglalagay ng mga utos, email code mula sa MATLAB

k = 0

tic

timerVal = tic

habang totoo

v =.2; % tulin r.setDriveVelocity (v, v);% roomba magpatuloy L = r.getLightBumpers; LC = L.leftCenter; Rr = L. tama; Lf = L. kaliwa; RC = L. RightCenter; LF = L.leftFront; RF = L. RightFront; Q = 75; % threshold. RTH = 30; % Mataas na pulang threshold RTL = 10; % Mababang pulang threshold B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; kung S.leftFront> PL1 || S. RightFront> Nakita ng PL1% kung ang kulay sa lupa ay nasa itaas ng threshold r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pause for 2 segundo img = r.getImage; % kumuha ng imshow ng imahe (img)% display image [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscircles (center3, radii3); % hanapin ang mga bilog ng radii w / sa tinukoy na saklaw ng imahe kung radii3> = r1 T = 1 k = k + 1 dist1 = 0.2. * lumipasTime% Kung nakita ang radius ay mas malaki kaysa o katumbas ng minimum na% na kinakailangan ng isang hinog na prutas, pagkatapos ay binibilang ng Roomba ang prutas na ito kung hindi radii3 <= r3 T = 0 pa T = 0 dist2 = 0.2. * elapsedTime% Kung hindi, kung gayon hindi ito bibilangin ang bunga ng bunga

kung T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Kung ang isang prutas ay napansin, pagkatapos ay ipakita ang numero sa Roomba,% gumawa ng isang ingay, at i-on kung hindi T == 2 r.turnAngle (78)% Kung ang 2 prutas ay nakita, pagkatapos ay i-on upang magpatuloy sa pamamagitan ng% hardin pa r.turnAngle (78)% Kung walang mga prutas na napansin, pagkatapos ay i-on upang magpatuloy sa% dulo ng hardin kung LC> Q r.stop r.turnAngle (-7) kung iba pa RC> Q r.stop r.turnAngle (7) kung hindi LF> Q r.stop r.turnAngle (-7) kung hindi RF> Q r.stop r. turnAngle (7) ifif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end% Kung ang alinman sa mga halaga ng light bumpers ay napupunta sa itaas ng threshold, pagkatapos% ang Roomba bahagyang liliko sa naaangkop na direksyon upang maiwasan ang% pagpindot sa isang pader

kung B. tama == 1 || B.kaliwang == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Kung alinman sa Ang mga bumber ay na-hit, pagkatapos ay tumugtog ang roomba ng tunog, umiikot,% at binabasag ang code

break end

tapusin ang pagkalat (0.533, 0, '^') hawakan ang pagkalat (0.533, dist1, '<') hawakan ang pagkalat (-dist2, dist1, 'v') hawakan ang mga pagsabog (-dist2, 0, 'd') saveas (gcf, 'Kilusan.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', host); props.setProperty ('mail.smtp.port', port); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'totoo'); props.setProperty ('mail.smtp.auth', 'totoo'); 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 Astronaut! Maraming mga prutas na ito sa hardin', kmsg, {'movement.png'})

Inirerekumendang: