Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
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
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
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
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
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!!