Taula de continguts:

Garden Helper Roomba Bot: 8 passos
Garden Helper Roomba Bot: 8 passos

Vídeo: Garden Helper Roomba Bot: 8 passos

Vídeo: Garden Helper Roomba Bot: 8 passos
Vídeo: You’re welcome 😚 #Roomba #maintenance 2024, Desembre
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

Kiara Myers, Ahmad Alghadeer i Madison Tippet

Propòsit:

Aquest instructiu us ensenyarà a programar un Roomba Bot, mitjançant MATLAB, per navegar a través d’un jardí, detectant fruites / verdures de forma circular prou madures per recollir-les segons la seva mida. Aquest robot també us envia un correu electrònic per avisar-vos de quantes fruites estan a punt per recollir-se i del camí pel qual va recórrer.

Característiques:

  • Utilitza sensors de llum per detectar les parets i girar lleugerament per evitar colpejar-les
  • Utilitza sensors de cops per trencar el programa quan toca la roca al final del jardí
  • Utilitza el processament d’imatges per detectar un cercle al jardí i determinar-ne el radi
  • Utilitza sensors de penya-segats per detectar una cinta de colors que indica la presència d’una fruita

Pas 1: materials i subministraments:

  • Un portàtil
  • MATLAB 2017
  • Netejador de buit Roomba
  • Raspberry Pi
  • Blocs de fusta
  • Paper blanc
  • Paper negre
  • Cinta de colors / tira fina de paper de colors
  • Roca gran

Pas 2:

Pas 3: Muntatge del vostre "jardí"

Muntatge del vostre
Muntatge del vostre
  1. Agafeu el paper negre i talleu cercles de diverses mides
  2. Enganxeu aquests cercles negres sobre un gran paper blanc

    Aquest contrast serà necessari a l’hora de detectar una fruita

  3. Utilitzeu els blocs de fusta per construir un camí de jardí en forma de laberint perquè el vostre robot pugui navegar

    Vam triar un camí en forma d’U tal com es mostra a la imatge superior

  4. Al final del jardí, afegiu una roca o una porta o un altre objecte perquè el vostre robot sàpiga que està fet
  5. Enganxeu el paper blanc amb el cercle a les parets del jardí

    Vam fer servir cubs per gravar-los perquè les nostres parets eren massa curtes per a la càmera

  6. Poseu cinta de colors / tires fines de paper de colors a terra davant de la fruita

Pas 4: escriure el codi

Navegant pel jardí

Ús de Bump Sensors: per executar el programa, col·loquem la codificació en una sentència while que recorre diverses sentències if fins que es trenqui el codi. Si es colpeja algun dels para-xocs, el seu valor serà igual a true (que en booleà és un valor d'1). Una sentència if s’utilitza per trencar el codi quan un dels seus valors és igual a 1.

Ús de sensors de penya-segats: dins de la declaració while, fem servir una declaració if per dir a Roomba quan ha arribat a la ubicació d’una planta. El Roomba detecta la cinta de colors del terra examinant el llindar de vermell que agafen els sensors del penya-segat. Si el sensor de penya-segat esquerre o dret detecta un color amb un llindar més gran que el del terra, detindrà el robot durant 2 segons (mitjançant l'ordre pausa). Durant aquests 2 segons, Roomba agafarà i mostrarà una imatge de la fruita. Utilitzant els comandaments imfindcircles integrats, configureu un interval per als radis dels vostres cercles i el Roomba trobarà els vostres anomenats fruits.

Utilització del processament d’imatges: dins de la sentència if, incorporem una altra sentència if que diu: si el radi detectat, radi3, és superior o igual al nostre requisit mínim de fruita madura, r1 (tu decidiu això), compteu i mostreu a al Roomba quantes fruites estan llestes i giren per continuar pel jardí. Si no, toca continuar pel jardí. Nota: és possible que hagueu d'ajustar l'angle que gireu perquè cada Roomba és diferent

Ús de bumper de llum: en una altra sentència if, els bumper de llum s’analitzen per assegurar-se que cap d’ells sigui superior al nostre llindar determinat. Si el parachoques lleuger esquerre, dret, centre esquerre, centre dret, davant esquerre o dret passa per sobre del llindar, el Roomba girarà lleugerament en l’angle adequat per evitar colpejar una paret. Per tant, navegar pel laberint.

La resta del codi s’utilitza per traçar el camí emprat per Roomba i després enviar els resultats al vostre correu electrònic

Pas 5: copieu el codi

Propòsit: segons les seves mides, roomba passarà per un jardí i distingirà les verdures / fruites que estan a punt per recollir-se. % Entrades: sensors Lightbump, sensors Cliff, sensors Bump, imatge de la càmera% Sortides: Sempre que els sensors de llum superin el llindar, roomba girarà i prendrà una imatge, emetrà un so si el radi de% verdures / fruites està entre un rang específic. El codi es trenca quan roomba xoca amb% un objecte, envia a l'astronauta un correu electrònic sobre quantes fruites estan a punt per ser% recollides i un mapatge del moviment de roomba. % Ús: instruccions If i while, traçat d'ordres, codi de correu electrònic de MATLAB

k = 0

tic

timerVal = tic

tot i que és cert

v =.2; % velocity r.setDriveVelocity (v, v);% roomba go forward L = r.getLightBumpers; LC = L.leftCenter; Rr = L. dret; Lf = L.esquerra; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % llindar. RTH = 30; % Llindar vermell alt RTL = 10; % Llindar vermell baix B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; si S.leftFront> PL1 || S.rightFront> PL1% detecta si el color del terra està per sobre del llindar r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pause durant 2 segons img = r.getImage; % prendre imatge imshow (img)% mostrar imatge [centres3, ràdios3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscercles (centres3, radis3); % cerqueu cercles de radis amb l'interval especificat a la imatge si radi3> = r1 T = 1 k = k + 1 dist1 = 0,2. * transcorregut Temps% Si el radi detectat és superior o igual al requisit mínim de% d'una fruita madura, llavors Roomba compta aquesta fruita si hi ha radis3 <= r3 T = 0 else T = 0 dist2 = 0.2. * elapsedTime% Si no, llavors no compta l'extrem de la fruita

if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Si es va detectar una fruita, mostreu el número a Roomba,% feu un soroll i gireu elseif T == 2 r.turnAngle (78)% Si es detecten 2 fruits, gireu per continuar pel% garden else r.turnAngle (78)% Si no es detecta cap fruita, gireu per continuar pel% end final del jardí si 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% Si algun dels valors dels para-xocs de llum supera el llindar, aleshores% el Roomba girarà lleugerament en la direcció adequada per evitar un cop de paret

si B.right == 1 || B.left == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Si alguna de les es colpeixen els bumbers, llavors el roomba toca so, gira,% i trenca el codi

final de trencament

final scatter (0,533, 0, '^') mantenir en scatter (0,533, dist1, '<') mantenir en scatter (-dist2, dist1, 'v') mantenir en scatter (-dist2, 0, 'd') saveas (mcd, 'Movement.png')

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

setpref ('Internet', 'E-mail', correu); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', correu); props.setProperty ('mail.smtp.host', amfitrió); 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 (correu, "Hola astronauta! Hi ha tantes fruites al jardí", kmsg, {'movement.png'})

Recomanat: