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, Studeni
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 temelju njihove veličine. Ovaj robot također vam šalje e -poruku upozoravajući koliko je voća spremno za branje i put kojim je putovao.

Značajke:

  • Koristi svjetlosne senzore za otkrivanje zidova i blago okretanje kako ne bi udario u njih
  • Koristi senzore udara kako bi razbio program kada udari o stijenu na kraju vrta
  • Koristi obradu slike za otkrivanje kruga u vrtu, a zatim određivanje njegovog radijusa
  • Koristi senzore litice za otkrivanje obojene trake koja ukazuje na prisutnost voća

Korak 1: Materijali i potrepštine:

  • Jedan laptop
  • MATLAB 2017
  • Roomba usisavač
  • Malina Pi
  • Drveni blokovi
  • Bijeli papir
  • Crni papir
  • Traka u boji/tanka traka papira u boji
  • Veliki kamen

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

    Taj će kontrast biti potreban pri otkrivanju ploda

  3. Upotrijebite svoje drvene blokove za izgradnju vrtne staze 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 ponavlja kroz razne if naredbe dok se kôd ne pokvari. Ako je bilo koji od odbojnika pogođen, njihova će vrijednost biti jednaka 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: Unutar naredbe while koristimo naredbu if kako bismo Roombi rekli kada je stigla na mjesto postrojenja. Roomba detektira 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, tada će robota zaustaviti na 2 sekunde (pomoću naredbe pause). Tijekom 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 if naredbu ugrađujemo drugu if izjavu koja kaže: ako je otkriveni radijus, radii3, veći ili jednak našem minimalnom zahtjevu za zrelim plodom, r1 (vi odlučujete o ovome), tada računajte i prikažite na Roomba koliko je voća spremno i okrenite se za nastavak 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 odbojnika: U drugom iskazu if, svjetlosni odbojnici se analiziraju kako bi bili sigurni da nijedan od njih ne prelazi naš utvrđeni prag. Ako lijevi, desni, lijevi središnji, desni centar, lijevi prednji ili desni prednji odbojnik svjetla pređu 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 puta kojim je Roomba krenula, a zatim rezultate šalje na vašu e -poštu

Korak 5: Kopirajte kôd

% Svrha: Na temelju svojih veličina roomba će proći kroz vrt i razlikovati povrće/voće koje je spremno za branje. % Ulazi: Lightbump senzori, Cliff senzori, Bump senzori, slika s kamere % Outputs: Kad god su svjetlosni senzori 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 kad roomba naleti na % objekt, pošalje astronautu e -poruku o tome koliko je plodova spremno za % branje i kartiranje kretanja roombe. % Upotreba: If i while izjave, iscrtavanje naredbi, kôd e -pošte iz MATLAB -a

k = 0

tic

timerVal = tic

dok je istina

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba ići naprijed L = r.getLightBumpers; LC = L.lijevi centar; Rr = L.desno; Lf = L.lijevo; RC = L.desni centar; LF = L.lijevo sprijeda; RF = L.desno sprijeda; 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 pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % pauza 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, polumjeri3); %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 inače ako je radijus3 <= r3 T = 0 ostalo T = 0 dist2 = 0.2.*elapsedTime %Ako nije, ne računa se 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 %vrt else r.turnAngle (78) %Ako se plodovi ne otkriju, okrenite za nastavak kroz %kraja vrta ako je 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 neka 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.lijevo == 1 || B.fronte == 1 dist3 = 0.2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Ako postoji neki od bumbers su pogođeni, tada roomba reproducira zvuk, vrti se, %i razbija kod

prekid kraja

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]' lozinka = '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', 'istina'); props.setProperty ('mail.smtp.auth', 'istina'); 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čeni: