Sadržaj:

Vrtni pomagač Roomba Bot: 8 koraka
Vrtni pomagač Roomba Bot: 8 koraka

Video: Vrtni pomagač Roomba Bot: 8 koraka

Video: Vrtni pomagač Roomba Bot: 8 koraka
Video: Я вернул его домой. Немецкая овчарка по имени Дом 2024, Novembar
Anonim
Vrtni pomagač Roomba Bot
Vrtni pomagač Roomba Bot

Kiara Myers, Ahmad Alghadeer i Madison Tippet

Svrha:

Ova instrukcija će vas naučiti kako programirati Roomba Bota, koristeći MATLAB, za navigaciju kroz vrt, otkrivajući voće/povrće kružnog oblika koje je dovoljno zrelo da se može brati na osnovu njihove veličine. Ovaj robot vam također šalje e -poruku upozoravajući koliko je voća spremno za branje i put kojim je putovao.

Karakteristike:

  • Koristi svjetlosne senzore za otkrivanje zidova i blago okretanje kako bi se izbjeglo njihovo udaranje
  • Koristi senzore udara kako bi prekinuo program kada udari o stijenu na kraju vrta
  • Koristi obradu slike za otkrivanje kruga u vrtu, a zatim određuje njegov radijus
  • Koristi senzore litice za otkrivanje obojene trake koja ukazuje na prisutnost voća

Korak 1: Materijali i potrepštine:

  • Jedan laptop
  • MATLAB 2017
  • Roomba usisivač
  • Raspberry Pi
  • Drveni blokovi
  • Bijeli papir
  • Black Paper
  • Traka u boji/tanka traka obojenog papira
  • Large Rock

Korak 2:

Korak 3: Sklapanje vašeg "vrta"

Sklapanje vašeg
Sklapanje vašeg
  1. Uzmite svoj crni papir i izrežite krugove različitih veličina
  2. Zalijepite ove crne krugove na veliki bijeli papir

    Ovaj kontrast bit će potreban pri otkrivanju ploda

  3. Koristite svoje drvene blokove da izgradite vrtnu stazu nalik labirintu za kretanje vašeg robota

    Odabrali smo put u obliku slova U na gornjoj slici

  4. Na kraju vašeg vrta dodajte kamen ili vrata ili neki drugi predmet kako bi vaš robot znao da je to učinjeno
  5. Zalijepite svoj bijeli papir s krugom na zidove vrta

    Zalijepili smo ga kantama jer su nam zidovi bili prekratki za kameru

  6. Stavite obojenu traku/tanku traku obojenog papira na tlo ispred ploda

Korak 4: Pisanje koda

Kretanje po vrtu

Korištenje Bump senzora: Za pokretanje programa, kodiranje stavljamo u naredbu while koja se petlja kroz različite if naredbe dok se kôd ne pokvari. Ako je bilo koji od odbojnika pogođen, to će rezultirati njihovom vrijednošću jednakom true (što je u Booleovom značenju vrijednost 1). Naredba if koristi se za razbijanje koda kada je jedna od njihovih vrijednosti jednaka 1.

Korištenje senzora litice: U okviru naredbe while koristimo naredbu if kako bismo Roombi rekli kada je stigla na lokaciju postrojenja. Roomba otkriva obojenu traku na podu ispitivanjem praga crvene boje koji senzori litice uhvate. Ako lijevi ili desni senzor litice otkrije boju s većim pragom od tla, zaustavit će robota na 2 sekunde (pomoću naredbe pause). Tokom ove 2 sekunde, Roomba će uzeti i prikazati sliku voća. Pomoću ugrađene naredbe imfindcircles postavite raspon radijusa vaših krugova i vaša će Roomba pronaći vaše takozvano voće.

