2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
W projekcie wykorzystano MATLAB oraz programowalnego robota iRobot Create2. Testując naszą wiedzę na temat MATLAB, jesteśmy w stanie zaprogramować Create2 do interpretacji obrazów i wykrywania sygnałów. Funkcjonalność robota zależy głównie od aplikacji mobilnej MATLAB oraz modułu kamery Raspberry Pi.
Krok 1: Części i materiały
1. iRobot Create, wersja 2
- To programowalny robot, który wygląda jak Roomba. Należy pamiętać, że ten produkt firmy iRobot nie jest odkurzaczem. Przeznaczony jest do samodzielnego programowania przez użytkownika.
2. MATLAB 2017a
- Większość starszych wersji będzie zgodna z kodem, którego użyliśmy poniżej. MATLAB zidentyfikuje polecenie, które nie jest kompatybilne z posiadaną wersją i zaproponuje najlepiej dopasowane polecenie.
3. Raspberry Pi 3 Model B, wersja 1.2
- Sprawdź, które Raspberry Pi jest zgodne z Twoim iRobotem. Zobacz ten link, aby uzyskać dalszą pomoc: https://www.irobotweb.com/~/media/MainSite/PDFs/A… Ta instrukcja zakłada, że pracujesz z zaprogramowanym Raspberry Pi. Pamiętaj, że będziesz musiał pracować z zaprogramowanym Pi, aby poniższe kroki zadziałały. Korzystanie z zaprogramowanego Pi pozwoli Ci na samodzielne wykonanie całego kodu w MATLAB.
4. Moduł kamery V2 (dla Raspberry Pi)
- Możesz być zaskoczony; pomimo swoich rozmiarów moduł kamery Raspberry Pi jest bardzo dobrej jakości. Jest to najtańsza i najbardziej kompatybilna opcja dla tego projektu.
Opcjonalnie: stojak z nadrukiem 3D. Służy do stabilizacji aparatu. Nie wpływa to na funkcjonalność robota, ale pomoże w kodowaniu, jeśli chcesz wykorzystać dane obrazowania do rozpoznawania kolorów i/lub obiektów.
Krok 2: Konfiguracja
1. Podłączanie Raspberry Pi i modułu kamery (sprzęt)
- Aby zasilić Raspberry Pi, musisz podłączyć męską końcówkę micro USB do żeńskiego portu zasilania w mikrokontrolerze. Opcjonalnie: można zastosować regulator napięcia, aby zapewnić, że napięcie nie przekracza 5V. Po zasileniu Raspberry Pi, możesz podłączyć go do robota, podłączając męski koniec USB a z płyty głównej do portu USB A w mikrokontrolerze.
- Po podłączeniu Pi do Roomby kamera jest gotowa do instalacji. Moduł kamery będzie znacznie mniejszy niż się spodziewasz. Zwróć uwagę, że obiektyw jest przymocowany do czujnika, a od aparatu wystaje biała wstążka. NIE usuwaj ani nie rozrywaj taśmy! To jest kabel, którego potrzebujesz, aby podłączyć go do Raspberry Pi. Najpierw przytrzymaj koniec taśmy i znajdź srebrne złącza i niebieski kabel. Są po przeciwnych stronach. Następnie znajdź gniazdo między portami Ethernet i HDMI w swoim Raspberry Pi. Zauważ, że zakrywa go mały, biały zamek. Powoli unieś blokadę, ale nie wyjmuj jej z gniazda, ponieważ pęknie i zostanie trwale uszkodzona. Po podniesieniu blokady chwyć wstążkę i skieruj srebrne złącza do portu HDMI. Niebieska strona będzie skierowana w stronę portu Ethernet. Powoli wsuń taśmę do gniazda, gdy jest jeszcze odblokowana. Nie musisz wciskać go na siłę do gniazda. Po włożeniu, wciśnij blokadę z powrotem w dół. Jeśli twoja kamera jest odpowiednio zabezpieczona, powinieneś być w stanie (delikatnie) pociągnąć za wstążkę i wyczuć napięcie. Wstążka nie powinna być luźna. Po podłączeniu kamery do Pi możesz zauważyć, jak jest luźna. Dlatego do jego stabilizacji użyliśmy uchwytu wydrukowanego w 3D. To do Ciebie należy określenie, jakich materiałów chcesz użyć, aby aparat był nieruchomy w celu uzyskania wysokiej jakości obrazu.
2. Instalowanie odpowiednich plików i podłączanie robota Roomba do komputera Po skonfigurowaniu całego sprzętu możesz teraz przejść do instalacji MATLAB wraz z powiązanymi m-plikami, które umożliwiają komunikację z robotem. Aby to zrobić, otwórz MATLAB i utwórz nowy folder, aby przechowywać wszystkie powiązane pliki razem. Użyj tego skryptu, aby zainstalować/zaktualizować wymagane pliki:
- Wszystkie pliki powinny teraz pojawić się w utworzonym folderze. Kliknij prawym przyciskiem myszy w oknie Bieżący folder i wybierz „Dodaj do ścieżki”, aby dodać tę ścieżkę do listy katalogów, w których MATLAB szuka plików. Upewnij się, że wszystkie pliki znajdują się we właściwej ścieżce.
3. Po zainstalowaniu plików możesz teraz zacząć łączyć się z robotem. Zacznij od włączenia robota, a następnie twardego resetu bezpośrednio po uruchomieniu (nie zapomnij o twardym zresetowaniu robota za każdym razem przed i po użyciu). Po drugie, podłącz robota i laptopa do tej samej sieci Wi-Fi. Następnie porozmawiamy z zaprogramowanym Raspberry Pi przez MATLAB, wywołując Roombę przy użyciu jego nazwy i funkcji Roomba. Na przykład połączyłbym się z robotem 28 za pomocą następującego wiersza: R = roomba(28).
- Zwróć uwagę, jak przypisałem obiekt do zmiennej R. Teraz mogę uzyskać dostęp do powiązanych funkcji Roomby z pliku instalacyjnego, traktując zmienną R jak strukturę.
- R.turnAngle(90) Jeśli wszystko poszło dobrze, powinien zagrać dźwięk potwierdzający połączenie.
Krok 3: Logika MATLAB
Dokument PDF na dole tego kroku to szczegółowy schemat logiczny dla naszego procesu kodowania w MATLAB. Aktywowaliśmy czujniki urwiska, światła i uderzeń świetlnych, aby umożliwić robotowi komunikowanie się z nami, gdy wykryje obiekt w jego bezpośrednim sąsiedztwie. Na przykład, gdy robot porusza się do przodu, jego czujniki światła skanują w poszukiwaniu obiektów na swojej drodze zgodnie z wektorem, w którym się porusza. Wybraliśmy próg odległości dla robota, aby zbliżając się do obiektu, odwrócił się, zamiast się z nim zderzać. Nasz robot jest również skonfigurowany z Twitterem, który określiliśmy w naszym procesie kodowania (zostanie to pokazane poniżej).
Aby zwiększyć wrażenia, wykorzystaliśmy aplikację MATLAB na naszych urządzeniach mobilnych, dzięki czemu możemy kontrolować ruchy robota po prostu przechylając telefony. Jest to czynność opcjonalna, ponieważ z pewnością możesz przenieść robota, używając zamiast tego polecenia moveDistance w segmencie kodu MATLAB. Pamiętaj, że używanie poleceń MATLAB do sterowania robotem jest preferowane, jeśli Twoim celem jest precyzja. Jeśli chcesz nakierować robota tak, aby kamera wykonała zdjęcie w określonym miejscu, lepiej zakodować ruchy robota w MATLAB. Podczas zabawy używanie aplikacji MATLAB do sterowania robotem nie jest pożądane ze względu na dokładność.
Kod nakazuje robotowi Roomba wykonanie podstawowej konfiguracji, a następnie kontynuowanie ciągłej pętli. Początkowo laptop skonfiguruje połączenie z Roombą za pomocą polecenia Roomba(). Konfiguruje również połączenie z Twitterem za pomocą polecenia webwrite() w MATLAB. Pętla zawiera pięć głównych przepływów logicznych w zależności od środowiska otaczającego Roombę. Najpierw Roomba sprawdza, czy nie ma przeszkód i cofa się, jeśli napotka przeszkody. Wbudowana w tę pętlę jest drugą ścieżką, która ostrzega użytkowników, jeśli Roomba jest zabierana. Ważna użyteczność w surowej marsjańskiej strefie wojennej. Gdy robot Roomba ustali, że jego pozycja jest bezpieczna, sprawdza urządzenie mobilne, aby określić swój następny ruch. Jeśli urządzenie mobilne jest przechylone do przodu, obliczy prędkość bazową w zależności od nasilenia pomiaru przechyłu, a następnie dostosuje prędkość poszczególnych kół do skrętu w oparciu o stopień nachylenia. Telefon może również poruszać Roombę do tyłu. Neutralny stan urządzenia mobilnego bramkuje ostatnie dwie ścieżki. Odpoczywająca robota Roomba wyszuka flagę Obcego i odpowiednio ostrzeże użytkownika.
Poniżej nasz kod (ukończony w MATLAB 2017a)
%inputs: dane orientacji z urządzenia podłączonego do Wi-Fi, kamery
%informacje, dane czujnika
%wyjścia: ruch jest kontrolowany przez urządzenie podłączone do Wi-Fi i ruch
% jest sprawdzany pod kątem bezpieczeństwa poprzez odczyt danych z czujnika. Jeśli kamera wykryje
% obcej flagi, a następnie Roomba odpowie tweetem flagi wroga
% został zauważony.
%purpose: nasze urządzenie żyje bez celu, z wyjątkiem ochrony tych, którzy
% stworzyło go, służy swojemu twórcy i robi
% dokładnie tego, co powiedział.
%Usage: zasadniczo program będzie działał samodzielnie.
wyczyść wszystko, zamknij wszystko, clc
%Inicjalizacja obiektów i zmiennych
r=pokójba(28);
m=mobiledev;
%use response = webwrite(nazwa hosta, dane)
nazwa hosta = 'https://api.thingspeak.com/apps/thingtweet/1/statuses/update';
API='SGZCTNQXCWAHRCT5';
tweet='RoboCop działa…Oczekuje na polecenie';
data = strcat('api_key=', API, '&status=', tweet);
odpowiedź=webwrite(nazwa hosta, dane);
%stale działająca pętla
podczas gdy 1==1
%Struktury zawierające dane relatywne
o=m.orientacja; % orientacja urządzenia mobilnego
światło=r.getLightBumpers(); % wartości lekkiego zderzaka
a = r.getCliffSensors(); %CLiff wartości czujnika
uderzenie = r.getBumpers(); %Czujniki zderzaka
%sprawdź przerywniki
jeśli bump.right==1 || bump.left==1 ||bump.front==1
r.moveDistance(-.2,.2);
%sprawdź czujniki światła
elseif light.left>60 || jasny.lewyPrzód>60 || światło.lewoŚrodek>60 || światło.prawo>60 || light.rightFront>60 || jasna.prawaCentrum>60
r.moveDistance(-.2,.2);
%check Czujniki klifu
% Sygnał antykradzieżowy i powiadomienie
elseif a.lewa<300 && a.prawa<300 && a.lewaFront<300 && a.prawaFront<300
r.stop();
r.bip();
tweet='RoboCop został zniesiony!'
data = strcat('api_key=', API, '&status=', tweet);
odpowiedź=webwrite(nazwa hosta, dane);
%Normalna operacja unikania klifu
elseif a.left<300 || a.prawo<300 || a.lewyPrzód<300 || a.prawyPrzód<300
r.moveDistance(-.2,.2);
Program %Roomba przeszedł pomyślnie testy i będzie teraz działał normalnie.
% Początkowo rolka urządzenia jest mierzona i staje się podstawą
% prędkości, która jest następnie używana do obliczenia prędkości koła
%Ruch do przodu
elseif o(3)>=0 && o(3)<=60
baseVel=(-.5/60)*(o(3)-60);
jeśli o(2)>=-70 && o(2)<0
r.setDriveVelocity(baseVel+(.3/50)*abs(o(2)), baseVel-(.3/50)*abs(o(2)));
elseif o(2)=0
r.setDriveVelocity(baseVel-(.3/50)*abs(o(2)), baseVel+(.3/50)*abs(o(2)));
jeszcze r.stop
kończyć się
% Ruch wsteczny
elseif o(3)>100 i o(3)<150
r.setDriveVelocity(-.2, -.2)
r.bip();
r.bip();
%odpoczywający roomba będzie szukać Flagi Obcych oznaczonej jako fluorescencyjna
% zielony kawałek papieru
w przeciwnym razie
r.stop
img=r.getImage(); % zrób zdjęcie
próg=szarythresh(img(200:383,:,2))+.1; %calc poziom zieleni
jeśli próg>.42
tweet='Wykryto wroga!!'
data = strcat('api_key=', API, '&status=', tweet);
odpowiedź=webwrite(nazwa hosta, dane);
w przeciwnym razie
r.stop
kończyć się
kończyć się
kończyć się
Krok 4: Wniosek
Pamiętaj, że możesz użyć skryptu, który napisaliśmy powyżej, ale zawsze możesz go dostosować do swoich potrzeb. Nie musi być kontrolowany przez telefon! (Jednak to sprawia, że jest to przyjemniejsze.) Wybierz metodę, której wolisz używać do sterowania robotem. Jedź ze swoim robotem i ciesz się!