Obsah:

Garden Helper Roomba Bot: 8 kroků
Garden Helper Roomba Bot: 8 kroků

Video: Garden Helper Roomba Bot: 8 kroků

Video: Garden Helper Roomba Bot: 8 kroků
Video: You’re welcome 😚 #Roomba #maintenance 2024, Listopad
Anonim
Zahradní pomocník Roomba Bot
Zahradní pomocník Roomba Bot

Kiara Myers, Ahmad Alghadeer a Madison Tippet

Účel:

Tento instruktážní program vás naučí, jak pomocí robota Roomba Bot pomocí MATLABu procházet zahradou a detekovat ovoce/zeleninu kruhového tvaru, které jsou dostatečně zralé na sběr podle jejich velikosti. Tento robot vám také pošle e -mail s upozorněním, kolik ovoce je připraveno k vyzvednutí a cestu, po které cestoval.

Funkce:

  • Používá světelné senzory k detekci stěn a mírnému otočení, aby se zabránilo jejich nárazu
  • Používá čidla nárazu, aby přerušila program, když narazí na skálu na konci zahrady
  • Pomocí zpracování obrazu detekuje kruh v zahradě a poté určuje jeho poloměr
  • Používá senzory útesu k detekci barevné pásky, která indikuje přítomnost ovoce

Krok 1: Materiály a zásoby:

  • Jeden notebook
  • MATLAB 2017
  • Vysavač Roomba
  • Raspberry Pi
  • Dřevěné bloky
  • Bílý papír
  • Černý papír
  • Barevná páska/tenký proužek barevného papíru
  • Velká skála

Krok 2:

Krok 3: Sestavení „zahrady“

Sestavování vašeho
Sestavování vašeho
  1. Vezměte si černý papír a vystřihněte kruhy různých velikostí
  2. Tyto černé kruhy nalepte na velký bílý papír

    Tento kontrast bude nezbytný při detekci ovoce

  3. Vytvořte ze svých dřevěných bloků zahradní cestu podobnou bludišti, kterou bude váš robot navigovat

    Vybrali jsme cestu ve tvaru písmene U, jak je znázorněno výše

  4. Na konci vaší zahrady přidejte kámen nebo dveře nebo jiný předmět, aby váš robot věděl, že je hotovo
  5. Přilepte bílý papír s kruhem na stěny zahrady

    K lepení jsme použili kbelíky, protože naše stěny byly pro kameru příliš krátké

  6. Před ovoce dejte na zem barevnou pásku/tenký proužek barevného papíru

Krok 4: Psaní kódu

Navigace v zahradě

Použití snímačů nárazu: Ke spuštění programu vložíme kódování do příkazu while, který prochází různými příkazy if, dokud není kód rozbit. Pokud dojde k zásahu některého z nárazníků, bude to mít za následek jejich hodnotu rovnající se true (což je v Boolean hodnota 1). Příkaz if se používá k prolomení kódu, když se jedna z jejich hodnot rovná 1.

Používání snímačů útesu: V příkazu while používáme příkaz if, abychom Roombě řekli, kdy dorazil na místo závodu. Roomba detekuje barevnou pásku na podlaze tím, že zkoumá práh červené, který snímají senzory útesu. Pokud levý nebo pravý snímač útesu detekuje barvu s vyšším prahem, než je u země, zastaví robota na 2 sekundy (pomocí příkazu pauza). Během těchto 2 sekund Roomba pořídí a zobrazí obrázek ovoce. Pomocí zabudovaného příkazu imfindcircles nastavte rozsah poloměrů kruhů a robot Roomba najde vaše takzvané ovoce.

Použití zpracování obrazu: Do příkazu if vložíme další příkaz if, který říká: pokud je zjištěný poloměr, poloměry3, větší nebo roven našemu minimálnímu požadavku na zralé ovoce, r1 (o tom rozhodnete vy), pak počítejte a zobrazte na Roomba, kolik ovoce je připraveno a otočte se, abyste pokračovali zahradou. Pokud ne, odbočte a pokračujte zahradou. Poznámka: Možná budete muset upravit úhel, který otočíte, protože každá Roomba je jiná

Použití světelných nárazníků: V jiném příkazu if jsou světelné nárazníky analyzovány, aby se zajistilo, že žádný z nich nebude větší než náš určený práh. Pokud se levý, pravý, levý střed, pravý střed, levý přední nebo pravý přední světelný nárazník dostane nad prahovou hodnotu, pak se Roomba mírně otočí v příslušném úhlu, aby se vyhnula nárazu do zdi. Proto navigace bludištěm.

Zbytek kódu se použije k vykreslení cesty, kterou prošel robot Roomba, a poté odešlete výsledky na váš e -mail

Krok 5: Zkopírujte kód

% Účel: Na základě svých velikostí projde roomba zahradou a rozlišuje zeleninu/ovoce, které jsou připraveny k vyzvednutí. % Vstupy: Senzory Lightbump, Cliff senzory, Bump senzory, obraz z kamery % Výstupy: Kdykoli jsou světelné senzory větší než prahová hodnota, robot Roomba se otočí a pořídí obrázek, pípne, pokud je poloměr % zeleniny/ovoce mezi konkrétním rozsahem. Kód se rozbije, když roomba narazí na % objekt, pošle astronautovi e -mail o tom, kolik ovoce je připraveno k % vyzvednutí a mapování pohybu roomba. % Použití: Příkazy if and while, vykreslování příkazů, e -mailový kód z MATLABu

k = 0

tic

timerVal = tic

zatímco pravda

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba jít vpřed L = r.getLightBumpers; LC = L.leftCenter; Rr = L. vpravo; Lf = L. vlevo; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % práh. RTH = 30; %Vysoký červený práh RTL = 10; %Nízký červený práh B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; pokud S.leftFront> PL1 || S.rightFront> PL1 % detekuje, zda je barva na zemi nad prahem 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); %hledejte kruhy poloměrů v uvedeném rozsahu na obrázku, pokud poloměry3> = r1 T = 1 k = k+1 dist1 = 0,2.*elapsedTime %Pokud je detekovaný poloměr větší nebo roven minimálnímu %požadavku zralého ovoce, pak Roomba počítá toto ovoce jinak rádius3 <= r3 T = 0 jinak T = 0 dist2 = 0,2.*elapsedTime %Pokud ne, pak nepočítá konec ovoce

pokud T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Pokud bylo zjištěno ovoce, zobrazte číslo na Roomba, %vydejte zvuk a otočte elseif T == 2 r.turnAngle (78) %Pokud jsou detekovány 2 plody, pak otočením pokračujte skrz %garden else r.turnAngle (78) %Pokud není detekováno žádné ovoce, pak otočením pokračujte přes konec konce zahrady % pokud 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 %Pokud některá z hodnot světelných nárazníků překročí prahovou hodnotu, pak %Roomba se mírně otočí příslušným směrem, aby se zabránilo %nárazu na zeď

pokud B.right == 1 || B.left == 1 || B.front == 1 dist3 = 0,2.*Uplynulý čas r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Pokud některý z jsou zasaženy bumbery, pak roomba přehraje zvuk, otočí se, %a rozbije kód

konec konce

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]' heslo = 'Srsora123#' host = 'smtp.gmail.com' port = '465'

setpref ('Internet', 'E_mail', pošta); setpref ('Internet', 'SMTP_Server', hostitel) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', hostitel); 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! Na zahradě je tolik ovoce“, kmsg, {'movement.png'})

Doporučuje: