Innehållsförteckning:

Trädgårdshjälpare Roomba Bot: 8 steg
Trädgårdshjälpare Roomba Bot: 8 steg

Video: Trädgårdshjälpare Roomba Bot: 8 steg

Video: Trädgårdshjälpare Roomba Bot: 8 steg
Video: Kosmisk Kärlek Spice | KLÖVA | Syzygium aromaticum 2024, November
Anonim
Trädgårdshjälpare Roomba Bot
Trädgårdshjälpare Roomba Bot

Kiara Myers, Ahmad Alghadeer och Madison Tippet

Ändamål:

Den här instruerbara lär dig hur du programmerar en Roomba Bot med MATLAB för att navigera genom en trädgård och upptäcka cirkulär formade frukter/grönsaker som är mogna nog att plockas baserat på deras storlek. Den här roboten skickar dig också ett e -postmeddelande som varnar dig för hur många frukter som är redo att plockas och på vilken väg den gick.

Funktioner:

  • Använder ljussensorer för att upptäcka väggar och svänga något för att undvika att träffa dem
  • Använder stötsensorer för att bryta programmet när det träffar berget i slutet av trädgården
  • Använder bildbehandling för att upptäcka en cirkel i trädgården och sedan bestämma dess radie
  • Använder klippsensorer för att upptäcka en färgad tejp som indikerar närvaron av en frukt

Steg 1: Material och tillbehör:

  • En bärbar dator
  • MATLAB 2017
  • Roomba Vaccum Cleaner
  • Raspberry Pi
  • Träblock
  • Vitt papper
  • Svart papper
  • Färgad tejp/tunn remsa av färgat papper
  • Stor sten

Steg 2:

Steg 3: Montera din "trädgård"

Montering av din
Montering av din
  1. Ta ditt svarta papper och skär cirklar i olika storlekar
  2. Tejpa dessa svarta cirklar på ett stort vitt papper

    Denna kontrast kommer att vara nödvändig när man upptäcker en frukt

  3. Använd dina träklossar för att bygga en labyrintliknande trädgårdsväg för din robot att navigera

    Vi valde en U-formad väg som bilden ovan

  4. Lägg till en sten eller dörr eller ett annat föremål i slutet av din trädgård för att din robot ska veta att den är klar
  5. Tejpa ditt vita papper med cirkeln på väggarna i trädgården

    Vi använde hinkar för att tejpa fast den eftersom våra väggar var för korta för kameran

  6. Lägg färgad tejp/tunn remsa av färgat papper på marken framför frukten

Steg 4: Skriva koden

Navigera i trädgården

Använda stötsensorer: För att köra programmet lägger vi kodningen i en stund -sats som går igenom olika if -satser tills koden bryts. Om någon av stötfångarna träffas kommer det att resultera i att deras värde är lika med sant (vilket i booleskt är ett värde på 1). En if -sats används för att bryta koden när ett av deras värden är 1.

Använda Cliff Sensors: Inom while -uttalandet använder vi ett if -uttalande för att berätta för Roomba när det har kommit till platsen för en anläggning. Roomba upptäcker den färgade tejpen på golvet genom att undersöka tröskeln för rött som klippsensorerna tar upp. Om den vänstra eller högra klippsensorn detekterar en färg med ett högre tröskelvärde än markens, stoppar den roboten i 2 sekunder (med pauskommando). Under dessa 2 sekunder tar Roomba och visar en bild av frukten. Med hjälp av kommandot imfindcircles, ställ in ett intervall för dina cirkels radier, och din Roomba hittar din så kallade frukt.

Använda bildbehandling: Inom if -satsen bäddar vi in en annan if -sats som säger: om radien detekteras, radii3, är större än eller lika med vårt minimikrav på en mogen frukt, r1 (du bestämmer detta), räkna sedan och visa på Roomba hur många frukter som är klara och vänder för att fortsätta genom trädgården. Om inte, tur att fortsätta genom trädgården. Obs! Du kan behöva justera vinkeln som du vrider eftersom varje Roomba är olika

Använda ljusstötfångare: I ett annat if -uttalande analyseras ljusstötfångarna för att vara säker på att ingen av dem blir större än vår bestämda tröskel. Om antingen vänster, höger, vänster mitt, höger mitt, vänster fram eller höger främre stötfångare går över tröskeln, kommer Roomba att svänga något i lämplig vinkel för att undvika att träffa en vägg. Därför navigerar du i labyrinten.

Resten av koden används för att plotta den väg som Roomba tagit och sedan skicka resultaten till din e -post

Steg 5: Kopiera koden

% Syfte: Baserat på deras storlekar kommer roomba att gå igenom en trädgård och skilja grönsaker/frukter som är redo att plockas upp. % Ingångar: Lightbump -sensorer, Cliff -sensorer, Bump -sensorer, bild från kameran % Outputs: När ljussensorerna är större än tröskeln kommer roomba att vända och ta en bild, pip om radien för % grönsaker/frukt ligger mellan ett specifikt intervall. Koden går sönder när roomba stöter på % ett objekt, skickar astronauten ett mejl om hur många frukter som är redo att hämtas % och en kartläggning av roombas rörelse. % Användning: Om och medan uttalanden, plottningskommandon, e -postkod från MATLAB

k = 0

tic

timerVal = tic

medan det är sant

v =.2; % velocity r.setDriveVelocity (v, v);% roomba gå framåt L = r.getLightBumpers; LC = L. leftCenter; Rr = L. rätt; Lf = L. vänster; RC = L.rightCenter; LF = L. leftFront; RF = L.rightFront; Q = 75; % tröskel. RTH = 30; %Hög röd tröskel RTL = 10; %Låg röd tröskel B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; om S.leftFront> PL1 || S.rightFront> PL1 % upptäcker om färgen på marken är över tröskelvärdet r.stoppaus (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % paus i 2 sekunder img = r.getImage; %ta bild imshow (img)%visa bild [centers3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscirkler (centra3, radii3); %leta efter cirklar av radier w/inom angivet intervall i bilden om radii3> = r1 T = 1 k = k+1 dist1 = 0,2.*förfluten tid %Om radie detekteras är större än eller lika med minimikravet på %av en mogen frukt, då räknar Roomba denna frukt annars om radii3 <= r3 T = 0 annars T = 0 dist2 = 0,2.*elapsedTime %Om inte, räknas inte fruktänden

om T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.turnAngle (78) %Om en frukt detekterades, visa numret på Roomba, %gör ett ljud och vrid elseif T == 2 r.turnAngle (78) %Om 2 frukter detekteras, vänd sedan för att fortsätta genom %garden annars r.turnAngle (78) %Om inga frukter detekteras, vrid sedan för att fortsätta genom %garden end end om 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 %Om någon av ljusstötfångarnas värden går över tröskeln, då %Roomba kommer att svänga något i rätt riktning för att undvika att %träffar en vägg

om B.right == 1 || B.vänster == 1 || B.front == 1 dist3 = 0,2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Om någon av bumbers träffas, sedan spelar roomba ljud, snurrar runt, %och bryter koden

bryta slutet

slutspridning (0,533, 0, '^') håll på spridning (0,533, dist1, '<') håll kvar på spridning (-dist2, dist1, 'v') håll kvar 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', e -post); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', värd); 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! Det finns så många frukter i trädgården", kmsg, {'movement.png'})

Rekommenderad: