Spisu treści:
- Krok 1: Materiały eksploatacyjne
- Krok 2: Rozwiń kodowanie, aby osiągnąć pożądany rezultat
- Krok 3: Testowanie
- Krok 4: Obserwuj efekty wizualne
Wideo: IRobot Create-Mars Expedition Rover Mark I: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Ta instrukcja nauczy Cię, jak skonfigurować iRobot Create za pomocą kodowania MatLab. Twój robot będzie mógł wyszukiwać minerały poprzez rozróżnianie kształtów, manewrować w trudnym terenie za pomocą czujników klifowych i będzie miał możliwość ręcznego sterowania za pośrednictwem transmisji na żywo.
Krok 1: Materiały eksploatacyjne
Do tego projektu potrzebny będzie iRobot Create, który jest programowalną wersją robota odkurzającego Roomba. Robot jest wyposażony we wszystkie czujniki potrzebne do tego projektu, w szczególności czujniki wypukłości, czujniki urwiska i czujniki „lekkiego uderzenia”. Będziesz także potrzebować Raspberry Pi i kamery wideo, używanych do komunikacji bezprzewodowej, programowania na żywo i przesyłania wideo na żywo. Na koniec będziesz potrzebować wydrukowanego w 3D uchwytu do Raspberry Pi i kamery.
Krok 2: Rozwiń kodowanie, aby osiągnąć pożądany rezultat
Po podłączeniu robota Roomba będziesz musiał utworzyć kod Matlab, który da ci pożądane wyjścia po żądanych wejściach.
Kod można zobaczyć tutaj:
%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal(mheal) %4/11/19 %Opis problemu: Utwórz łazik, aby pomóc ludziom podczas %eksploracji/zamieszkiwania Marsa. Metoda %rozwiązania: szukaj materii organicznej (zielonej) za pomocą zderzaków %light, czujników klifowych i kamery do wykrywania materii organicznej. Pozwól łazikowi poruszać się po nierównym terenie za pomocą zderzaków, czujników klifu i wysokości kół. Umożliw ludziom sterowanie łazikiem z bezpiecznej odległości i ręczne wyszukiwanie minerałów. wybory = {'ŻYCIE', ' NIEZGODNY TEREN', 'KONTROLA UŻYTKOWNIKA'}; %Trzy opcje w menu dialogowym Ustawienie = menu('', opcje) if Ustawienie>0 %Jeśli wybrana opcja poprosi o potwierdzenie wyboru2 = {'Tak', 'Nie'} %Utwórz tablicę komórek dla "tak" lub "Nie " wybór Potwierdź = menu(['Wybrałeś "' wybory{Ustawienie} '" tryb.'], wybory2) %Potwierdź wybór ustawienia użytkownika, jeśli Potwierdź==1 jeśli Ustawienie==1 %Sprawdź, czy wybrano ustawienie "ŻYCIE" i =0 while i==0 r.setLEDDigits(num2str('LIFE')) %Wyświetl 'LIFE' na LED dla i=1:100 r.setDriveVelocity(0.05) %Przesuń roomba do przodu z prędkością 0,05 m/sy = r.getCliffSensors %Pobierz i zapisz wartości czujnika klifu w strukturze komórki "y" l = r.getLightBumpers %Pobierz i zapisz wartości światła wypukłości w strukturze "f", jeśli l.left>100 %Sprawdź, czy lewy zderzak światła jest zakryty r.moveDistance(-0.05) % Przesuń roombę do tyłu 0,05 metra r.turnAngle(20) %Obróć roombę o 20 stopni w lewo img=r.getImage %Pobierz obraz z kamery rasberry pie na urządzeniu Roomba rect = [100 0 150 150]; img = imcrop(img, rect) % przytnij obraz do wyśrodkowania czerwony = średnia(mean(img(:,:, 1))) %średnia intensywność czerwieni zielony = średnia(mean(img(:,:, 2))) %średnia intensywność zieleni niebieski = średnia(mean(img(:,:, 3))) %średnia intensywność koloru niebieskiego jeśli zielony>czerwony && zielony>niebieski %Sprawdź, czy na obrazku znajduje się roślina d=msgbox(['Znaleziono życie! ']); % Wyświetl okno z komunikatem „Znaleziono życie!” czekać na(d); end elseif l.leftFront>100 %Sprawdź, czy lewy/przedni zderzak światła jest zakryty r.moveDistance(-0.05) %Przesuń roomba do tyłu 0,05 metra img=r.getImage %Pobierz obraz z kamery rasberry pie na Roombie i zapisz w zmiennej 'img ' prostokąt = [100 0 150 150]; img = imcrop(img, rect) % przytnij obraz do wyśrodkowania czerwony = średnia(mean(img(:,:, 1))) %średnia intensywność czerwieni zielony = średnia(mean(img(:,:, 2))) %średnia intensywność zieleni niebieski = średnia(mean(img(:,:, 3))) %średnia intensywność koloru niebieskiego jeśli zielony>czerwony && zielony>niebieski %Sprawdź, czy na obrazku znajduje się roślina d=msgbox(['Znaleziono życie! ']); % Wyświetl okno z komunikatem „Znaleziono życie!” czekać na(d); end elseif l.leftCenter>100 %Sprawdź, czy lewy/środkowy zderzak światła jest zakryty r.moveDistance(-0.05) %Przesuń roomba do tyłu 0,05 metra img=r.getImage %Pobierz obraz z kamery rasberry pie na Roomba i zapisz w zmiennej 'img ' prostokąt = [100 0 150 150]; img = imcrop(img, rect) % przytnij obraz do wyśrodkowania czerwony = średnia(mean(img(:,:, 1))) %średnia intensywność czerwieni zielony = średnia(mean(img(:,:, 2))) %średnia intensywność zieleni niebieski = średnia(mean(img(:,:, 3))) %średnia intensywność koloru niebieskiego jeśli zielony>czerwony && zielony>niebieski %Sprawdź, czy na obrazku znajduje się roślina d=msgbox(['Znaleziono życie! ']); % Wyświetl okno z komunikatem „Znaleziono życie!” czekać na(d); end elseif l.rightCenter>100 %Sprawdź, czy prawy/środkowy zderzak światła jest zakryty r.moveDistance(-0.05)%Przesuń roomba do tyłu 0,05 metra img=r.getImage %Pobierz obraz z kamery rasberry pie na Roomba i zapisz w zmiennej 'img ' prostokąt = [100 0 150 150]; img = imcrop(img, rect) % przytnij obraz do wyśrodkowania czerwony = średnia(mean(img(:,:, 1))) %średnia intensywność czerwieni zielony = średnia(mean(img(:,:, 2))) %średnia intensywność zieleni niebieski = średnia(mean(img(:,:, 3))) %średnia intensywność koloru niebieskiego jeśli zielony>czerwony && zielony>niebieski %Sprawdź, czy na obrazku znajduje się roślina d=msgbox(['Znaleziono życie! ']); % Wyświetl okno z komunikatem „Znaleziono życie!” czekać na(d); end elseif l.rightFront>100 %Sprawdź, czy prawy/przedni zderzak światła jest zakryty r.moveDistance(-0.05)%Przesuń roomba do tyłu 0,05 metra img=r.getImage %Pobierz obraz z kamery rasberry pie na Roombie i zapisz w zmiennej 'img ' prostokąt = [100 0 150 150]; img = imcrop(img, rect) % przytnij obraz do wyśrodkowania czerwony = średnia(mean(img(:,:, 1))) %średnia intensywność czerwieni zielony = średnia(mean(img(:,:, 2))) %średnia intensywność zieleni niebieski = średnia(mean(img(:,:, 3))) %średnia intensywność koloru niebieskiego jeśli zielony>czerwony && zielony>niebieski %Sprawdź, czy na obrazku znajduje się roślina d=msgbox(['Znaleziono życie! ']); % Wyświetl okno z komunikatem „Znaleziono życie!” czekać na(d); end elseif l.right>100 %Sprawdź, czy prawy zderzak światła jest zakryty r.moveDistance(-0,05)%Przesuń roombę do tyłu 0,05 metra r.turnAngle(-20)%Obróć roomba o 20 stopni CW img=r.getImage %Pobierz obraz z kamera rasberry pie na Roombie i zapisz w zmiennej 'img' rect = [100 0 150 150]; img = imcrop(img, rect) % przytnij obraz do wyśrodkowania czerwony = średnia(mean(img(:,:, 1))) %średnia intensywność czerwieni zielony = średnia(mean(img(:,:, 2))) %średnia intensywność zieleni niebieski = średnia(mean(img(:,:, 3))) %średnia intensywność koloru niebieskiego jeśli zielony>czerwony && zielony>niebieski %Sprawdź, czy na obrazku znajduje się roślina d=msgbox(['Znaleziono życie! ']); % Wyświetl okno z komunikatem „Znaleziono życie!” czekać na(d); end elseif y.leftFront<1500 %Sprawdź, czy lewa/przednia część roomby jest poza urwiskiem r.moveDistance(-0,1,0,05) %Przesuń roombę do tyłu o 0,1 metra z prędkością 0,05 m/s r.turnAngle(-5) %Obróć roomba 5 stopnie CW elseif y.rightFront<1500 %Sprawdź, czy prawa/przednia część Roomby jest poza urwiskiem r.moveDistance(-0,1,0,05) %Przesuń roomba do tyłu o 0,1 metra z prędkością 0,05 m/s r.turnAngle(5) %Obróć roomba 5 stopnie CCW elseif y.left<1000 %Sprawdź, czy lewa strona Roomby jest poza urwiskiem r.moveDistance(-0,05, 0,05) % Przesuń Roombę do tyłu 0,05 metra z prędkością 0,05 m/s r.turnAngle(-10) %Obróć Roombę o 10 stopni CW elseif y.right0 %Uruchom jeśli przycisk został naciśnięty if Continue==1 i=0 %Kontynuuj wyszukiwanie życia else i=1 %End LIFE mode end end end elseif Setting==2 %Sprawdź, czy wybrano ustawienie „ROUGH TERRAIN” i=0 while i==0 r.setLEDDigits(num2str('RGH')) %Wyświetlaj 'Rough' na LED Wyświetlacz dla i=1:1000 r.setDriveVelocity(0.05) %Ustaw prędkość napędu Roomba na 0,05 m/sx = r.getBumpers % Pobierz i zapisz wartości czujników zderzaka w strukturze "x" y = r.get CliffSensors %Pobierz i zapisz wartości czujników klifu w strukturze "y" if x.right==1 %Sprawdź, czy prawy zderzak jest naciśnięty r.turnAngle(10) %Obróć roomba o 10 stopni w lewo elseif x.left==1 %Sprawdź, czy lewy zderzak jest wciśnięty r.turnAngle(-10) %Obróć roomba o 10 stopni w lewo elseif x.front==1 %Sprawdź, czy przedni zderzak jest wciśnięty r.turnAngle(20) %Obróć roomba o 20 stopni w lewo elseif x.rightWheelDrop==1 % Sprawdź, czy prawe koło opadło r.turnAngle(-20)%Obróć roomba o 20 stopni w lewo elseif x.leftWheelDrop==1 %Sprawdź, czy lewe koło opadło r.turnAngle(20) %Obróć roomba o 20 stopni w lewo elseif y.leftFront< 1500 %Sprawdź, czy przednia lewa część Roomby jest poza urwiskiem r.moveDistance(-0,05, 0,05) %Przesuń roombę do tyłu o 0,05 metra z prędkością 0,05 m/s r.turnAngle(-5)%Obróć Roombę o 5 stopni w lewo elseif y.rightFront< 1500 % Sprawdź, czy prawa przednia część Roomby jest poza urwiskiem r.moveDistance(-0,05, 0,05)%Przesuń roombę do tyłu 0,05 metra z prędkością 0,05 m/s r.turnAngle(5) %Obróć Roombę o 5 stopni w lewo w przeciwnym razie y.w lewo<1000 %Sprawdź, czy lewa część jest wyłączona f Roomba jest poza urwiskiem r.moveDistance(-0,05, 0,05)%Przesuń roombę do tyłu 0,05 metra z prędkością 0,05 m/s r.turnAngle(-10)%Obróć roombę o 10 stopni w lewo if y.right0 if Continue==1 i=0 %Kontynuuj trudny teren else i=1 %Zakończ trudny teren end end end end else %Tryb ręczny i=0 r.setLEDDigits(num2str('USER')) %Wyświetl 'USER' na wyświetlaczu LED d=msgbox(['Klawisze strzałek - Ruszaj się; S - Zatrzymaj łazik; ESC - Kontrola użytkownika końcowego; A - Zlokalizuj zasób']); czekać na(d); while i==0 r.showCamera %Otwórz obraz na żywo z kamery rasberry pie w osobnym oknie D=getkey(1) %Pobierz klawisz naciśnięty przez użytkownika, zachowaj wartość ASCII jako zmienną D jeśli D==30 %Sprawdź, czy strzałka w górę ma naciśnięto r.setDriveVelocity(0.1) %Wyślij Roombę do przodu z prędkością 0,2m/s elseif D==28 %Sprawdź, czy została naciśnięta strzałka "w lewo" r.setDriveVelocity(0) %Zatrzymaj Roomba przed poruszaniem się do przodu lub do tyłu r.turnAngle(15, 0,05)%Obróć Roombę o 45 stopni w lewo z prędkością 0,05 m/s elseif D==31 %Sprawdź, czy naciśnięto strzałkę w dół r.setDriveVelocity(-0,1) %Przesuń Roombę do tyłu z prędkością 0,2 m/s elseif D==29 % Sprawdź, czy naciśnięta jest strzałka w prawo r.setDriveVelocity(0) %Zatrzymaj Roomba przed poruszaniem się do przodu lub do tyłu r.turnAngle(-15, 0,05) %Obróć Roomba o 45 stopni CW z prędkością 0,05 m/s elseif D==27 %Sprawdź, czy naciśnięto klawisz "esc" (escape) i=1 %Zmień wartość zmiennej "i", aby wyjść z pętli d=msgbox('Wychodzenie z "Kontroli użytkownika"') %Poinformuj użytkownika, że kończy się tryb ręczny elseif D== 115 %Sprawdź, czy został naciśnięty klawisz "s" r.setDriveVelocity(0) %Zatrzymaj roomba z przechodzenie do przodu lub do tyłu elseif D==97 %Sprawdź, czy naciśnięto "a" image = r.getImage; imwrite(image, 'image.png') W = Klasyfikuj(obraz) K = tryb(W) if K == 3 d=msgbox('Znaleziono zasób') %Wyświetl jeśli wykryto prostokątny zasób waitfor(d); % Poczekaj, aż użytkownik zamknie okno komunikatu „d” elseif K == 0 d=msgbox('Nie zasób:(') %Wyświetl, jeśli prostokątny zasób nie zostanie wykryty waitfor(d); %Poczekaj, aż użytkownik zamknie okno komunikatu „d” end else d=msgbox('Nieprawidłowe wprowadzenie klucza.') % Wyświetlaj, jeśli użytkownik zamknie menu "wybierz ustawienia" waitfor(d); % Zaczekaj, aż użytkownik zamknie okno komunikatu "d" end waitfor(d); % Zaczekaj na użytkownik do zamknięcia wiadomości "d" end end end else d=msgbox('Do widzenia') %Pożegnaj się, jeśli opcje są zamknięte end waitfor(d);
Krok 3: Testowanie
Po napisaniu kodu musisz przetestować robota Roomba. Chociaż kod może wydawać się poprawny, wiele wartości, zwłaszcza dotyczących koloru lub kształtu, będzie musiało zostać zmienionych, aby prawidłowo rozpoznać obiekty, które robot Roomba ma rozpoznawać.
Krok 4: Obserwuj efekty wizualne
Będzie bardzo oczywiste, czy pomyślnie zaprogramowałeś robota Roomba na podstawie jego wizualnych danych wyjściowych.
Wyniki obejmują:
- Wykrywanie kształtów: Zdolność robota Roomba do prawidłowego rozróżniania kształtów w celu znalezienia właściwych minerałów
- Manewry w trudnym terenie: unika klifów lub ciemnych obszarów
- Tryb ręczny: transmisja na żywo i możliwość sterowania robotem Roomba
- Zdjęcia: Zdjęcia minerałów
- Life Found!: Pole tekstowe MatLab oznaczające, że twoja roślina zidentyfikowała życie organiczne.
To koniec naszego samouczka, ciesz się swoim nowym łazikiem ekspedycyjnym na Marsa!
Zalecana:
Mini FPV-Rover: 4 kroki
Mini FPV-Rover: To jest mini wersja mojego FPV-Rover V2.0https://www.thingiverse.com/thing:2952852Wymiary to 10cm x 10cm x 3cmObserwuj mnie na Instagramie, aby uzyskać najnowsze wiadomości https://www.instagram. com/ernie_meets_bert
SOLARBOI - 4G Solar Rover do odkrywania świata!: 3 kroki (ze zdjęciami)
SOLARBOI – Solarny łazik 4G wyrusza na zwiedzanie świata!: Odkąd byłem młody, zawsze uwielbiałem odkrywać. Przez lata widziałem wiele konstrukcji zdalnie sterowanych samochodów sterowanych przez Wi-Fi i wyglądały wystarczająco zabawnie. Ale marzyłem o tym, by pójść o wiele dalej - w realny świat, daleko poza granice
ROVER STREAMING WIDEO DTMF: 3 kroki
ŁADZIOWNIK DO STRUMIENIA WIDEO DTMF: cześć po moim łaziku sterowanym przez LINUX TERMINAL i ROBOCIE STEROWANYM Z PC WIFI DTMF, to jest mój trzeci robot. i podobnie jak dwa inne tutaj, również nie używałem żadnego mikrokontrolera ani programowania, aby było proste i łatwe do wykonania. Ponadto przesyła strumieniowo wideo na żywo przez Wi-Fi
Localino śledzi robota Roomba IRobot, mapuje środowisko i umożliwia sterowanie.: 4 kroki
Localino śledzi robota Roomba IRobot, odwzorowuje środowisko i umożliwia sterowanie.: Ta instrukcja wyjaśnia procedurę śledzenia i sterowania robotem Roomba iRobot w pomieszczeniu za pomocą systemu lokalizacyjnego Localino, mostka WiFi-UART i aplikacji komputerowej. Szczegółowy opis tego instruktażu, wyjaśniający kontrolę HIL
Korzystanie z modułu poleceń IRobot Create w systemie Linux: 4 kroki
Korzystanie z modułu poleceń IRobot Create w systemie Linux: Ponieważ iRobot nie zapewnił użytkownikom Linuksa sposobu korzystania z modułu poleceń, musiałem sam to rozgryźć. Nie daj się zastraszyć, naprawdę nie jest to trudne. Wszystko, co musisz zrobić, to uruchomić kilka skryptów. Zacznijmy, dobrze?