Korištenje obrade slike: U naredbu if ugrađujemo drugu if naredbu koja kaže: ako je otkriveni radijus, radii3, veći ili jednak našem minimalnom zahtjevu za zrelo voće, r1 (ovo odlučujete), tada računajte i prikažite na Roomba koliko je voća spremno i okrenite se da nastavite kroz vrt. Ako ne, skrenite na nastavak kroz vrt. Napomena: možda ćete morati prilagoditi kut okretanja jer je svaka Roomba drugačija

Korištenje svjetlosnih branika: U drugoj naredbi if, svjetlosni odbojnici se analiziraju kako bi bili sigurni da nijedan od njih ne prelazi naš utvrđeni prag. Ako lijevi, desni, lijevi centar, desni centar, prednji lijevi ili desni prednji branik svjetla pređe prag, tada će se Roomba malo okrenuti u odgovarajućem kutu kako bi izbjegla udar u zid. Dakle, kretanje labirintom.

Ostatak koda koristi se za iscrtavanje putanje koju je Roomba prešla, a zatim šalje rezultate na vašu e -poštu

Korak 5: Kopirajte kôd

% Svrha: Na osnovu svojih veličina roomba će proći kroz vrt i razlikovati povrće/voće koje je spremno za branje. % Ulaza: Lightbump senzori, Cliff senzori, Bump senzori, slika sa kamere % Izlazi: Kad god su senzori svjetla veći od praga, roomba će se okrenuti i snimiti sliku, oglasi se zvučnim signalom ako je radijus % povrća/voća između određenog raspona. Kôd se prekida kada roomba naleti na % objekt, šalje astronautu e -poruku o tome koliko je plodova spremno za % ubiranja i mapiranje kretanja roombe. % Upotreba: If i while naredbe, komande za iscrtavanje, kod e -pošte iz MATLAB -a

k = 0

tic

timerVal = tic

dok je istina

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba ide naprijed L = r.getLightBumpers; LC = L.levi centar; Rr = L.desno; Lf = L.lijevo; RC = L.desni centar; LF = L.lijevo sprijeda; RF = L. desno ispred; Q = 75; % prag. RTH = 30; %Visoki crveni prag RTL = 10; %Nizak crveni prag B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; ako je S.leftFront> PL1 || S.rightFront> PL1 % detektira je li boja na tlu iznad praga r.stop pauza (2) protekloTime = toc (timerVal-2) tic timerVal = tic % pauziranje 2 sekunde img = r.getImage; %take image imshow (img)%display image [centres3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscircles (centri3, poluprečnici3); %potražite krugove radijusa w/u navedenom rasponu na slici ako su radijusi3> = r1 T = 1 k = k+1 dist1 = 0,2.*elapsedTime %Ako je otkriveni radijus veći ili jednak minimalnom %potrebnom zrelom plodu, tada Roomba broji ovo voće ako je radijus3 <= r3 T = 0 inače T = 0 dist2 = 0.2.*elapsedTime %Ako nije, onda se ne računa kraj ploda

ako je T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Ako je otkriveno voće, tada prikažite broj na Roombi, %napravite buku i okrenite elseif T == 2 r.turnAngle (78) %Ako se otkriju 2 ploda, okrenite za nastavak kroz %garden else r.turnAngle (78) %Ako se plodovi ne otkriju, okrenite za nastavak kroz %kraja vrta if 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 %Ako bilo koja od vrijednosti svjetlosnih odbojnika pređe prag, tada %Roomba lagano će se okrenuti u odgovarajućem smjeru kako bi se izbjeglo %udara u zid

ako je B.desno == 1 || B.levo == 1 || B.front == 1 dist3 = 0.2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Ako postoji bilo koji od bambari su pogođeni, tada roomba reproducira zvuk, vrti se, %i razbija kod

break end

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

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

setpref ('Internet', 'E_mail', pošta); setpref ('Internet', 'SMTP_Server', host) rekviziti = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pošta); 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 (pošta, 'Zdravo astronaute! U vrtu ima toliko voća', kmsg, {'movement.png'})

Preporučuje se: