Inhoudsopgave:

Tuinhulp Roomba Bot - Ajarnpa
Tuinhulp Roomba Bot - Ajarnpa

Video: Tuinhulp Roomba Bot - Ajarnpa

Video: Tuinhulp Roomba Bot - Ajarnpa
Video: Обзор нового робота-пылесоса iRobot j7+ 2024, November
Anonim
Tuinhulp Roomba Bot
Tuinhulp Roomba Bot

Kiara Myers, Ahmad Alghadeer en Madison Tippet

Doel:

Deze instructable leert je hoe je een Roomba Bot programmeert, met behulp van MATLAB, om door een tuin te navigeren en cirkelvormige vruchten/groenten te detecteren die rijp genoeg zijn om te worden geplukt op basis van hun grootte. Deze robot stuurt je ook een e-mail om je te laten weten hoeveel fruit er klaar is om geplukt te worden en het pad dat het heeft afgelegd.

Functies:

  • Gebruikt lichtsensoren om muren te detecteren en lichtjes te draaien om te voorkomen dat ze worden geraakt
  • Gebruikt stootsensoren om het programma te onderbreken wanneer het de rots aan het einde van de tuin raakt
  • Gebruikt beeldverwerking om een cirkel in de tuin te detecteren en vervolgens de straal ervan te bepalen
  • Gebruikt klifsensoren om een gekleurde tape te detecteren die de aanwezigheid van een vrucht aangeeft

Stap 1: Materialen en benodigdheden:

  • Eén laptop
  • MATLAB 2017
  • Roomba Stofzuiger
  • Raspberry Pi
  • Houtblokken
  • Wit papier
  • Zwart papier
  • Gekleurde tape/dunne strook gekleurd papier
  • Grote steen

Stap 2:

Stap 3: assembleren van uw "tuin"

Montage van uw
Montage van uw
  1. Pak je zwarte papier en knip cirkels van verschillende groottes
  2. Plak deze zwarte cirkels op een groot wit papier

    Dit contrast is nodig bij het detecteren van een vrucht

  3. Gebruik je houtblokken om een doolhofachtig tuinpad te bouwen waar je robot doorheen kan navigeren

    We kozen voor een U-vormig pad zoals hierboven afgebeeld

  4. Voeg aan het einde van je tuin een steen of deur of een ander voorwerp toe zodat je robot weet dat het klaar is
  5. Plak je witte papier met de cirkel op de muren van de tuin

    We gebruikten emmers om het aan vast te plakken omdat onze muren te kort waren voor de camera

  6. Leg gekleurd tape/dunne strook gekleurd papier op de grond voor het fruit

Stap 4: De code schrijven

Navigeren door de tuin

Bump-sensoren gebruiken: om het programma uit te voeren, plaatsen we de codering in een while-statement dat verschillende if-statements doorloopt totdat de code wordt verbroken. Als een van de bumpers wordt geraakt, resulteert dit in een waarde die gelijk is aan true (wat in Boolean een waarde van 1 is). Een if-statement wordt gebruikt om de code te breken wanneer een van hun waarden gelijk is aan 1.

Cliff Sensors gebruiken: binnen de while-statement gebruiken we een if-statement om de Roomba te laten weten wanneer hij op de locatie van een plant is aangekomen. De Roomba detecteert de gekleurde tape op de vloer door de rode drempel te onderzoeken die de klifsensoren oppikken. Als de linker of rechter klifsensor een kleur detecteert met een grotere drempel dan die van de grond, dan zal deze de robot gedurende 2 seconden stoppen (met behulp van een pauzecommando). Gedurende deze 2 seconden zal de Roomba een afbeelding van het fruit nemen en weergeven. Gebruik de ingebouwde imfindcircles om een bereik in te stellen voor de radii van uw cirkels, en uw Roomba zal uw zogenaamde fruit vinden.

Beeldverwerking gebruiken: in de if-instructie voegen we een andere if-instructie in die zegt: als de gedetecteerde straal, radii3, groter is dan of gelijk is aan onze minimumvereiste van een rijpe vrucht, r1 (u bepaalt dit), dan tellen en weergeven op de Roomba hoeveel fruit er klaar is en draai om door de tuin te gaan. Zo niet, dan de beurt om door de tuin verder te gaan. Let op: het kan zijn dat je de hoek die je draait moet aanpassen, omdat elke Roomba anders is

Lichtbumpers gebruiken: in een andere if-verklaring worden de lichte bumpers geanalyseerd om er zeker van te zijn dat geen van hen groter wordt dan onze vastgestelde drempel. Als de bumper links, rechts, links midden, rechts midden, linksvoor of rechtsvoor boven de drempel komt, draait de Roomba een beetje in de juiste hoek om te voorkomen dat hij een muur raakt. Vandaar het navigeren door het doolhof.

De rest van de code wordt gebruikt om het pad van de Roomba te plotten en vervolgens de resultaten naar uw e-mail te sturen

Stap 5: Kopieer de code

% Doel: op basis van hun afmetingen zal de roomba door een tuin gaan en groenten/fruit onderscheiden die klaar zijn om te worden opgehaald. % Ingangen: Lightbump-sensoren, Cliff-sensoren, Bump-sensoren, beeld van camera % Uitgangen: wanneer de lichtsensoren groter zijn dan de drempelwaarde, zal de roomba draaien en een beeld maken, piept als de straal van % groenten/fruit binnen een specifiek bereik ligt. De code breekt wanneer roomba tegen % een object botst, de astronaut een e-mail stuurt over hoeveel fruit er klaar is om te worden opgepakt en een kaart van de beweging van de roomba. % Gebruik: If en while-statements, plotcommando's, e-mailcode van MATLAB

k=0

tic

timerVal=tic

terwijl het waar is

v=.2; % snelheid r.setDriveVelocity(v, v);%roomba ga vooruit L=r.getLightBumpers; LC=L.linksmidden; Rr=L.rechts; Lf=L.links; RC=L.rechtsCentrum; LF=L.linksVoor; RF=L.rechtsVoor; Q= 75; % drempelwaarde. RTH=30; %Hoge rode drempel RTL=10; %Lage rode drempel B=r.getBumpers S=r.getCliffSensors; r1=24; r3=10; PL1=1800; if S.leftFront > PL1 || S.rightFront > PL1 %detecteert of de kleur op de grond boven de drempel is r.stop pause(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % pauze gedurende 2 seconden img = r.getImage; %take image imshow(img)%display image [centers3, radii3] = imfindcircles(img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscirkels(centra3, stralen3); %zoek naar cirkels met radii binnen gespecificeerd bereik in afbeelding if radii3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime %Als gedetecteerde straal groter is dan of gelijk is aan het minimum %vereiste van een rijpe vrucht, dan telt Roomba deze vrucht elseif radii3<=r3 T=0 else T=0 dist2=0.2.*elapsedTime %Zo niet, dan telt hij het einde van de vrucht niet

if T==1 r.setLEDDigits(num2str(k)) r.beep r.beep r.beep r.turnAngle(78) %Als er een vrucht is gedetecteerd, geef dan het nummer weer op Roomba, %maak een geluid en draai elseif T==2 r.turnAngle(78) %Als er 2 vruchten worden gedetecteerd, draai dan om door de %garden te gaan else r.turnAngle(78) %Als er geen vruchten worden gedetecteerd, draai dan om verder te gaan door de %garden end als 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 %Als een van de waarden van de lichte bumpers boven de drempel komt, dan %de Roomba zal lichtjes in de juiste richting draaien om %tegen een muur te vermijden

als B.rechts ==1 || B.links==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Als een van de bumbers worden geraakt, dan speelt de roomba geluid, draait rond, %en breekt de code

pauze einde

einde scatter(0.533, 0, '^') houd op scatter(0.533, dist1, '<') houd op scatter(-dist2, dist1, 'v') houd op scatter(-dist2, 0, 'd') saveas (gcf, 'Beweging.png')

kmsg=num2str(k) mail= '[email protected]' wachtwoord='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', host); 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(mail, 'Hallo Astronaut! Er zijn zoveel vruchten in de tuin', kmsg, {'movement.png'})

Aanbevolen: