Spisu treści:

Mars Roomba: 6 kroków
Mars Roomba: 6 kroków

Wideo: Mars Roomba: 6 kroków

Wideo: Mars Roomba: 6 kroków
Wideo: #Lekcja 6 Rumba poziom Podstawowy 2024, Listopad
Anonim
Mars Roomba
Mars Roomba

Ten instruktaż poprowadzi Cię w kierunku obsługi bota próżniowego Roomba sterowanego przez Raspberry Pi. System operacyjny, którego będziemy używać, to MATLAB.

Krok 1: Materiały eksploatacyjne

Co będziesz musiał zebrać, aby zrealizować ten projekt:

  • Robot odkurzający iRobot Create2 Roomba
  • Malina Pi
  • Kamera Raspberry Pi
  • Najnowsza wersja MATLAB
  • Zestaw narzędzi do instalacji robota Roomba dla MATLAB
  • Aplikacja MATLAB na urządzenie komórkowe

Krok 2: Stwierdzenie problemu

Stwierdzenie problemu
Stwierdzenie problemu

Otrzymaliśmy zadanie wykorzystania MATLAB do opracowania łazika, który mógłby być używany na Marsie, aby pomóc naukowcom w gromadzeniu danych o planecie. Funkcje, które zajęliśmy się w naszym projekcie, obejmowały zdalne sterowanie, rozpoznawanie wpływu obiektów, rozpoznawanie wody, rozpoznawanie życia i przetwarzanie obrazu. Aby osiągnąć te wyczyny, zakodowaliśmy za pomocą poleceń z zestawu narzędzi Roomba, aby manipulować wieloma funkcjami iRobot Create2 Roomba.

Krok 3: Zdalne sterowanie Bluetooth

Pilot Bluetooth
Pilot Bluetooth

Ten slajd przejdzie przez kod, aby sterować ruchem robota Roomba za pomocą funkcji Bluetooth Twojego smartfona. Aby rozpocząć, pobierz aplikację MATLAB na swój smartfon i zaloguj się na swoje konto Mathworks. Po zalogowaniu przejdź do „więcej”, „ustawienia” i połącz się z komputerem za pomocą jego adresu IP. Po połączeniu wróć do „więcej” i wybierz „czujniki”. Stuknij w trzeci czujnik na górnym pasku narzędzi ekranu i stuknij w Start. Teraz Twój smartfon jest pilotem!

Kod wygląda następująco:

podczas gdy 0 == 0

pauza (.5)

DaneTelefonu = M. Orientacja;

Azi = Dane Telefonu(1);

Skok = Dane Telefonu(2);

Strona = Dane Telefonu(3);

wstrząsy = r.getBumpers;

jeśli strona>80 || Strona <-80

r.stop

r.beep('C, E, G, C^, G, E, C')

przerwa

elseif Bok>20 i Bok<40

r.turnAngle(-5);

elseif Strona>40

r.turnAngle(-25);

elseif Side-40

r.turnAngle(5);

strona elseif <-40

r.turnAngle(25);

kończyć się

jeśli skok > 10 i skok <35

r.moveDistance(.03)

elseif Skok>-35 && Skok <-10

r.moveDistance(-.03)

kończyć się

kończyć się

Krok 4: Rozpoznawanie wpływu

Rozpoznawanie wpływu
Rozpoznawanie wpływu

Kolejną funkcją, którą wdrożyliśmy, było wykrywanie uderzenia robota Roomba w obiekt, a następnie korygowanie jego aktualnej ścieżki. Aby to zrobić, musieliśmy użyć warunków warunkowych z odczytami z czujników zderzaka, aby określić, czy obiekt został uderzony. Jeśli robot uderzy w obiekt, cofnie się o 0,2 metra i obróci się pod kątem określonym przez uderzony zderzak. Po trafieniu w element pojawia się menu wyświetlające słowo „oof”.

Kod pokazano poniżej:

podczas gdy 0 == 0

wstrząsy = r.getBumpers;

r.setDriveVelocity(.1)

jeśli bumps.left == 1

msgbox('Oof!');

r.moveDistance(-0,2)

r.setTurnVelocity(.2)

r.turnAngle(-35)

r.setDriveVelocity(.2)

elseif uderzenia.przód == 1

msgbox('Oof!');

r.moveDistance(-0,2)

r.setTurnVelocity(.2)

kąt obrotu(90)

r.setDriveVelocity(.2)

elseif bumps.right == 1

msgbox('Oof!');

r.moveDistance(-0,2)

r.setTurnVelocity(.2)

kąt obrotu(35)

r.setDriveVelocity(.2)

elseif bumps.leftWheelDrop ==1

msgbox('Oof!');

r.moveDistance(-0,2)

r.setTurnVelocity(.2)

r.turnAngle(-35)

r.setDriveVelocity(.2)

elseif bumps.rightWheelDrop ==1

msgbox('Oof!');

r.moveDistance(-0,2)

r.setTurnVelocity(.2)

kąt obrotu(35)

r.setDriveVelocity(.2)

kończyć się

kończyć się

Krok 5: Rozpoznawanie życia

Rozpoznawanie życia
Rozpoznawanie życia

Zakodowaliśmy system rozpoznawania życia, który odczytywał kolory obiektów przed nim. Trzy rodzaje życia, które zakodowaliśmy, to rośliny, woda i kosmici. W tym celu zakodowaliśmy czujniki tak, aby obliczały średnie wartości koloru czerwonego, niebieskiego, zielonego lub białego. Wartości te zostały porównane z progami, które zostały ręcznie ustawione w celu określenia koloru, na który patrzy kamera. Kod wykreśliłby również ścieżkę do obiektu i stworzył mapę.

Kod wygląda następująco:

t = 10;

i = 0;

podczas gdy t == 10

img = r.getImage; pokaż(obraz)

pauza (0,167)

ja = ja + 1;

czerwona_średnia = średnia(średnia(img(:,:, 1)));

niebieska_średnia = średnia(średnia(img(:,:, 3)));

zielona_średnia = średnia(średnia(img(:,:, 2)));

biała_średnia = (niebieska_średnia + zielona_średnia + czerwona_średnia) / 3; % chcesz tę wartość ok. 100

dziewięć plus dziesięć = 21;

zielony_próg = 125;

niebieski_próg = 130;

biały_próg = 124;

czerwony_próg = 115;

podczas gdy nine_plus_ten == 21% zielony - życie

jeśli zielona_średnia > zielona_próg && niebieska_średnia < niebieska_próg && czerwona_średnia < czerwona_próg

r.moveDistance(-.1)

a = msgbox('znaleziono możliwe źródło życia, wykreślono lokalizację');

pauza(2)

usuń(a)

[y2, Fs2] =audioread('z_speak2.wav');

dźwięk(y2, Fs2)

pauza(2)

%roślina = r.getImage; %imshow(roślina);

%save('roślina_img.mat', roślina');

%wykreśl lokalizację na zielono

i = 5;

przerwa

w przeciwnym razie

dziewięć_plus_dziesięć = 19;

kończyć się

kończyć się

dziewięć_plus_dziesięć = 21;

podczas gdy nine_plus_ten == 21% niebieski - woder

jeśli niebieska_średnia > niebieska_próg && zielona_średnia < zielona_próg && biała_średnia < biała_próg && czerwona_średnia < czerwona_próg

r.moveDistance(-.1)

a = msgbox('znaleziono źródło wody, nakreślono lokalizację');

pauza(2)

usuń(a)

[y3, Fs3] =audioread('z_speak3.wav');

dźwięk(y3, Fs3);

%woder = r.getImage; %imshow(woder)

%save('water_img.mat', woda)

%lokacja wydruku na niebiesko

i = 5;

przerwa

w przeciwnym razie

dziewięć_plus_dziesięć = 19;

kończyć się

kończyć się

dziewięć_plus_dziesięć = 21;

podczas gdy nine_plus_ten == 21%biały - obcy monkaS

jeśli biała_średnia > biały_próg && niebieska_średnia < niebieski_próg && zielona_średnia < zielona_próg

[y5, Fs5] =audioread('z_speak5.wav');

dźwięk(y5, Fs5);

pauza(3)

r.setDriveVelocity(0,.5)

[ys, Fss] =audioread('z_scream.mp3');

dźwięk (ys, Fss);

pauza(3)

r.stop

% obcy = r.getImage; %imshow(obcy);

% save('alien_img.mat', obcy);

i = 5;

przerwa

w przeciwnym razie

dziewięć_plus_dziesięć = 19;

kończyć się

kończyć się

jeśli ja == 5

a = 1; %skręt kąta

t = 9; %zakończ dużą pętlę

i = 0;

kończyć się

kończyć się

Krok 6: Uruchom to

Po napisaniu całego kodu połącz go w jeden plik i voila! Twój bot Roomba będzie teraz w pełni funkcjonalny i działał zgodnie z reklamą! Jednak formant Bluetooth powinien znajdować się w osobnym pliku lub oddzielony od reszty kodu za pomocą %%.

Miłego korzystania z robota!!

Zalecana: