Spisu treści:

Garden Helper Roomba Bot: 8 kroków
Garden Helper Roomba Bot: 8 kroków

Wideo: Garden Helper Roomba Bot: 8 kroków

Wideo: Garden Helper Roomba Bot: 8 kroków
Wideo: Who Can Clean Better? #Shorts 2024, Listopad
Anonim
Pomocnik ogrodowy Roomba Bot
Pomocnik ogrodowy Roomba Bot

Kiara Myers, Ahmad Alghadeer i Madison Tippet

Cel, powód:

Ta instrukcja nauczy Cię, jak zaprogramować Roomba Bot za pomocą MATLAB, aby poruszać się po ogrodzie, wykrywając okrągłe owoce / warzywa, które są wystarczająco dojrzałe, aby można je było zbierać na podstawie ich wielkości. Ten robot wysyła również wiadomość e-mail, informując o tym, ile owoców jest gotowych do zebrania i jaką drogę przebył.

Cechy:

  • Wykorzystuje czujniki światła do wykrywania ścian i lekko się obraca, aby uniknąć uderzenia w nie
  • Wykorzystuje czujniki uderzeniowe, aby przerwać program, gdy uderzy w skałę na końcu ogrodu
  • Wykorzystuje przetwarzanie obrazu do wykrycia okręgu w ogrodzie, a następnie określenia jego promienia
  • Wykorzystuje czujniki klifu do wykrywania kolorowej taśmy, która wskazuje na obecność owocu

Krok 1: Materiały i zaopatrzenie:

  • Jeden laptop
  • MATLAB 2017
  • Odkurzacz Roomba
  • Malina Pi
  • Drewniane bloki
  • Biały papier
  • Czarny papier
  • Kolorowa taśma/cienki pasek kolorowego papieru
  • Duży kamień

Krok 2:

Krok 3: Składanie „ogrodu”

Składanie Twojego
Składanie Twojego
  1. Weź swój czarny papier i wytnij kółka o różnych rozmiarach
  2. Przyklej te czarne kółka na dużym białym papierze

    Ten kontrast będzie niezbędny przy wykrywaniu owocu

  3. Użyj swoich drewnianych klocków, aby zbudować przypominającą labirynt ścieżkę ogrodową, w której robot będzie się poruszał

    Wybraliśmy ścieżkę w kształcie litery U, jak na zdjęciu powyżej

  4. Na końcu ogrodu dodaj kamień, drzwi lub inny przedmiot, aby robot wiedział, że to jest gotowe
  5. Przyklej swój biały papier kółkiem do ścian ogrodu

    Przyklejaliśmy go wiaderkami, bo nasze ściany były za krótkie na kamerę

  6. Połóż kolorową taśmę / cienki pasek kolorowego papieru na ziemi przed owocami

Krok 4: Pisanie kodu

Poruszanie się po ogrodzie

Korzystanie z czujników uderzeń: Aby uruchomić program, umieszczamy kod w instrukcji while, która przechodzi przez różne instrukcje if, aż do złamania kodu. Jeśli któryś z bumperów zostanie trafiony, spowoduje to, że ich wartość będzie równa true (co w Boolean to wartość 1). Instrukcja if służy do złamania kodu, gdy jedna z ich wartości jest równa 1.

Korzystanie z czujników klifu: W instrukcji while używamy instrukcji if, aby poinformować robota Roomba, kiedy dotarł on do lokalizacji rośliny. Roomba wykrywa kolorową taśmę na podłodze, badając próg czerwieni, który wychwytują czujniki klifu. Jeśli lewy lub prawy czujnik klifu wykryje kolor z wyższym progiem niż ziemia, zatrzyma robota na 2 sekundy (używając polecenia pauzy). W ciągu tych 2 sekund Roomba zrobi i wyświetli obraz owocu. Korzystając z wbudowanego polecenia imfindcircles, ustaw zakres promieni swoich kręgów, a Roomba znajdzie tak zwany owoc.

Korzystanie z przetwarzania obrazu: W instrukcji if osadzamy inne stwierdzenie if, które mówi: jeśli wykryty promień, promienie3, jest większy lub równy naszemu minimalnemu wymaganiu dojrzałego owocu, r1 (ty decydujesz), a następnie policz i wyświetl dalej Roomba ile owoców jest gotowych i odwrócić się, aby kontynuować przez ogród. Jeśli nie, kolej na kontynuowanie przez ogród. Uwaga: może być konieczne dostosowanie kąta skrętu, ponieważ każdy Roomba jest inny

Korzystanie z lekkich zderzaków: W innym oświadczeniu if, lekkie zderzaki są analizowane, aby upewnić się, że żaden z nich nie przekroczy ustalonego przez nas progu. Jeśli lewy, prawy, lewy środkowy, prawy środkowy, lewy przedni lub prawy przedni zderzak znajdzie się powyżej progu, Roomba lekko skręci pod odpowiednim kątem, aby uniknąć uderzenia w ścianę. Stąd poruszanie się po labiryncie.

Reszta kodu służy do wykreślenia ścieżki, którą obrał Roomba, a następnie wysłania wyników na Twój e-mail

Krok 5: Skopiuj kod

% Cel: Na podstawie swoich rozmiarów robot Roomba przejdzie przez ogród i rozróżni warzywa/owoce, które są gotowe do zbioru. % Wejścia: czujniki światła, czujniki urwiska, czujniki uderzenia, obraz z kamery % Wyjścia: Za każdym razem, gdy czujniki światła są większe niż próg, Roomba obróci się i zrobi zdjęcie, jeśli promień % warzyw/owoców mieści się w określonym zakresie. Kod łamie się, gdy Roomba wpada na % obiekt, wysyła astronaucie e-mail z informacją, ile owoców jest gotowych do zebrania % i mapuje ruchy Roomby. % Użycie: instrukcje if i while, polecenia kreślenia, kod e-mail z MATLAB

k=0

tik

timerVal=tic

podczas gdy prawda

v=0,2; % prędkość r.setDriveVelocity(v, v);%roomba przejdź do przodu L=r.getLightBumpers; LC=L.lewaŚrodek; Rr=L.prawo; Lf=L.lewa; RC=L.prawośrodek; LF=L.lewyPrzód; RF=L. PrawyPrzód; Q= 75; % próg. RTH=30; %Wysoki próg czerwony RTL=10; %Niski próg czerwony B=r.getBumpers S=r.getCliffSensors; r1=24; r3=10; PL1=1800; jeśli S.leftFront > PL1 || S.rightFront > PL1 % wykrywa, czy kolor na ziemi przekracza próg r.stop pause(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % pauzy przez 2 sekundy img = r.getImage; %robienie obrazu imshow(img)%wyświetlanie obrazu [centers3, promienie3] = imfindcircles(img, [30 50], „biegunowość obiektu”, „ciemny”, „czułość”, 0,9); h = lepkość (środki3, promienie3); % szukaj okręgów o promieniach w/w określonym zakresie na obrazku, jeśli promienie3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime % Jeśli wykryty promień jest większy lub równy minimalnemu wymaganemu % dojrzałego owocu, to Roomba liczy ten owoc elseif promienie3<=r3 T=0 else T=0 dist2=0.2.*elapsedTime % Jeśli nie, to nie liczy końca owocu

if T==1 r.setLEDDigits(num2str(k)) r.beep r.beep r.beep r.turnAngle(78) %Jeżeli wykryto owoc, wyświetl numer na Roombie, %zrób dźwięk i włącz elseif T==2 r.turnAngle(78) %Jeśli wykryto 2 owoce, odwróć, aby kontynuować przez %garden else r.turnAngle(78) %Jeśli nie wykryto żadnych owoców, odwróć, aby kontynuować przez %garden end end if 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 %Jeśli którakolwiek z wartości zderzaków świetlnych przekroczy próg, to %roomba obróci się lekko w odpowiednim kierunku, aby uniknąć % uderzenia w ścianę

jeśli B.prawo ==1 || B.lewo==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Jeśli którykolwiek z bumpery są uderzane, potem Roomba odtwarza dźwięk, obraca się, % i łamie kod

przerwać koniec

end scatter(0.533, 0, '^') przytrzymaj rozproszone(0.533, dist1, '<') wstrzymaj scatter(-dist2, dist1, 'v') wstrzymaj scatter(-dist2, 0, 'd') saveas (gcf, 'Ruch.png')

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

setpref('Internet', 'E_mail', poczta); setpref('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty('poczta.smtp.użytkownik', poczta); props.setProperty('poczta.smtp.host', host); props.setProperty('poczta.smtp.port', port); props.setProperty('mail.smtp.starttls.enable', 'prawda'); props.setProperty('mail.smtp.debug', 'prawda'); props.setProperty('mail.smtp.auth', 'prawda'); 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, 'Witaj Astronauta! W ogrodzie jest tyle owoców', kmsg, {'movement.png'})

Zalecana: