Indholdsfortegnelse:

Havehjælper Roomba Bot: 8 trin
Havehjælper Roomba Bot: 8 trin

Video: Havehjælper Roomba Bot: 8 trin

Video: Havehjælper Roomba Bot: 8 trin
Video: Vera den effektive havehjælper 2024, November
Anonim
Havehjælper Roomba Bot
Havehjælper Roomba Bot

Kiara Myers, Ahmad Alghadeer og Madison Tippet

Formål:

Denne instruktive vil lære dig, hvordan du programmerer en Roomba Bot ved hjælp af MATLAB til at navigere gennem en have og opdage cirkulære frugter/grøntsager, der er modne nok til at blive plukket baseret på deres størrelse. Denne robot sender dig også en e -mail, der advarer dig om, hvor mange frugter, der er klar til at blive plukket, og den vej, den kørte i.

Funktioner:

  • Bruger lyssensorer til at registrere vægge og dreje let for at undgå at ramme dem
  • Bruger bump sensorer for at bryde programmet, når det rammer klippen for enden af haven
  • Bruger billedbehandling til at registrere en cirkel i haven og derefter bestemme dens radius
  • Bruger klippesensorer til at registrere et farvet tape, der angiver tilstedeværelsen af en frugt

Trin 1: Materialer og forsyninger:

  • En bærbar computer
  • MATLAB 2017
  • Roomba Vaccum Cleaner
  • Hindbær Pi
  • Træblokke
  • Hvidt papir
  • Sort papir
  • Farvet tape/tynd strimmel farvet papir
  • Stor sten

Trin 2:

Trin 3: Montering af din "have"

Montering af din
Montering af din
  1. Tag dit sorte papir og skær cirkler i forskellige størrelser
  2. Tape disse sorte cirkler på et stort hvidt papir

    Denne kontrast vil være nødvendig, når man påviser en frugt

  3. Brug dine træblokke til at konstruere en labyrintlignende havesti, som din robot kan navigere i

    Vi valgte en U-formet sti som vist på billedet ovenfor

  4. For enden af din have tilføj en sten eller dør eller et andet objekt, så din robot kan vide, at den er færdig
  5. Tape dit hvide papir med cirklen på havens vægge

    Vi brugte spande til at tape den på, fordi vores vægge var for korte til kameraet

  6. Læg farvet tape/tynd strimmel farvet papir på jorden foran frugten

Trin 4: Skrivning af koden

Navigering i haven

Brug af stødsensorer: For at køre programmet placerer vi kodningen i en while -sætning, der går igennem forskellige if -sætninger, indtil koden er brudt. Hvis nogen af kofangerne bliver ramt, vil det resultere i, at deres værdi er sand (som i boolsk er en værdi på 1). En if -sætning bruges til at bryde koden, når en af deres værdier er lig med 1.

Brug af klippesensorer: Inden for udsagn fra while bruger vi en if -sætning til at fortælle Roomba, hvornår den er ankommet til placeringen af et anlæg. Roomba registrerer det farvede tape på gulvet ved at undersøge den tærskel for rødt, som klippesensorerne opfanger. Hvis venstre eller højre klippesensor registrerer en farve med en større tærskel end jordens, stopper den robotten i 2 sekunder (ved hjælp af pausekommando). I løbet af disse 2 sekunder vil Roomba tage og vise et billede af frugten. Brug den indbyggede kommando imfindcircles til at indstille et område for dine cirkels radier, og din Roomba finder din såkaldte frugt.

Brug af billedbehandling: I if -sætningen integrerer vi en anden if -sætning, der siger: hvis radius detekteret, radii3, er større end eller lig med vores minimumskrav til en moden frugt, r1 (du bestemmer dette), tæl derefter og vis på Roomba hvor mange frugter er klar og vender for at fortsætte gennem haven. Hvis ikke, skal turen fortsætte gennem haven. Bemærk: du skal muligvis justere den vinkel, du drejer, fordi hver Roomba er forskellig

Brug af lysstøddæmpere: I en anden if -erklæring analyseres lysstøddæmperne for at være sikker på, at ingen af dem bliver større end vores bestemte tærskel. Hvis enten venstre, højre, venstre center, højre center, venstre front eller højre forlygte kofanger går over tærsklen, så vil Roomba dreje lidt i den passende vinkel for at undgå at ramme en væg. Derfor navigerer du i labyrinten.

Resten af koden bruges til at plotte den sti, Roomba har taget, og derefter sende resultaterne til din e -mail

Trin 5: Kopier koden

% Formål: Baseret på deres størrelser vil roomba gå gennem en have og skelne grøntsager/frugter, der er klar til at blive hentet. % Indgange: Lightbump -sensorer, Cliff -sensorer, Bump -sensorer, billede fra kamera % Outputs: Når lyssensorer er større end tærsklen, drejer roomba og tager et billede, bipper, hvis radius af % grøntsager/frugter er mellem et bestemt område. Koden bryder, når roomba støder ind i % et objekt, sender astronauten en e -mail om, hvor mange frugter der er klar til at blive afhentet og en kortlægning af roombas bevægelse. % Anvendelse: Hvis og mens udsagn, plotte kommandoer, e -mail kode fra MATLAB

k = 0

tic

timerVal = tic

mens det er sandt

v =.2; % velocity r.setDriveVelocity (v, v);% roomba gå frem L = r.getLightBumpers; LC = L. venstre center; Rr = L. højre; Lf = L. venstre; RC = L.rightCenter; LF = L. venstreFront; RF = L.rightFront; Q = 75; % Grænseværdi. RTH = 30; %Høj rød tærskel RTL = 10; %Lav rød tærskel B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; hvis S.leftFront> PL1 || S.rightFront> PL1 % registrerer, om farven på jorden er over tærsklen r. Stop pause (2) forløbetTid = toc (timerVal-2) tic timerVal = tic % pause i 2 sekunder img = r.getImage; %tag billede imshow (img)%vis billede [centre3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = cirkler (centre3, radius3); %kig efter cirkler med radier m/i angivet område i billedet, hvis radii3> = r1 T = 1 k = k+1 dist1 = 0,2.*forløbet Tid %Hvis radius detekteret er større end eller lig med minimum %-kravet for en moden frugt, så tæller Roomba denne frugt elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2.*elapsedTime %Hvis ikke, tæller den ikke frugtenden

hvis T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.turnAngle (78) %Hvis der blev registreret en frugt, skal du vise nummeret på Roomba, %lave en støj og dreje elseif T == 2 r.turnAngle (78) %Hvis der registreres 2 frugter, skal du dreje for at fortsætte gennem %garden ellers r.turnAngle (78) %Hvis der ikke registreres nogen frugt, skal du dreje for at fortsætte gennem %haveenden hvis 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 %Hvis nogen af lysstødfangerens værdier går over tærsklen, så %Roomba vil dreje lidt i den rigtige retning for at undgå at %rammer en væg

hvis B.right == 1 || B. venstre == 1 || B.front == 1 dist3 = 0,2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Hvis nogen af bumbers bliver ramt, derefter spiller roomba lyd, drejer rundt, %og bryder koden

pause ende

slutspredning (0,533, 0, '^') hold på spredning (0,533, dist1, '<') hold på scatter (-dist2, dist1, 'v') hold på 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', vært); 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, 'Hej Astronaut! Der er så mange frugter i haven', kmsg, {'movement.png'})

Anbefalede: