Obsah:

Záhradný pomocník Roomba Bot: 8 krokov
Záhradný pomocník Roomba Bot: 8 krokov

Video: Záhradný pomocník Roomba Bot: 8 krokov

Video: Záhradný pomocník Roomba Bot: 8 krokov
Video: Test robotickych vysavacov iRobot Roomba 880 vs LG Home-Bot 2024, November
Anonim
Záhradný pomocník Roomba Bot
Záhradný pomocník Roomba Bot

Kiara Myers, Ahmad Alghadeer a Madison Tippet

Účel:

Tento návod vás naučí, ako naprogramovať robota Roomba pomocou systému MATLAB na prechádzanie záhradou a zisťovať ovocie/zeleninu v kruhovom tvare, ktoré sú dostatočne zrelé na zber podľa ich veľkosti. Tento robot vám tiež pošle e -mail s upozornením, koľko ovocia je pripravených na zber a cesta, po ktorej cestoval.

Vlastnosti:

  • Na detekciu stien používa mierne svetelné snímače a mierne sa otáča, aby do nich nenarazil
  • Používa nárazové senzory, aby prerušil program, keď narazí na skalu na konci záhrady
  • Využíva spracovanie obrazu na detekciu kruhu v záhrade a potom na určenie jeho polomeru
  • Na detekciu farebnej pásky, ktorá indikuje prítomnosť ovocia, používa snímače útesu

Krok 1: Materiály a zásoby:

  • Jeden notebook
  • MATLAB 2017
  • Vysávač Roomba
  • Malinový koláč
  • Drevené bloky
  • Biely papier
  • Čierny papier
  • Farebná páska/tenký pásik farebného papiera
  • Veľká skala

Krok 2:

Krok 3: Zostavenie „záhrady“

Zostavenie vášho
Zostavenie vášho
  1. Vezmite si čierny papier a nastrihajte kruhy rôznych veľkostí
  2. Prilepte tieto čierne kruhy na veľký biely papier

    Tento kontrast bude potrebný pri detekcii ovocia

  3. Vytvorte zo svojich drevených blokov záhradnú cestu podobnú bludisku, ktorou sa bude váš robot pohybovať

    Vybrali sme si cestu v tvare U ako na obrázku vyššie

  4. Na konci svojej záhrady pridajte skalu alebo dvere alebo iný predmet, aby váš robot vedel, že je hotový
  5. Prilepte biely papier kruhom na steny v záhrade

    Na lepenie sme použili vedrá, pretože naše steny boli na fotoaparát príliš krátke

  6. Farebnú pásku/tenký pásik farebného papiera položte na zem pred ovocie

Krok 4: Napíšte kód

Navigácia v záhrade

Použitie nárazových senzorov: Na spustenie programu vložíme kódovanie do príkazu while, ktorý prechádza rôznymi príkazmi if, kým nie je kód zlomený. Ak dôjde k zásahu ktoréhokoľvek z mikrospotov, bude to mať za následok, že ich hodnota sa bude rovnať true (čo v logickej hodnote je hodnota 1). Príkaz if sa používa na prelomenie kódu, ak sa jedna z ich hodnôt rovná 1.

Používanie útesových senzorov: V príkaze while používame príkaz if, aby sme robotovi Roomba oznámili, kedy dorazil na miesto závodu. Roomba detekuje farebnú pásku na podlahe skúmaním prahu červenej, ktorý zachytia senzory útesu. Ak ľavý alebo pravý snímač útesu detekuje farbu s vyšším prahom, než je úroveň zeme, zastaví robota na 2 sekundy (pomocou príkazu pozastavenia). Počas týchto 2 sekúnd Roomba nasníma a zobrazí obrázok ovocia. Pomocou zabudovaného príkazu imfindcircles nastavte rozsah polomerov kruhov a robot Roomba nájde vaše takzvané ovocie.

Použitie spracovania obrazu: Do príkazu if vložíme ďalší príkaz if, ktorý hovorí: ak je zistený polomer, polomery3, väčší alebo rovný našej minimálnej požiadavke na zrelé ovocie, r1 (o tom rozhodnete vy), potom počítajte a zobrazte na Roomba, koľko ovocia je pripravených, a otočte sa, aby ste pokračovali záhradou. Ak nie, odbočte a pokračujte záhradou. Poznámka: Možno budete musieť nastaviť uhol, ktorý otočíte, pretože každá Roomba je iná

Použitie svetelných nárazníkov: V inom prípade, ak sú svetelné nárazníky analyzované, aby sa zaistilo, že žiaden z nich nebude vyšší ako náš určený prah. Ak ľavý, pravý, ľavý stred, pravý stred, ľavý predný alebo pravý predný nárazník svetla prekročí prahovú hodnotu, potom sa Roomba otočí mierne v príslušnom uhle, aby nedošlo k nárazu na stenu. Preto navigácia v bludisku.

Zvyšok kódu sa použije na vykreslenie cesty vykonanej robotom Roomba a potom odošle výsledky na váš e -mail

Krok 5: Skopírujte kód

Účel: Na základe svojich rozmerov prejde roomba záhradou a rozlíši zeleninu/ovocie, ktoré sú pripravené na zber. % Vstupy: Senzory Lightbump, Senzory útesu, Senzory nárazu, obraz z kamery % Výstupy: Kedykoľvek sú svetelné senzory vyššie ako prah, robot Roomba sa otočí a nasníma obrázok, pípne, ak je polomer % zeleniny/ovocia medzi konkrétnym rozsahom. Kód sa rozbije, keď robot Roomba narazí na % objekt, pošle astronautovi e -mail s informáciami o tom, koľko ovocia je pripravených na vyzdvihnutie, a mapovanie pohybu robota. % Použitie: Príkazy if a while, vykresľovanie príkazov, e -mailový kód z MATLABu

k = 0

tic

timerVal = tic

kým je to pravda

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba ísť dopredu L = r.getLightBumpers; LC = L.leftCenter; Rr = L. vpravo; Lf = L.vľavo; RC = L.rightCenter; LF = L.vľavo vpredu; RF = L.rightFront; Q = 75; % prah. RTH = 30; %Vysoký červený prah RTL = 10; %Nízky červený prah B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; ak S.leftFront> PL1 || S.rightFront> PL1 % detekuje, či je farba na zemi nad prahom r.stop pauza (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % pauza na 2 sekundy img = r.getImage; %take image imshow (img)%display image [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0,9); h = viscircles (center3, radius3); %vyhľadajte kruhy polomerov so špecifikovaným rozsahom na obrázku, ak polomery3> = r1 T = 1 k = k+1 dist1 = 0,2.*elapsedTime %ak je zistený polomer väčší alebo rovný minimálnej %požiadavke na zrelé ovocie, potom Roomba počíta toto ovocie, inak polomery3 <= r3 T = 0 inak T = 0 dist2 = 0,2.*elapsedTime %Ak nie, potom nepočíta koniec ovocia

ak T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Ak bolo zistené ovocie, zobrazte číslo na robote Roomba, %urobte hluk a otočte elseif T == 2 r.turnAngle (78) %Ak sú zistené 2 plody, potom otočením pokračujte cez %garden else r.turnAngle (78) %Ak nie sú zistené žiadne plody, potom otočením pokračujte cez koniec konca %záhrady ak 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 %Ak niektorá z hodnôt svetelných nárazníkov prekročí prahovú hodnotu, potom %Roomba sa mierne otočí príslušným smerom, aby sa zabránilo %nárazu na stenu

ak B.right == 1 || B.vľavo == 1 || B.front == 1 dist3 = 0,2.*Uplynul Uplynulý čas r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Ak niektorý z udrú sa bumbery, potom roomba prehrá zvuk, roztočí sa, %a prelomí kód

zlomový koniec

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

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

setpref ('Internet', 'E_mail', pošta); setpref ('Internet', 'SMTP_Server', hostiteľ) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', hostiteľ); 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 (mail: „Ahoj, astronaut! V záhrade je toľko ovocia“, kmsg, {'movement.png'})

Odporúča: