INHOUDSOPGAWE:

Garden Helper Roomba Bot: 8 stappe
Garden Helper Roomba Bot: 8 stappe

Video: Garden Helper Roomba Bot: 8 stappe

Video: Garden Helper Roomba Bot: 8 stappe
Video: RoboVac Party#8: Roomba, Samsung, Neato, LG, Rowenta | PILE of confetti Vol.3 🥳🎊🎊🎊 2024, Julie
Anonim
Tuinhulp Roomba Bot
Tuinhulp Roomba Bot

Kiara Myers, Ahmad Alghadeer en Madison Tippet

Doel:

Hierdie instruksies sal u leer hoe om 'n Roomba Bot met MATLAB te programmeer om deur 'n tuin te navigeer en sirkelvormige vrugte/groente op te spoor wat ryp genoeg is om op grond van hul grootte gepluk te word. Hierdie robot stuur u ook 'n e -pos om u te waarsku hoeveel vrugte gereed is om gepluk te word en die pad waarin dit geloop het.

Kenmerke:

  • Gebruik ligsensors om mure op te spoor en effens te draai om te voorkom dat hulle raak
  • Gebruik stampsensors om die program te breek as dit die rots aan die einde van die tuin raak
  • Gebruik beeldverwerking om 'n sirkel in die tuin op te spoor en dan die radius daarvan te bepaal
  • Gebruik kranssensors om 'n gekleurde band op te spoor wat die teenwoordigheid van 'n vrug aandui

Stap 1: Materiaal en voorrade:

  • Een skootrekenaar
  • MATLAB 2017
  • Roomba Vaccum Cleaner
  • Framboos Pi
  • Hout blokke
  • Wit papier
  • Swart papier
  • Gekleurde band/dun strook gekleurde papier
  • Groot rots

Stap 2:

Stap 3: Monteer u "tuin"

Die samestelling van u
Die samestelling van u
  1. Neem u swart papier en sny sirkels van verskillende groottes
  2. Plak hierdie swart sirkels op 'n groot wit papier vas

    Hierdie kontras sal nodig wees by die opsporing van 'n vrug

  3. Gebruik u houtblokkies om 'n doolhofagtige tuinpad te bou sodat u robot kan navigeer

    Ons het 'n U-vormige pad gekies soos hierbo afgebeeld

  4. Voeg aan die einde van u tuin 'n rots of deur of 'n ander voorwerp by sodat u robot weet dat dit klaar is
  5. Plak u wit papier met die sirkel op die mure van die tuin vas

    Ons het emmers gebruik om dit vas te plak, want ons mure was te kort vir die kamera

  6. Sit gekleurde band/dun strook gekleurde papier op die grond voor die vrugte

Stap 4: Skryf die kode

Navigeer deur die tuin

Deur stampsensors te gebruik: Om die program uit te voer, plaas ons die kodering in 'n while -stelling wat deur verskillende if -stellings loop totdat die kode gebreek is. As een van die bumpers getref word, sal dit daartoe lei dat die waarde waar is (wat in Booleaanse waarde 1 is). 'N If -stelling word gebruik om die kode te breek wanneer een van hul waardes gelyk is aan 1.

Gebruik van kranssensors: binne die terwyl -verklaring gebruik ons 'n if -verklaring om die Roomba te vertel wanneer dit by die lokasie van 'n aanleg aangekom het. Die Roomba bespeur die gekleurde band op die vloer deur die drumpel rooi te ondersoek wat die kransensors optel. As die kransensor links of regs 'n kleur met 'n groter drumpel as die van die grond opspoor, stop die robot vir 2 sekondes (met 'n pouse -opdrag). Gedurende hierdie 2 sekondes neem die Roomba 'n beeld van die vrug. Stel 'n reikwydte vir die radius van u sirkels in met die ingeboude opdragfigssirkels, en u Roomba vind u sogenaamde vrugte.

Met behulp van beeldverwerking: In die if -stelling sluit ons 'n ander if -stelling in wat sê: as die radius waargeneem, radii3, groter is as of gelyk is aan ons minimum vereiste vir 'n ryp vrug, r1 (u besluit dit), tel dan en vertoon op die Roomba hoeveel vrugte is gereed en draai om deur die tuin te gaan. Indien nie, is die beurt om deur die tuin voort te gaan. Let wel: u moet moontlik die hoek wat u draai, aanpas, want elke Roomba is anders

Gebruik van ligbuffers: In 'n ander if -verklaring word die ligstoters ontleed om seker te maak dat nie een van hulle groter is as ons vasgestelde drempel nie. As die linker-, regter-, linker-, middel-, regter -middel-, linker -voor- of regter -voorligbuffer bo die drumpel gaan, sal die Roomba effens in die regte hoek draai om te voorkom dat dit teen 'n muur raak. Daarom, deur die doolhof te navigeer.

Die res van die kode word gebruik om die pad van die Roomba te teken en dan die resultate na u e -pos te stuur

Stap 5: Kopieer die kode

Doel: Op grond van hul grootte, sal die roomba deur 'n tuin gaan en groente/vrugte onderskei wat gereed is om opgetel te word. % Insette: Lightbump sensors, Cliff sensors, Bump sensors, image from camera % Outputs: Wanneer ligsensors groter as die drempel is, draai die roomba en neem 'n beeld, as die radius van % groente/vrugte tussen 'n spesifieke reeks is. Die kode breek as roomba in 'n voorwerp stamp, 'n e -pos stuur aan die ruimtevaarder oor hoeveel vrugte gereed is om opgetel te word en 'n kartering van die beweging van die roomba. % Gebruik: indien en terwyl stellings, bevele beplan, e -poskode van MATLAB

k = 0

tiek

timerVal = tic

terwyl dit waar is

v =.2; % velocity r.setDriveVelocity (v, v);% roomba gaan vorentoe L = r.getLightBumpers; LC = L. linkersentrum; Rr = L. regs; Lf = L. links; RC = L. regsentrum; LF = L.links Voor; RF = L. regterkant; Q = 75; % drempel. RTH = 30; %Hoë rooi drumpel RTL = 10; %Lae rooi drumpel B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; as S.leftFront> PL1 || S.rightFront> PL1 % bespeur of die kleur op die grond bo die drempel is r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % pause for 2 seconds img = r.getImage; %neem beeld imshow (img)%vertoon beeld [centers3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viskringe (middelpunte3, radius3); %soek na sirkels van radiusse met 'n gespesifiseerde omvang in die prent as radii3> = r1 T = 1 k = k+1 dist1 = 0,2.*verstrykTyd %As die radius waargeneem is groter as of gelyk is aan die minimum %vereiste van 'n ryp vrug, dan tel die Roomba hierdie vrug anders as radii3 <= r3 T = 0 anders T = 0 dist2 = 0.2.*verstrykTyd %Indien nie, dan tel dit nie die vrugte -einde nie

as T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.turnAngle (78) %As 'n vrug opgespoor is, vertoon die nommer op Roomba, %maak 'n geluid en draai elseif T == 2 r.turnAngle (78) %As 2 vrugte opgespoor word, draai dan om deur die %tuin te gaan, anders r.turnAngle (78) %As geen vrugte bespeur word nie, draai dan om deur te gaan deur die einde van die %tuin einde as 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 %As enige van die ligbumpers se waardes bo die drempel styg, dan %die Roomba sal effens in die regte rigting draai om te voorkom dat %teen 'n muur raak

as B.right == 1 || B.links == 1 || B.front == 1 dist3 = 0.2.*Verstryk Tyd r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Indien enige van die bumbers raak, dan speel die roomba klank, draai om, %en breek die kode

einde breek

eindstrooiing (0.533, 0, '^') hou op verstrooiing (0.533, dist1, '<') hou op strooi (-dist2, dist1, 'v') hou op scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

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

setpref ('Internet', 'E_mail', pos); setpref ('Internet', 'SMTP_Server', gasheer) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pos); props.setProperty ('mail.smtp.host', gasheer); props.setProperty ('mail.smtp.port', poort); 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', poort); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (pos, 'Hallo ruimtevaarder! Daar is soveel vrugte in die tuin', kmsg, {'movement.png'})

Aanbeveel: