Kazalo:

Vrtni pomočnik Roomba Bot: 8 korakov
Vrtni pomočnik Roomba Bot: 8 korakov

Video: Vrtni pomočnik Roomba Bot: 8 korakov

Video: Vrtni pomočnik Roomba Bot: 8 korakov
Video: The PHENOMENON BRUNO GROENING – documentary film – PART 1 2024, November
Anonim
Vrtni pomočnik Roomba Bot
Vrtni pomočnik Roomba Bot

Kiara Myers, Ahmad Alghadeer in Madison Tippet

Namen:

Ta pouk vas bo naučil, kako programirati Roomba Bota z uporabo MATLAB-a za krmarjenje po vrtu in zaznati sadje/zelenjavo okrogle oblike, ki je dovolj zrela, da jo lahko poberete glede na velikost. Ta robot vam pošlje tudi e -poštno sporočilo in vas opozori, koliko sadja je pripravljeno za nabiranje in pot, po kateri je potoval.

Lastnosti:

  • Uporablja svetlobne senzorje za zaznavanje sten in rahlo obračanje, da se izogne udarcem
  • Uporablja senzorje udarcev, da prekine program, ko udari o skalo na koncu vrta
  • Z obdelavo slik zazna krog na vrtu in nato določi njegov polmer
  • Uporablja senzorje pečine za zaznavanje barvnega traku, ki označuje prisotnost sadja

1. korak: Materiali in potrebščine:

  • En prenosni računalnik
  • MATLAB 2017
  • Roomba sesalnik
  • Malina Pi
  • Lesene kocke
  • Bel papir
  • Črni papir
  • Barvni trak/tanek trak iz barvnega papirja
  • Veliki rock

2. korak:

3. korak: Sestavljanje vašega "vrta"

Sestavljanje vašega
Sestavljanje vašega
  1. Vzemite črni papir in izrežite kroge različnih velikosti
  2. Te črne kroge prilepite na velik bel papir

    Ta kontrast bo potreben pri odkrivanju sadja

  3. S svojimi lesnimi bloki zgradite vrtno pot, podobno labirintu, za navigacijo vašega robota

    Izbrali smo pot v obliki črke U, kot je prikazano zgoraj

  4. Na koncu vrta dodajte kamen ali vrata ali drug predmet, da bo vaš robot vedel, da je to storjeno
  5. Beli papir s krogom prilepite na stene vrta

    Za vezanje smo uporabili vedra, ker so bile naše stene prekratke za kamero

  6. Barvni trak/tanek trak barvnega papirja položite na tla pred sadjem

4. korak: Pisanje kode

Krmarjenje po vrtu

Uporaba senzorjev udarcev: Za zagon programa umestimo kodiranje v stavek while, ki prehaja skozi različne stavke if, dokler se koda ne razbije. Če je kateri koli odbijač zadet, bo njihova vrednost enaka true (kar je v logični vrednosti 1). Stavek if se uporablja za prekinitev kode, ko je ena od njihovih vrednosti enaka 1.

Uporaba senzorjev Cliff: V stavku while uporabimo stavek if, da Roombi povemo, kdaj je prispela na lokacijo tovarne. Roomba zazna barvni trak na tleh s pregledom praga rdeče barve, ki ga zaznajo senzorji pečine. Če levi ali desni senzor pečine zazna barvo z večjim pragom od tal, bo robota ustavil za 2 sekundi (z ukazom za premor). V teh 2 sekundah bo Roomba posnela in prikazala podobo sadja. Z vgrajenim ukazom imfindcircles nastavite obseg polmerov vaših krogov in vaša Roomba bo našla vaše tako imenovano sadje.

Uporaba obdelave slik: V stavek if vstavimo še en stavek if, ki pravi: če je zaznani polmer, radii3, večji ali enak naši minimalni zahtevi za zrelo sadje, r1 (to se odločite sami), nato preštejte in prikažite Roomba, koliko sadja je pripravljenih in se obrnite, da nadaljujete skozi vrt. Če ne, na vrsti za nadaljevanje skozi vrt. Opomba: morda boste morali prilagoditi kot zavijanja, ker je vsaka Roomba drugačna

Uporaba svetlobnih odbijačev: V drugem stavku if se svetlobni odbijači analizirajo, da se prepriča, da noben od njih ne preseže našega določenega praga. Če gre levi, desni, levi srednji, desni srednji, levi sprednji ali desni sprednji odbijač luči nad prag, se bo Roomba nekoliko obrnila v ustreznem kotu, da se izogne trčenju v steno. Zato krmarjenje po labirintu.

Preostali del kode se uporabi za načrtovanje poti, ki jo je opravila Roomba, in nato rezultate pošlje na vaš e -poštni naslov

5. korak: Kopirajte kodo

% Namen: Roomba bo glede na svoje velikosti šla skozi vrt in razlikovala zelenjavo/sadje, ki je pripravljeno za nabiranje. % Vhodi: Senzorji Lightbump, Senzorji Cliff, Senzorji Bump, slika iz kamere % Izhodi: Kadar koli so svetlobni senzorji večji od praga, se roomba obrne in posname sliko, piska, če je polmer % zelenjave/sadja med določenim območjem. Koda se zlomi, ko roomba naleti na % objekt, astronavtu pošlje e -poštno sporočilo o tem, koliko sadja je pripravljeno za % pobiranja, in preslikavo gibanja roombe. % Uporaba: če in medtem, izjave, ukazi za risanje, e -poštna koda iz MATLAB -a

k = 0

tic

timerVal = tic

medtem ko je res

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba pojdi naprej L = r.getLightBumpers; LC = L.levi center; Rr = L. desno; Lf = L.levo; RC = L. desno središče; LF = L.levo spredaj; RF = L. desno spredaj; Q = 75; % prag. RTH = 30; %Visok rdeči prag RTL = 10; %Nizek rdeč prag B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; če je S.leftFront> PL1 || S.rightFront> PL1 % zazna, če je barva na tleh nad pragom r.stop pavza (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % premor za 2 sekundi img = r.getImage; %take image imshow (img)%display image [centres3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscircles (centri3, polmeri3); %poiščite kroge polmerov w/v določenem obsegu na sliki, če je radii3> = r1 T = 1 k = k+1 dist1 = 0,2.*elapsedTime %Če je zaznani polmer večji ali enak minimalni zahtevi %zrelega sadja, potem Roomba to sadje šteje drugače, če je polmer3 <= r3 T = 0 drugače T = 0 dist2 = 0,2.*elapsedTime %Če ne, potem ne šteje konca sadja

če je T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Če je bilo zaznano sadje, potem na Roombi prikažite številko, %naredite hrup in obrnite elseif T == 2 r.turnAngle (78) %Če odkrijete 2 sadeža, zavijte, da nadaljujete skozi %vrt else r.turnAngle (78) %Če plodov ne zaznate, zavrtite za nadaljevanje skozi %end end če je LC> Q r.stop r.turnAngle (-7) drugače, če RC> Q r.stop r.turnAngle (7) drugače, če 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 %Če katera od vrednosti svetlobnih odbijačev preseže prag, potem %Roomba se bo nekoliko obrnil v ustrezno smer, da se izogne %udarcu v steno

če je B. desno == 1 || B.levo == 1 || B. spredaj == 1 dist3 = 0,2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Če kateri od udarci, potem roomba predvaja zvok, se vrti, %in zlomi kodo

prelomni konec

end scatter (0.533, 0, '^') hold on scatter (0.533, dist1, '<') hold on scatter (-dist2, dist1, 'v') hold on scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

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

setpref ('Internet', 'E_mail', pošta); setpref ('Internet', 'SMTP_Server', host) rekviziti = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pošta); props.setProperty ('mail.smtp.host', gostitelj); props.setProperty ('mail.smtp.port', vrata); 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', vrata); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (pošta, "Pozdravljeni astronavt! Na vrtu je toliko sadja", kmsg, {'movement.png'})

Priporočena: