Satura rādītājs:

Dārza palīgs Roomba Bot: 8 soļi
Dārza palīgs Roomba Bot: 8 soļi

Video: Dārza palīgs Roomba Bot: 8 soļi

Video: Dārza palīgs Roomba Bot: 8 soļi
Video: HOMESCAPES DREAM HOME IDEAS 2024, Jūlijs
Anonim
Dārza palīgs Roomba Bot
Dārza palīgs Roomba Bot

Kiara Myers, Ahmad Alghadeer un Madison Tippet

Mērķis:

Šī pamācība iemācīs jums programmēt Roomba Bot, izmantojot MATLAB, lai pārvietotos pa dārzu, atklājot apļveida augļus/dārzeņus, kas ir pietiekami nogatavojušies, lai tos varētu salasīt, ņemot vērā to lielumu. Šis robots arī nosūta jums e -pastu, brīdinot, cik augļu ir gatavi novākšanai un ceļu, pa kuru tas devās.

Iespējas:

  • Izmanto gaismas sensorus, lai noteiktu sienas un nedaudz pagrieztu, lai izvairītos no sitiena
  • Izmanto sitienu sensorus, lai pārtrauktu programmu, kad tā ietriecas klintī dārza galā
  • Izmanto attēlu apstrādi, lai atklātu loku dārzā un pēc tam noteiktu tā rādiusu
  • Izmanto klints sensorus, lai noteiktu krāsainu lenti, kas norāda uz augļa klātbūtni

1. solis: Materiāli un piederumi:

  • Viens klēpjdators
  • MATLAB 2017
  • Roomba putekļu tīrītājs
  • Raspberry Pi
  • Koka bloki
  • Baltā grāmata
  • Melns papīrs
  • Krāsaina lente/plāna krāsaina papīra sloksne
  • Lielais klints

2. darbība:

3. solis: "Dārza" salikšana

Jūsu salikšana
Jūsu salikšana
  1. Paņemiet melno papīru un izgrieziet dažāda lieluma apļus
  2. Uzlīmējiet šos melnos apļus uz liela balta papīra

    Šis kontrasts būs nepieciešams, atklājot augļus

  3. Izmantojiet koka blokus, lai izveidotu labirintam līdzīgu dārza taku, lai jūsu robots varētu pārvietoties

    Mēs izvēlējāmies U formas ceļu, kā parādīts iepriekš

  4. Dārza beigās pievienojiet akmeni vai durvis vai citu priekšmetu, lai jūsu robots zinātu, ka tas ir izdarīts
  5. Līmējiet savu balto papīru ar apli uz dārza sienām

    Mēs pielīmējām spaiņus, jo mūsu sienas bija pārāk īsas kamerai

  6. Ielieciet krāsainu lenti/plānu krāsaina papīra sloksni uz zemes augļa priekšā

4. solis: koda rakstīšana

Navigācija dārzā

Izmantojot trieciena sensorus: Lai palaistu programmu, mēs ievietojam kodējumu īslaicīgajā paziņojumā, kas tiek apskatīts dažādos paziņojumos, līdz kods ir salauzts. Ja trāpīs kāds no buferiem, to vērtība būs vienāda ar patieso (kas Būla režīmā ir vērtība 1). Ja paziņojums tiek izmantots, lai pārtrauktu kodu, ja viena no to vērtībām ir vienāda ar 1.

Klints sensoru izmantošana: Paziņojuma laikā mēs izmantojam paziņojumu if, lai paziņotu Roomba, kad tā ir ieradusies rūpnīcas atrašanās vietā. Roomba nosaka krāsaino lenti uz grīdas, pārbaudot sarkanās krāsas slieksni, ko uzņem klints sensori. Ja kreisās vai labās klints sensors nosaka krāsu ar lielāku slieksni nekā zemei, tas apturēs robotu uz 2 sekundēm (izmantojot pauzes komandu). Šo 2 sekunžu laikā Roomba uzņems un parādīs augļa attēlu. Izmantojot iebūvēto komandu, atrodiet apļu rādiusu, un Roomba atradīs jūsu tā saucamos augļus.

Attēlu apstrādes izmantošana: Ja paziņojumā mēs iestrādājam citu paziņojumu, ja teikts: ja atklātais rādiuss, rādiuss3, ir lielāks vai vienāds ar mūsu minimālo prasību pēc gataviem augļiem r1 (jūs to izlemjat), tad saskaitiet un parādiet Roomba, cik daudz augļu ir gatavi, un pagriezieties, lai turpinātu cauri dārzam. Ja nē, pagrieziens, lai turpinātu cauri dārzam. Piezīme: iespējams, jums būs jāpielāgo pagrieziena leņķis, jo katra Roomba ir atšķirīga

Gaismas buferu izmantošana: citā paziņojumā gaismas buferi tiek analizēti, lai pārliecinātos, ka neviens no tiem nav lielāks par mūsu noteikto slieksni. Ja kreisais, labais, kreisais centrs, labais centrs, kreisais priekšējais vai labais priekšējais gaismas buferis iet virs sliekšņa, tad Roomba nedaudz pagriezīsies atbilstošā leņķī, lai nesaskartos ar sienu. Tādējādi navigācija labirintā.

Pārējais kods tiek izmantots, lai uzzīmētu Roomba izvēlēto ceļu un pēc tam nosūtītu rezultātus uz jūsu e -pastu

5. darbība: kopējiet kodu

Mērķis: pamatojoties uz to izmēriem, roomba izies dārzā un atšķirs dārzeņus/augļus, kas ir gatavi savākšanai. % Ievadi: gaismas trieciena sensori, klints sensori, trieciena sensori, attēls no kameras Kods pārtrūkst, kad Roomba ietriecas % objektā, nosūta astronautam e -pastu par to, cik augļu ir gatavi uzņemt, un Roomba kustības kartēšanu. Lietošana: Ja un paziņojumu laikā, zīmēšanas komandas, e -pasta kods no MATLAB

k = 0

tic

timerVal = tic

kamēr taisnība

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba iet uz priekšu L = r.getLightBumpers; LC = L. kreisais centrs; Rr = L.pareizi; Lf = L.pa kreisi; RC = L.pareizais centrs; LF = L.pa kreisi; RF = L.pa labiFront; Q = 75; % slieksnis. RTH = 30; %Augsts sarkanais slieksnis RTL = 10; %Zems sarkanais slieksnis B = r.getBampers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; ja S.leftFront> PL1 || S.rightFront> PL1 % nosaka, vai krāsa uz zemes ir virs sliekšņa r. Apstāšanās pauze (2) pagājisTime = toc (timerVal-2) tic timerVal = tic % pauze 2 sekundes img = r.getImage; %uzņemt attēlu imshow (img)%parādīt attēlu [centri3, rādiusi3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscircles (centri3, rādiusi3); %meklē rādiusa apļus ar norādītu diapazonu attēlā, ja rādiuss3> = r1 T = 1 k = k+1 dist1 = 0,2.*pagājušais laiks %Ja konstatētais rādiuss ir lielāks vai vienāds ar nogatavojušos augļu minimālo %, tad Roomba uzskaita šos augļus, ja rādiuss3 <= r3 T = 0 cits T = 0 dist2 = 0,2.*pagājušais laiks %

ja T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Ja tika konstatēts auglis, parādiet numuru Roomba, %rada troksni un pagrieziet elseif T == 2 r.turnAngle (78) %Ja tiek konstatēti 2 augļi, tad pagriezieties, lai turpinātu caur %dārzu else r.turnAngle (78) %Ja augļi netiek atklāti, tad pagriezieties, lai turpinātu caur %dārza beigu galu ja 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 %Ja kāda no gaismas buferu vērtībām pārsniedz slieksni, tad %the Roomba nedaudz pagriezīsies atbilstošajā virzienā, lai izvairītos no %sitiena pret sienu

ja B.pareizi == 1 || B.pa kreisi == 1 || B. front == 1 dist3 = 0.2.*Pagājušais laiks r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Ja kāds no bumbers tiek trāpīts, tad roomba atskaņo skaņu, griežas apkārt, %un pārkāpj kodu

pārtraukuma beigas

beigu izkliede (0,533, 0, '^') aizturēt izkliedi (0,533, dist1, '<') aizturēt izkliedi (-dist2, dist1, 'v') aizturēt izkliedi (-dist2, 0, 'd') saveas (gcf, “Kustība.png”)

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

setpref ('Internets', 'E -pasts', pasts); setpref ('Internets', 'SMTP_Server', saimniekdators) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pasts); props.setProperty ('mail.smtp.host', resursdators); props.setProperty ('mail.smtp.port', osta); 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', ports); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (pasts, 'Sveiki, astronaut! Dārzā ir tik daudz augļu', kmsg, {'motion.png'})

Ieteicams: