Spisu treści:

IRobot Create-Mars Expedition Rover Mark I: 4 kroki
IRobot Create-Mars Expedition Rover Mark I: 4 kroki

Wideo: IRobot Create-Mars Expedition Rover Mark I: 4 kroki

Wideo: IRobot Create-Mars Expedition Rover Mark I: 4 kroki
Wideo: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Grudzień
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

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

Kieszonkowe dzieci
Kieszonkowe dzieci

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

Rozwijaj kodowanie, aby osiągnąć pożądany rezultat
Rozwijaj 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

Testowanie
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

Obserwuj efekty wizualne
Obserwuj efekty wizualne
Obserwuj efekty wizualne
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: