Spisu treści:
- Krok 1: Potrzebne materiały
- Krok 2: Konfiguracja/Pobieranie
- Krok 3: część kodu 1: funkcja śledzenia
- Krok 4: Część kodu 2: Podczas pętli
- Krok 5: Część kodu 3: Sekcja e-mail
Wideo: Projekt UTK EF 230 MarsRoomba Jesień 2018: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Obecnie łaziki marsjańskie są używane do zbierania danych na powierzchni Marsa różnymi metodami, aby ostatecznie dowiedzieć się więcej o potencjale planety dla życia mikrobiologicznego. Łaziki wykorzystują przede wszystkim narzędzia fotograficzne i analizy gleby do zbierania danych, ale łaziki zawierają również instrumenty nawigacyjne, detektory promieniowania, czujniki atmosferyczne i laser do odparowywania próbek skał. Według NASA cel planowanej misji łazika na 2020 rok jest w większości taki sam, ale ze specjalnym zadaniem „zbierania próbek gleby i skał i buforowania ich na powierzchni w celu potencjalnego powrotu na Ziemię w przyszłej misji”.
Jednak przy założeniu, że przyszłe łaziki będą wykorzystywane do pomocy ludziom, nasz zespół rozważył, jakie aspekty ludzi może monitorować łazik. Doszliśmy do wniosku, że gdyby jakiś wypadek spowodował nieprzytomność astronauty z powodu awarii systemu podtrzymywania życia i sprzętu, nasz łazik mógłby służyć jako mobilna latarnia morska, obserwując, że astronauta, za którym podąża, jest nieruchomy i przekazuje wiadomość o niebezpieczeństwie. Aby podążać za człowiekiem i określić bezruch, łazik pobierał dane wejściowe, takie jak kolor butów człowieka i ich ruch. Innym elementem, który należy wziąć pod uwagę, jest to, że musiałby zapamiętać swoją ścieżkę, aby przekazać sygnał o niebezpieczeństwie w sytuacji awaryjnej. Nasz łazik spełnia potrzebę na Marsie, ponieważ próba tak kosztownej misji na tak obcym terenie wymaga wielu warstw zabezpieczeń, a jeśli astronauta nie będzie w stanie uzyskać własnej pomocy z powodu awarii lub utraty przytomności, łazik może ostrzec innych.
Ta instrukcja ma na celu pomóc czytelnikowi w zaprogramowaniu robota Roomba, aby pomyślnie podążał za „astronautą” i wysyłał sygnał o niebezpieczeństwie, jeśli ma to zastosowanie.
Krok 1: Potrzebne materiały
1) komputer/laptop z dostępem do Internetu
2) MATLAB_R2018a
3) Roomba i Roomba do pobrania
Krok 2: Konfiguracja/Pobieranie
Uruchom ten skrypt w MATLAB, aby pobrać oprogramowanie potrzebne do uzyskania dostępu do Roomby (zapisane we własnym pliku w folderze projektu)
Dodatkowa pomoc:
% Program instalacyjny dla EF 230 Roomba Project% Ostatnia aktualizacja: 13 września 2017 r. (Naprawiono problemy z bezpieczeństwem związane z serwerem https i usunięto ostrzeżenie o usunięciu pliku w przypadku wystąpienia błędów) function roombaInstall clc; % lista plików do zainstalowania pliki = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % lokalizacja do zainstalowania z options = weboptions('CertificateFilename', ''); % każ mu ignorować wymagania certyfikatu server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instalacja/aktualizacja Roomba'; % wyświetl cel i otrzyma monit o potwierdzenie = { 'Ten program pobierze te pliki EF 230 Roomba:' '' strjoin(files, ' ') '' 'do tego folderu:' '' cd '' 'Czy chcesz kontynuować? ' }; brzęczyk; yn = questdlg(monit, … dlgTitle, … 'Tak', 'Nie', 'Tak');
if ~strcmp(yn, 'Tak'), zwróć; kończyć się
% pobierz listę istniejących plików istniejące_pliki = pliki(cellfun(@istnieje, pliki) > 0); if ~isempty(istniejące_pliki) % upewnij się, że naprawdę można je zastąpić prompt = {'Zastępujesz te pliki: ' '' strjoin(istniejące_pliki, ' ') '' 'Czy zamienić?' }; brzęczyk; yn = questdlg(monit, … dlgTitle, … 'Tak', 'Nie', 'Tak'); if ~strcmp(yn, 'Tak'), zwróć; koniec koniec
% pobierz pliki cnt = 0; dla i=1:długość(pliki) f=pliki{i}; disp(['Pobieranie' f]); spróbuj url = [serwer f]; websave(f, url, opcje); % dodanych opcji, aby uniknąć błędów bezpieczeństwa cnt = cnt + 1; catch disp(['Błąd pobierania' f]); manekin = [f '.html']; jeśli istnieje(atrapa, 'plik')==2 usuń(atrapa) end end end
if cnt == length(files) msg = 'Instalacja powiodła się'; waitfor(msgbox(msg, dlgTitle)); else msg = 'Błąd instalacji - szczegóły w oknie poleceń'; waitfor(errordlg(msg, dlgTitle)); kończyć się
zakończ %roombaInstall
Krok 3: część kodu 1: funkcja śledzenia
Ta funkcja pobiera zmienną Roomba i obraz z kamery na Roombie i znajduje współrzędne środka xy śledzonego obiektu
Zapisz ten kod w innym pliku w tym samym folderze.
funkcja [xm, ym] = trackingblue(r)% Wejścia: zmienna roomba % Wyjścia: x i y wartość środka następującego obiektu % Cel: znajduje środek niebieskiego obiektu na podstawie obrazu % Użycie [wartość x, y wartość] = trackingblue (zmienna roomba) img=r.getImage; % odczytuje kamerę z robota subplot(1, 2, 2) subimage(img); % pokazuje obraz w tym samym oknie co tytuł ścieżki('Obraz śledzący') red = img(:,:, 1); zielony = obraz(:,:, 2); niebieski = obraz(:,:, 3); justBlue = niebieski - zielony/2 - czerwony/2; bw = justBlue > 40; przytrzymaj subplot(1, 2, 2) subimage(bw); [x, y] = znajdź(mc); if ~isempty(x) && ~isempty(y) xm = round(mean(x)); ym = okrągły(średnia(y)); xx = max(1, xm-5):min(xm+5, rozmiar(mc, 1)); yy = max(1, ym-5):min(ym+5, rozmiar(m.c., 2)); bwbw = zera(rozmiar(mc), 'uint8'); bwbw(xx, yy) = 255; przytrzymaj subplot(1, 2, 2) subimage(justBlue + bwbw); kończyć się
Krok 4: Część kodu 2: Podczas pętli
Ten kod steruje robotem Roomba w oparciu o położenie x i y obiektu z funkcji śledzenia. To sprawi, że Roomba będzie uważać na ściany i klify, szukając niebieskiego. Spowoduje to również pobranie współrzędnych x i y ścieżki robota Roomba i utworzenie odpowiedniego wykresu z obrazem śledzenia. Jeśli czujnik uderzeń jest aktywny, przejdzie do sekcji poczty e-mail
%Rover projekt
% Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 % Wejścia: wartość Roomba, dane kamery, czujniki wstrząsów, światła i ściany % Cel: Podąża za astronautą i omija przeszkody. W przypadku powiadomienia, Roomba wysyła wiadomość e-mail z wyszczególnieniem mapy i lokalizacji zgodnie z jego pozycją początkową. %Użycie: po prostu uruchom program z zadeklarowaną zmienną roomba, dodatkowo % miej ruchomy zielony obiekt %Wyjścia: pokazuje obraz śledzenia obrazu, mapę e-maili i tekst do użytkownika %% Po sekcji b=0; %zmienne inicjujące c=0; x=0; y=0; theta=0; while c==0 %Pętla, aby wykryć niebieski obiekt i przeszkody t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue(r); klif=getCliffSensors(r); %inicjowanie struktur dla wartości czujników light=getLightBumpers(r); bump= getBumpers(r); jeśli light.leftCenter >= 10 || light.rightCenter >= 10 % Wykrywa, czy w pobliżu r.stop znajduje się ściana r.setLEDDigits('help') c=1 % while b==0 % if bump.right == 1 || bump.left == 1 || bump.front == 1 %Wyczuwa, czy uderzył w coś po wykryciu ściany % c=1 % b=1 % disp('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Wyczuwa, jeśli na coś wpadł, jeśli tak, wyśle e-mail r.stop c=1 b=1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || urwisko.lewo <= 100 || cliff.right <= 100 %Wykrywa klif w pobliżu r.stop c=1 r.setLEDDigits('help') else % Ustawia prędkość jazdy na niebieską jeśli yval = 100 r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) koniec koniec theta = theta + r.getAngle; x = d.*cosd(theta) + x; % x współrzędna pokoju y = d.*sind(theta).*d + y; % y współrzędna podrzędnego wykresu Roomba(1, 2, 1) plot(x, y, 'bd') % kreśli ścieżkę i dodaje tytuł tytułu('Roomba Path') hold; kończyć się
Krok 5: Część kodu 3: Sekcja e-mail
Spowoduje to zabranie wykreślonej ścieżki i obrazu i wysłanie go na określony adres e-mail
(Pokazane tutaj z przykładowym adresem e-mail)
%% sekcja e-mail
if b==1 saveas(gcf, 'rovermap.png') %zapisuje figurę setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % konto pocztowe do wysłania z setpref('Internet', 'SMTP_Username', '[email protected]'); % senders username setpref('Internet', 'SMTP_Password', 'gssegsse'); % Nadawcy hasła props = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'prawda'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465'); sendmail('example email', 'RoverBeacon', 'Astronauta przestał się poruszać. Aby odzyskać sprawność, postępuj zgodnie ze wskazówkami w załączonym pliku.', 'rovermap.png') disp('email wysłany') end
Zalecana:
Projekt robota UTK 2017: 3 kroki
Projekt robota UTK 2017: Misja: Nasz zespół inżynierów został zatrudniony przez Froogle, fundację non-profit zajmującą się rozwojem technologii open-source, w celu opracowania innowacyjnego Human Assisting Mars Rover. to Roomba, którą zakodowaliśmy, aby wykonać serię o
Venus Flytrap - ITM Jesień 2019: 5 kroków
Venus Flytrap - ITM Jesień 2019: Czego brakuje na biurku wszystkich? Mechaniczna pułapka na muchy Wenus, która trzyma ołówki, długopisy i inne przedmioty
Projekt ITTT 2018 - Ziemia: 5 kroków
Projekt ITTT 2018 | Earth: Witam! Moja szkoła dała mi projekt, w którym musiałem stworzyć interaktywny system przy użyciu Arduino i zbudować go w prawdziwym życiu. Postanowiłem stworzyć światową kulę ziemską, w której twoja interakcja z czujnikami i przyciskami oświetli kraje i sprawi, że globus zacznie się obracać
Projekt Mars Roomba UTK: 4 kroki
Projekt Mars Roomba UTK: OŚWIADCZENIE: TO DZIAŁA TYLKO JEŚLI ROOMBA JEST KONFIGUROWANA W BARDZO SZCZEGÓLNY SPOSÓB, TA INSTRUKCJA ZOSTAŁA STWORZONA I PRZEZNACZONA DO UŻYWANIA PRZEZ STUDENTÓW I WYDZIAŁÓW NA UNIWERSYTECIE TENESSEE Ten kod służy do konfigurowania robota Roomba do lokalnego działania napisane i s
Jak zrobić girlandę z jabłek na jesień lub powrót do szkoły: 13 kroków (ze zdjęciami)
Jak zrobić girlandę z jabłek na jesień lub powrót do szkoły: Anjeanette z RootsAndWingsCo wykonała tę uroczą girlandę z jabłek z filcu i materiału. To był prosty projekt, który mogą wykonać nawet ci, którzy twierdzą, że nie umieją szyć! (Tak długo, jak możesz nawlec swoją igłę.)