Spisu treści:

Roomba Explorer: 4 kroki
Roomba Explorer: 4 kroki

Wideo: Roomba Explorer: 4 kroki

Wideo: Roomba Explorer: 4 kroki
Wideo: Como resetear un robot aspirador Roomba 2024, Listopad
Anonim
Roomba Explorer
Roomba Explorer

Wykorzystując MATLAB i robota Create2 firmy iRobot, projekt ten zbada różne obszary nieznanej lokalizacji. Zastosowaliśmy czujniki robota, aby pomóc manewrować niebezpiecznym terenem. Pobierając zdjęcia i przekaz wideo z podłączonego Raspberry Pi, byliśmy w stanie określić przeszkody, z jakimi będzie musiał się zmierzyć Robot, i zostaną one sklasyfikowane.

Części i materiały

Do tego projektu będziesz potrzebować

-komputer

-najnowsza wersja MATLAB (do tego projektu użyto MATLAB R2018b)

- roombaZainstaluj zestaw narzędzi

- Robot Create2 firmy iRobot

-Raspberry Pi z kamerą

Krok 1: Inicjalizacja i czujniki

Inicjalizacja i czujniki
Inicjalizacja i czujniki

Przed rozpoczęciem jakiegokolwiek programowania pobraliśmy zestaw narzędzi roombaInstall, który umożliwiał dostęp do różnych komponentów Robota.

Początkowo stworzyliśmy GUI do inicjalizacji dowolnego robota. W tym celu należy wpisać numer Robota jako dane wejściowe. Umożliwi to dostęp do uruchomienia naszego programu do Robota. Pracowaliśmy nad tym, aby Robot poruszał się po wielu napotkanych terenach. Wdrożyliśmy czujniki urwiska, czujniki lekkiego uderzenia i czujniki fizycznego uderzenia, wykorzystując ich wyjścia do wyzwalania robota w celu zmiany jego prędkości lub kierunku. Gdy którykolwiek z sześciu czujników świetlnych uderzeń wykryje obiekt, wyprowadzana przez nie wartość zmniejszy się, powodując zmniejszenie prędkości robota, aby uniknąć kolizji pełnej prędkości. Gdy robot w końcu zderzy się z przeszkodą, czujniki fizycznego uderzenia zgłoszą wartość większą od zera; z tego powodu Robot zatrzyma się, więc nie będzie dalszych kolizji i będzie można uruchomić więcej funkcji. Czujniki klifu odczytają jasność otaczającego ich obszaru. Jeśli wartość jest większa niż 2800, ustaliliśmy, że Robot będzie na stabilnym podłożu i bezpieczny. Ale jeśli wartość jest mniejsza niż 800, czujniki klifu wykryją urwisko, natychmiast się zatrzymają, aby nie spaść. Każda wartość pomiędzy nimi została określona jako reprezentująca wodę i spowoduje, że Robot zatrzyma swoje działanie. Korzystając z powyższych czujników, zmienia się prędkość Robota, co pozwala nam lepiej określić, czy istnieje jakieś niebezpieczeństwo.

Poniżej znajduje się kod (z MATLAB R2018b)

%% inicjalizacji

dlgPrompts = {'Numer pokoju'};

dlgTitle = 'Wybierz swoją Roombę';

dlgDefaults = {''};

opts. Resize = 'włączone';

dlgout = inputdlg(dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Utwórz okno, które prosi użytkownika o wprowadzenie numeru Roomba

n=str2double(dlgout{1});

r=pokójba(n); % Inicjuje określone przez użytkownika Roomba %% Określanie prędkości z czujników świetlnych uderzeń, podczas gdy true s=r.getLightBumpers; % uzyskaj lekkie czujniki uderzeniowe

lbumpout_1=pole(a) wyodrębnienia, 'po lewej'; % pobiera wartości liczbowe czujników i czyni je bardziej użytecznymi lbumpout_2=extractfield(s, 'leftFront');

lbumpout_3=pole(a) ekstrakcji, 'leftCenter';

lbumpout_4=pole(a) ekstrakcji, 'rightCenter';

lbumpout_5=pole(a) ekstrakcji, 'rightFront';

lbumpout_6=pole(a) wyodrębniania, 'prawo';

lbout=[lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % konwertuje wartości na macierz

sLbump=sortuj(lbout); % sortuje macierz do najniższej wartości, którą można wyodrębnić

lowLbump=sLbump(1); speed=0,05+(lowLbump)*0,005 %używając najniższej wartości, która reprezentuje bliskie przeszkody, w celu określenia prędkości, wyższa prędkość, gdy nic nie wykryto

r.setDriveVelocity(prędkość, prędkość)

kończyć się

% fizycznych przerywników

b=r.getBumpery; % Wyjście prawda, fałsz

bsen_1=pole wyodrębnienia(b, 'po lewej')

bsen_2=pole wyodrębnienia(b, 'prawo')

bsen_3=pole ekstrakcji(b, 'przód')

bsen_4=pole wyodrębnienia(b, 'spadek lewego koła')

bsen_5=pole wyodrębniania(b, 'rightWheelDrop')

wstrząsy=[bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump=suma(bums)

if tbump>0 r.setDriveVelocity(0, 0)

kończyć się

% Czujniki urwiska

c=r.getCliffSensors %% 2800 bezpieczne, w przeciwnym razie woda

csen_1=pole wyodrębnienia(c, 'po lewej')

csen_2=pole wyodrębnienia(c, 'prawo')

csen_3=pole wyodrębnienia(c, 'lewy przód')

csen_4=pole wyodrębnienia(c, 'rightFront')

klify=[csen_1, csen_2, csen_3, csen_4]

ordcliff=sortuj(klify)

jeśli ordcliff(1) < 2750

r.setDriveVelocity(0, 0)

jeśli klif <800

disp 'klif'

w przeciwnym razie

wylej "wodę"

kończyć się

r. Kąt skrętu(45)

kończyć się

Krok 2: Uzyskiwanie danych

Po wyzwoleniu fizycznych czujników uderzeń robot zaimplementuje na pokładzie Raspberry Pi, aby zrobić zdjęcie przeszkody. Po wykonaniu zdjęcia, wykorzystując rozpoznawanie tekstu, jeśli na zdjęciu jest tekst, Robot określi, czym jest przeszkoda i co mówi przeszkoda.

img = r.getImage; imshow(img);

imwrite(img, 'imgfromcamera.jpg')

zdjęcie = imread('imgfromcamera.jpg')

ocrResults = ocr(zdjęcie)

rozpoznanyTekst = ocrResults. Tekst;

postać;

imshow(zdjęcie) text(220, 0, rozpoznany tekst, 'Kolor tła', [1 1 1]);

Krok 3: Zakończenie misji

Gdy Robot stwierdzi, że przeszkodą jest DOM, zakończy swoją misję i pozostanie w domu. Po zakończeniu misji Robot wyśle e-mail z powiadomieniem, że wrócił do domu, a także wyśle zdjęcia, które zrobił podczas swojej podróży.

% Wysyłać email

setpref('Internet', 'SMTP_Server', 'smtp.gmail.com');

setpref('Internet', 'E_mail', '[email protected]'); % konto pocztowe do wysłania z setpref('Internet', 'SMTP_Username', 'enter sender email'); % senders username setpref('Internet', 'SMTP_Password', 'wprowadź hasło nadawcy'); % Hasło nadawców

rekwizyty = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'prawda'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465');

sendmail('Wpisz e-mail odbierający', 'Roomba', 'Roomba wróciła do domu!!', 'imgfromcamera.jpg') % konto pocztowe do wysłania

Robot jest wtedy gotowy.

Krok 4: Wniosek

Wniosek
Wniosek

Dołączony program MATLAB jest oddzielony od całego skryptu, który był używany z Robotem. W ostatecznej wersji upewnij się, że cały kod, z wyjątkiem kroku inicjalizacji, został umieszczony w pętli while, aby upewnić się, że przerywniki są stale uruchomione. Program ten można edytować w celu dostosowania do potrzeb użytkownika. Pokazana jest konfiguracja naszego Robota.

*Przypomnienie: Nie zapomnij, że zestaw narzędzi roombaInstall jest potrzebny do interakcji MATLAB z robotem i wbudowanym Raspberry Pi.

Zalecana: