Spisu treści:

Roomba sterowana przez MATLAB: 5 kroków
Roomba sterowana przez MATLAB: 5 kroków

Wideo: Roomba sterowana przez MATLAB: 5 kroków

Wideo: Roomba sterowana przez MATLAB: 5 kroków
Wideo: Robot Poppy uczy się chodzić Poppy Humanoide Apprend la marche avec des danseuses 2024, Listopad
Anonim
Roomba sterowana przez MATLAB
Roomba sterowana przez MATLAB
Roomba sterowana przez MATLAB
Roomba sterowana przez MATLAB

Celem tego projektu jest wykorzystanie MATLAB oraz zmodyfikowanego programowalnego robota iRobot. Nasza grupa połączyła nasze umiejętności kodowania, aby stworzyć skrypt MATLAB, który wykorzystuje wiele funkcji iRobota, w tym czujniki urwiska, czujniki zderzaka, czujniki światła i kamerę. Wykorzystaliśmy te odczyty z czujników i kamer jako wejścia, co pozwoliło nam stworzyć określone wyjścia, które chcemy, używając funkcji i pętli kodu MATLAB. Używamy również urządzenia mobilnego MATLAB i żyroskopu jako sposobu na połączenie się z iRobotem i sterowanie nim.

Krok 1: Części i materiały

Części i materiały
Części i materiały
Części i materiały
Części i materiały
Części i materiały
Części i materiały
Części i materiały
Części i materiały

MATLAB 2018a

- Wersja MATLAB 2018 jest najbardziej preferowaną wersją, głównie dlatego, że najlepiej działa z kodem, który łączy się z urządzeniem mobilnym. Jednak większość naszego kodu można zinterpretować w większości wersji MATLAB.

iRobot Utwórz urządzenie

-To urządzenie jest specjalnie wykonanym urządzeniem, którego jedynym celem jest programowanie i kodowanie. (To nie jest rzeczywista próżnia)

Raspberry Pi (z kamerą)

- To niedroga płyta komputerowa, która działa jak mózg iRobota. Może być mały, ale jest zdolny do wielu rzeczy. Aparat jest dodatkowym dodatkiem. Wykorzystuje również raspberry pi, aby uzyskać wszystkie swoje funkcje i polecenia. Przedstawiona powyżej kamera jest zamontowana na stojaku z nadrukiem 3D, stworzonym przez wydziały Inżynierii Fundamentals na Uniwersytecie Tennessee

Krok 2: Plik bazy danych robota Roomba

Plik bazy danych Roomba
Plik bazy danych Roomba

Istnieje główny plik, którego będziesz potrzebować, aby korzystać z odpowiednich funkcji i poleceń dla Roomby. Ten plik jest miejscem, w którym napisałeś kod, z którego czerpiesz funkcje, aby ułatwić zarządzanie robotem Roomba.

Możesz pobrać plik pod tym linkiem lub plik do pobrania poniżej

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Krok 3: Łączenie z robotem Roomba

Najpierw musisz upewnić się, że twój robot jest podłączony do płytki Raspberry Pi za pomocą wtyczki micro USB. Następnie musisz poprawnie podłączyć komputer i robota do tego samego WiFi. Po wykonaniu tej czynności możesz włączyć robota i połączyć się z nim za pomocą podanego polecenia w pliku bazy danych robota. (Zawsze twardy reset robota przed i po jego użyciu). Na przykład używamy polecenia „r.roomba(19)” do połączenia się z naszym robotem, przypisując zmienną r naszemu urządzeniu. Odnosi się to z powrotem do pliku bazy danych, który ustawia naszą zmienną jako strukturę, do której możemy się odwołać w dowolnym momencie.

Krok 4: Kodeks

Kod
Kod
Kod
Kod

Poniżej załączamy pełny kod, ale oto krótki przegląd, który podkreśla ważne elementy naszego skryptu. Wykorzystaliśmy wszystkie czujniki, a także kamerę, aby w pełni zmaksymalizować potencjał naszego robota. Zawarliśmy również kod, który pozwolił nam podłączyć urządzenie mobilne do naszego robota i użyć jego gryoskopu do ręcznego sterowania nim.

Zaczęliśmy od prostego polecenia „r.setDriveVelocity(.06)”, które ustawia prędkość robota do przodu na 0,06 m/s. Ma to na celu wcześniejsze uruchomienie robota

Następnie nasz główny skrypt jest uruchamiany pętlą while, która pobiera dane danego robota, tworząc struktury, do których możemy się odwoływać i których możemy użyć w poniższych instrukcjach warunkowych, dzięki czemu możemy powiedzieć robotowi, aby wykonał określone polecenie na podstawie danych struktury robot czyta za pomocą swoich czujników. Ustawiliśmy go tak, aby robot odczytywał czujniki klifu i podążał czarną ścieżką

while true % while pętla trwa aż do pojawienia się czegoś "fałszywego" (w tym przypadku dzieje się to w nieskończoność) data = r.getCliffSensors; data2 = r.getBumpers;% pobiera w sposób ciągły dane o wartościach czujnika klifu i przypisuje je do zmiennej % img = r.getImage; % Robi zdjęcie z zamontowanej kamery % image(img); % Pokazuje zdjęcie, które zostało zrobione % red_mean = mean(mean(img(:,:, 1)));% Przyjmuje średnią wartość dla koloru zielonego, jeśli data.rightFront < 2000 r.turnAngle(-2); % obraca Roombę o około 0,2 stopnia CW, gdy wartość dla prawych przednich czujników klifu spadnie poniżej 2000 r.setDriveVelocity(.05); elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); % mówi robotowi Roomba, aby jechał naprzód z prędkością około 0,2 m/s, jeśli obie wartości z prawego przedniego i lewego przedniego czujnika spadną poniżej 2000% r.turnAngle(0); % mówi robotowi Roomba, aby się nie obracał, jeśli powyższe warunki są spełnione

elseif data2.right == 1 r.moveDistance(-.12); r.kąt obrotu(160); r.setDriveVelocity(.05); elseif data2.left == 1 r.moveDistance(-.2); r.turnAngle(5); r.setDriveVelocity(.05); elseif data2.front == 1 r.moveDistance(-.12); r.kąt obrotu(160); r.setDriveVelocity(.05);

Po tej pętli while wchodzimy w kolejną pętlę while, która wyzwala dane uzyskane przez kamerę. I używamy instrukcji if w tej pętli while, która rozpoznaje obraz za pomocą określonego programu (alexnet), a gdy zidentyfikuje obraz, natychmiast uruchamia zdalne sterowanie urządzeniem mobilnym

anet = alexnet; % Przypisuje głębokie uczenie alexnet do zmiennejwhile true % Infinite while loop img = r.getImage; obraz = rozmiar obrazu(obraz, [227, 227]); etykieta = klasyfikacja(anet, img); if label == "ręcznik papierowy" || label == "lodówka" label = "woda"; obraz końcowy (obraz); tytuł(znak(etykieta)); ciągnione;

Pętla while, która pozwala nam sterować urządzeniem za pomocą naszego telefonu, pobiera te dane z żyroskopu telefonu i podłączamy je do matrycy, która w sposób ciągły przesyła dane z powrotem do MATLAB na komputerze. Używamy instrukcji if, która odczytuje dane z matrycy i daje wyjście, które porusza urządzeniem na podstawie określonych wartości żyroskopu telefonu. Warto wiedzieć, że zastosowaliśmy czujniki orientacji urządzenia mobilnego. Wspomniana powyżej matryca jeden po trzech jest podzielona na kategorie według każdego elementu czujników orientacji telefonu, czyli azymutu, nachylenia i boku. Instrukcje if stworzyły warunki, które określały, kiedy strona przekroczy wartości 50 lub spadnie poniżej -50, a następnie robot przesunie się o określoną odległość do przodu (dodatnie 50) lub do tyłu (ujemne 50). To samo dotyczy wartości skoku. Jeśli wartość nachylenia przekroczy wartość 25 lub spadnie poniżej -25, robot obraca się o 1 stopień (dodatnie 25) lub o 1 stopień ujemny (ujemne 25)

while true pause(.1) % Pauza trwająca 0,5 sekundy przed pobraniem każdej wartości Controller=iphone. Orientation; % Przypisuje macierz wartości orientacji iPhone'a do zmiennej Azimuthal=Controller(1); % Przypisuje pierwszą wartość macierzy do zmiennej Pitch=Controller(2); % Przypisuje drugą wartość macierzy do zmiennej (przechylanie do przodu i do tyłu, gdy iPhone jest trzymany bokiem) Side=Controller(3); % Przypisuje trzecią wartość macierzy do zmiennej (przechylenie w lewo i prawo, gdy iPhone jest trzymany bokiem) % Powoduje wyjście na podstawie orientacji telefonu, jeśli Bok > 130 || Side 25 r.moveDistance(-.1) % Przesuwa robota Roomba do tyłu o około 0,1 metra, jeśli iPhone jest przechylony do tyłu o co najmniej 25 stopni, w przeciwnym razie Side 25 r.turnAngle(-1) % Obraca robota Roomba o około 1 stopień w lewo, jeśli iPhone jest przechylony w lewo o co najmniej 25 stopni w innym przypadku, jeśli pochylenie < -25 r.turnAngle(1) % Obraca robota Roomba o około 1 stopień w prawo, jeśli iPhone jest przechylony o co najmniej 25 stopni do końca

To tylko najważniejsze elementy naszego kodu, które uwzględniliśmy, jeśli chcesz szybko skopiować i wkleić sekcję dla własnej korzyści. Jednak w razie potrzeby cały nasz kod znajduje się poniżej

Krok 5: Wniosek

Ten kod, który napisaliśmy, jest specjalnie zaprojektowany dla naszego robota, a także dla naszej ogólnej wizji projektu. Naszym celem było wykorzystanie wszystkich naszych umiejętności kodowania MATLAB w celu stworzenia dobrze zaprojektowanego skryptu, który wykorzystuje większość funkcji robota. Korzystanie z kontrolera telefonu nie jest tak trudne, jak mogłoby się wydawać, i mamy nadzieję, że nasz kod pomoże Ci lepiej zrozumieć koncepcję kodowania iRobota.

Zalecana: