Բովանդակություն:

Garden Helper Roomba Bot: 8 քայլ
Garden Helper Roomba Bot: 8 քայլ

Video: Garden Helper Roomba Bot: 8 քայլ

Video: Garden Helper Roomba Bot: 8 քայլ
Video: You’re welcome 😚 #Roomba #maintenance 2024, Նոյեմբեր
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

Կիարա Մայերս, Ահմադ Ալղադիր և Մեդիսոն Թիպեթ

Նպատակը:

Այս ուսուցանելիքը կսովորեցնի ձեզ, թե ինչպես ծրագրավորել Roomba Bot- ը ՝ MATLAB- ի միջոցով, նավարկելու այգում ՝ հայտնաբերելով շրջանաձև ձևի պտուղներ/բանջարեղեններ, որոնք հասուն են ՝ չափելու համար: Այս ռոբոտը ձեզ էլ.

Հատկություններ:

  • Օգտագործում է լուսային տվիչներ ՝ պատերը հայտնաբերելու և փոքր -ինչ պտտվելու համար, որպեսզի խուսափի դրանց հարվածներից
  • Օգտագործում է հարվածի տվիչներ `ծրագիրը կոտրելու համար, երբ այն հարվածում է այգու վերջում գտնվող ժայռին
  • Օգտագործում է պատկերի մշակումը ՝ այգում շրջան հայտնաբերելու և այնուհետև դրա շառավիղը որոշելու համար
  • Օգտագործում է ժայռերի տվիչներ ՝ գունավոր ժապավենը հայտնաբերելու համար, որը ցույց է տալիս պտղի առկայությունը

Քայլ 1: Նյութեր և պարագաներ

  • Մեկ նոթբուք
  • MATLAB 2017
  • Roomba փոշեկուլ
  • Ազնվամորի Պի
  • Փայտե բլոկներ
  • Սպիտակ թուղթ
  • Սեւ թուղթ
  • Գունավոր ժապավեն/գունավոր թղթի բարակ շերտ
  • Մեծ ռոք

Քայլ 2:

Քայլ 3: Հավաքեք ձեր «Այգին»

Քո հավաքելը
Քո հավաքելը
  1. Վերցրեք ձեր սև թուղթը և կտրեք տարբեր չափերի շրջանակներ
  2. Այս սեւ շրջանակները կպցրեք մեծ սպիտակ թղթի վրա

    Այս հակադրությունը անհրաժեշտ կլինի պտուղ հայտնաբերելիս

  3. Օգտագործեք ձեր արգելափակոցները ՝ լաբիրինթոսին նմանվող այգու ճանապարհ կառուցելու համար, որպեսզի ձեր ռոբոտը նավարկի

    Մենք ընտրեցինք U- ձև ունեցող ուղի, ինչպես պատկերված է վերևում

  4. Ձեր այգու վերջում ավելացրեք ժայռ կամ դուռ կամ այլ առարկա, որպեսզի ձեր ռոբոտը իմանա, որ դա արված է
  5. Ձեր սպիտակ թուղթը շրջանակով կպցրեք այգու պատերին

    Մենք դույլերով ամրացրեցինք այն, քանի որ մեր պատերը չափազանց կարճ էին տեսախցիկի համար

  6. Պտղի դիմաց գետնին դրեք գունավոր ժապավեն/գունավոր թղթի բարակ շերտ

Քայլ 4: Գրեք օրենսգիրքը

Նավիգացիա պարտեզում

Օգտագործելով Bump Sensors: runրագիրը գործարկելու համար մենք տեղադրում ենք կոդավորումը որոշ հայտարարության մեջ, որը շրջանցում է տարբեր if հայտարարությունները մինչև կոդի կոտրվելը: Եթե բամպերներից որևէ մեկը հարվածի, դա կհանգեցնի դրանց արժեքի հավասարմանը ճշմարիտին (որը Բուլյանում 1 արժեք է): Եթե հայտարարությունը օգտագործվում է կոդի խախտման համար, երբ դրանց արժեքներից մեկը հավասար է 1 -ի:

Cliff սենսորների օգտագործումը. While հայտարարության ընթացքում մենք if- ի հայտարարությունն ենք օգտագործում Roomba- ին տեղեկացնելու համար, երբ այն հասել է գործարանի գտնվելու վայր: Roomba- ն հայտնաբերում է հատակին տեղադրված գունավոր ժապավենը `ուսումնասիրելով կարմիր շեմը, որը ժայռերի տվիչները հավաքում են: Եթե ձախ կամ աջ ժայռի սենսորը հայտնաբերում է գետնից ավելի մեծ շեմ ունեցող գույն, ապա այն ռոբոտին կանգնեցնելու է 2 վայրկյանով (դադար օգտագործելու միջոցով): Այս 2 վայրկյանների ընթացքում Roomba- ն կվերցնի և կցուցադրի պտղի պատկերը: Օգտագործելով հրամանատարության մեջ կառուցված շրջանակները, սահմանեք շրջանակ ձեր շառավիղների համար, և ձեր Roomba- ն կգտնի ձեր այսպես կոչված պտուղը:

Օգտագործելով պատկերի մշակումը. If հայտարարության մեջ մենք տեղադրում ենք մեկ այլ if հայտարարություն, որն ասում է. Roomba- ն քանի պտուղ է պատրաստ և շրջվում է շարունակելու այգու միջով: Եթե ոչ, հերթը շարունակել այգու միջով: Նշում. Գուցե անհրաժեշտ լինի կարգավորել շրջվող անկյունը, քանի որ յուրաքանչյուր Roomba- ն տարբեր է

Լույսի բամպերների օգտագործումը. Մեկ այլ if հայտարարության մեջ լուսային բամպերները վերլուծվում են `համոզվելու համար, որ դրանցից ոչ մեկը չի գերազանցում մեր սահմանված շեմը: Եթե կամ ձախ, աջ, ձախ կենտրոն, աջ կենտրոն, ձախ առջև կամ աջ առջևի լապտերները գերազանցում են շեմը, ապա Roomba- ն մի փոքր կթեքվի համապատասխան անկյան տակ `պատին հարվածելուց խուսափելու համար: Հետևաբար, նավարկելով լաբիրինթոսում:

Մնացած ծածկագիրը օգտագործվում է Roomba- ի անցած ճանապարհը գծելու և արդյունքները ձեր էլ

Քայլ 5: Պատճենեք ծածկագիրը

Նպատակը. Հիման վրա իրենց չափերի, սենյակը կանցնի այգիով և կտարբերակի բանջարեղենը/պտուղները, որոնք պատրաստ են վերցնելու: % Մուտքեր. Lightbump սենսորներ, Cliff սենսորներ, Bump սենսորներ, պատկեր խցիկից % Ելքեր. Երբ լույսի տվիչները շեմից մեծ են, roomba- ն կշրջվի և կվերցնի պատկեր, կտա ազդանշաններ, եթե % բանջարեղենի/մրգերի շառավիղը գտնվում է որոշակի միջակայքի միջև: Կոդն ընդհատվում է, երբ roomba- ն բախվում է օբյեկտի % -ին, տիեզերագնացին նամակ է ուղարկում այն մասին, թե քանի պտուղ պատրաստ է հավաքել և սենյակի շարժման քարտեզագրումը: % Օգտագործում. Եթե և հայտարարություններ, հրամաններ կազմելը, էլփոստի կոդը MATLAB- ից

k = 0

տիկ

timerVal = տիկ

մինչդեռ ճշմարիտ է

v =.2; % արագություն r.setDriveVelocity (v, v);% roomba գնալ առաջ L = r.getLightBumpers; LC = L.leftCenter; Rr = L. աջ; Lf = L. ձախ; RC = L.rightCenter; LF = L.leftFront; ՌԴ = L. աջ ճակատ; Q = 75; % շեմ. RTH = 30; %Բարձր կարմիր շեմ RTL = 10; %Lowածր կարմիր շեմ B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; եթե S.leftFront> PL1 || S.rightFront> PL1 % -ը որոշում է, թե արդյոք գետնի գույնը շեմից բարձր է r. Դադարեցնել դադար (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % դադար 2 վայրկյան img = r.getImage; %take image imshow (img)%ցուցադրել պատկեր [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = շրջապտույտներ (կենտրոններ 3, ճառագայթներ 3); %փնտրեք ճառագայթների շրջանակներ w/պատկերի որոշակի տիրույթում, եթե radii3> = r1 T = 1 k = k+1 dist1 = 0.2.*elapsedTime %Եթե հայտնաբերված շառավիղը հասած պտղի նվազագույն %պահանջից մեծ կամ հավասար է, ապա Roomba- ն հաշվում է այս պտուղը elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2.*elapsedTime %Եթե ոչ, ապա այն չի հաշվում պտղի վերջը

եթե T == 1 ռ. elseif T == 2 r.turnAngle (78) %Եթե հայտնաբերվում է 2 պտուղ, ապա շրջվում է շարունակելու համար %այլ այգու միջոցով r.turnAngle (78) %Եթե պտուղ չի հայտնաբերվում, ապա շրջվում է շարունակելու %պարտեզի վերջի վերջում եթե 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 %Եթե լուսային բամպերի արժեքներից որևէ մեկը անցնում է շեմից, ապա %Roomba փոքր -ինչ կշրջվի համապատասխան ուղղությամբ ` %պատին հարվածելուց խուսափելու համար

եթե B.right == 1 || Բ. Ձախ == 1 || B.front == 1 dist3 = 0.2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Եթե որևէ մեկը բամբակները հարվածում են, այնուհետև roomba- ն հնչում է ձայնով, պտտվում շուրջը, %և կոտրում ծածկագիրը

ընդմիջման ավարտ

վերջ ցրվել (0.533, 0, '^') պահել ցրման վրա (0.533, dist1, '<') պահել ցրման վրա (-dist2, dist1, 'v') պահել ցրման վրա (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' գաղտնաբառ = 'Srsora123#' host = 'smtp.gmail.com' port = '465'

setpref («Ինտերնետ», «E_mail», փոստ); setpref («Ինտերնետ», «SMTP_Server», հյուրընկալող) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', փոստ); props.setProperty ('mail.smtp.host', հաղորդավար); props.setProperty ('mail.smtp.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', նավահանգիստ); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (փոստ ՝ «Բարև տիեզերագնաց! Այգում այսքան պտուղ կա», kmsg, {'Movement.png'})

Խորհուրդ ենք տալիս: