Sadržaj:

UTK EF 230 MarsRoomba projekat jesen 2018: 5 koraka
UTK EF 230 MarsRoomba projekat jesen 2018: 5 koraka

Video: UTK EF 230 MarsRoomba projekat jesen 2018: 5 koraka

Video: UTK EF 230 MarsRoomba projekat jesen 2018: 5 koraka
Video: 3 часа практики английского произношения – укрепите уверенность в разговоре 2024, Novembar
Anonim
UTK EF 230 MarsRoomba projekat jesen 2018
UTK EF 230 MarsRoomba projekat jesen 2018

Trenutno se Mars roveri koriste za prikupljanje podataka o površini Marsa različitim metodama, do konačnog kraja saznanja više o potencijalu planete za život mikroorganizama. Roveri prvenstveno koriste fotografije i alate za analizu tla za prikupljanje podataka, ali roveri također uključuju navigacijske instrumente, detektore zračenja, atmosferske senzore i laser za isparavanje uzoraka stijena. Planirana misija rovera za 2020. uglavnom je ista, ali sa posebnim zadatkom da "prikupi uzorke tla i stijena i pohrani ih na površinu za potencijalni povratak na Zemlju u budućnosti", navodi NASA.

Međutim, pod pretpostavkom da će se budući roveri koristiti za ljudsku pomoć, naš tim je razmotrio koje aspekte ljudi rover može nadzirati. Došli smo do zaključka da bi, u slučaju hitne situacije, astronaut ostao u nesvijesti s nedostatkom sredstava za održavanje i opremu, naš bi rover mogao poslužiti kao pokretni svjetionik, primijetivši da je astronaut koji je slijedio nepokretan i prenosio poruku o nevolji. Da bi pratio čovjeka i utvrdio nepokretnost, rover bi uzimao podatke kao što su boja ljudskih cipela i njihovo kretanje. Još jedan ulaz koji treba uzeti u obzir je da bi morao zapamtiti svoj put kako bi u slučaju nužde prenio signal opasnosti. Naš rover zadovoljava potrebu na Marsu da pokušaj tako skupe misije na tako stranom terenu zahtijeva više slojeva sigurnosnih sefova, a ako astronaut ne može dobiti svoju pomoć zbog kvara na odijelu ili nesvijesti, rover može upozoriti druge.

Ovaj Instructable dizajniran je da pomogne čitatelju u programiranju njegove ili njene Roombe da uspješno slijedi "astronauta" i da pošalje signal za pomoć ako je primjenjivo.

Korak 1: Potrebni materijali

Potrebni materijali
Potrebni materijali

1) Računalo/prijenosno računalo pristupačno internetu

2) MATLAB_R2018a

3) Roomba i Roomba Download

Korak 2: Postavljanje/preuzimanje

Postavljanje/preuzimanje
Postavljanje/preuzimanje

Pokrenite ovu skriptu u MATLAB -u kako biste preuzeli softver potreban za pristup Roombi (sačuvan u vlastitoj datoteci u fascikli projekta)

Dodatna pomoć:

% Instalacijski program za EF 230 Roomba Project% Posljednje ažuriranje: 13. septembra 2017. (Riješeni sigurnosni problemi povezani s https poslužiteljem i upozorenje o brisanju datoteke ako se jave greške) funkcija roombaInstall clc; % lista datoteka za instaliranje datoteka = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % lokacija za instaliranje iz options = weboptions ('Naziv datoteke certifikata', ''); % reci mu da zanemari zahtjeve sertifikata server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instaliranje/ažuriranje Roombe'; % display purpose i get prompt prompt = {'Ovaj program će preuzeti ove datoteke EF 230 Roomba:' '' strjoin (files, '') '' '' u ovu fasciklu: '' 'cd' '' Želite li nastaviti? '}; bip; yn = questdlg (prompt,… dlgTitle,… 'Yes', 'No', 'Yes');

if ~ strcmp (yn, 'Yes'), return; kraj

% get lista datoteka koje postoje postojeće_datoteke = datoteke (cellfun (@exist, files)> 0); if ~ isempty (existing_files) % provjerite je li zaista u redu zamijeniti ih prompt = {'Zamjenjujete ove datoteke (datoteke):' '' strjoin (postojeće_datoteke, '') '' 'U redu za zamjenu?' }; bip; yn = questdlg (prompt,… dlgTitle,… 'Yes', 'No', 'Yes'); if ~ strcmp (yn, 'Yes'), return; end end

% preuzimanja datoteka cnt = 0; za i = 1: dužina (datoteke) f = datoteke {i}; disp (['Preuzimanje' f]); probajte url = [server f]; websave (f, url, opcije); % dodanih opcija za izbjegavanje sigurnosnih grešaka cnt = cnt + 1; catch disp (['Greška pri preuzimanju' f]); lutka = [f '.html']; ako postoji (dummy, 'file') == 2 delete (dummy) end end end

if cnt == length (files) msg = 'Instalacija je uspjela'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Greška pri instalaciji - pogledajte naredbeni prozor za detalje'; waitfor (errordlg (msg, dlgTitle)); kraj

end %roombaInstall

Korak 3: Kod 1. dio: Funkcija praćenja

Kod 1. dio: Funkcija praćenja
Kod 1. dio: Funkcija praćenja

Ova funkcija uzima varijablu Roomba i sliku s kamere na Roombi i pronalazi središnje xy koordinate praćenog objekta

Sačuvajte ovaj kod u drugu datoteku u istoj fascikli.

funkcija [xm, ym] = trackingblue (r) %Ulazi: roomba varijabla %Izlazi: x i y vrijednost centra sljedećeg objekta %Svrha: pronalazi središte plavog objekta sa slikom %Upotreba [x vrijednost, y value] = trackingblue (roomba varijabla) img = r.getImage; % čita kameru sa podslika slike robota (1, 2, 2) (img); %prikazuje sliku u istom prozoru kao i naslov putanje ('Slika za praćenje') red = img (:,:, 1); zelena = img (:,:, 2); plava = img (:,:, 3); justBlue = plavo - zeleno/2 - crveno/2; bw = samoPlavo> 40; zadržite podcrt (1, 2, 2) podslika (bw); [x, y] = nađi (bw); ako je ~ isempty (x) && ~ isempty (y) xm = okruglo (srednja vrijednost (x)); ym = okrugla (srednja vrijednost (y)); xx = max (1, xm-5): min (xm+5, veličina (bw, 1)); yy = max (1, ym-5): min (ym+5, veličina (tm, 2)); bwbw = nule (veličina (bw), 'uint8'); bwbw (xx, yy) = 255; zadržite podcrt (1, 2, 2) podslika (justBlue + bwbw); kraj

Korak 4: Kôd Dio 2: While Loop

Ovaj kôd pokreće Roombu na osnovu x i y lokacije objekta iz funkcije praćenja. Zbog toga će Roomba paziti na zidove i litice, dok traži plavo. Ovo će također uzeti x i y koordinate Roomba putanje i stvoriti odgovarajuću plohu sa slikom za praćenje. Ako je senzor udarca aktiviran, preći će na odjeljak e -pošte

%Rover Project

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Ulazi: vrijednost roombe, podaci o kameri, udarci, svjetlosni i zidni senzori %Svrha: Prati astronauta i izbjegava prepreke. Ako je upozoren, roomba šalje e -poruku %s pojedinostima o karti i njenoj lokaciji prema početnoj poziciji. %Upotreba: samo pokrenite program sa deklarisanom roomba promenljivom, takođe %imate pokretni zeleni objekat %Izlazi: prikazuje sliku za praćenje slike, mapu e -pošte i tekst korisniku %% Sledeći Odeljak b = 0; %Pokretanje varijabli c = 0; x = 0; y = 0; theta = 0; dok je c == 0 %Petlja kako bi otkrila plavi objekt i prepreke t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %inicijalizacija struktura za vrijednosti senzora light = getLightBumpers (r); bump = getBumpers (r); ako je light.leftCenter> = 10 || light.rightCenter> = 10 % Oseća da li postoji zid u blizini r.stop r.setLEDDigits ('pomoć') c = 1 % dok je b == 0 % ako je neravnina desno == 1 || bump.left == 1 || bump.front == 1 % Oseti ako je nešto naletelo nakon što oseti zid % c = 1 % b = 1 % disp ('neravnina') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Oseti ako je nešto naletelo, ako jeste, poslaće e -poruku r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %Oseća da li postoji litica u blizini r.stop c = 1 r.setLEDDigits ('pomoć') else %Postavlja brzine vožnje da prate plavo ako je yval = 100 r.setDriveVelocity (0.1) inače 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koordinata roombe y = d.*sind (theta).*d + y; % y koordinata roomba podcrta (1, 2, 1) plot (x, y, 'bd') % iscrtava putanju i dodaje naslov naslova ('Roomba Path') hold on; kraj

Korak 5: Kod 3. dio: Odjeljak e -pošte

Ovo će uzeti iscrtanu putanju i sliku i poslati ih na navedenu adresu e -pošte

(Ovdje prikazano s primjerom e -pošte)

%% Email sekcija

ako je b == 1 saveas (gcf, 'rovermap.png') %sprema cifru setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mail naloga za slanje sa setpref ('Internet', 'SMTP_Username', '[email protected]'); % korisničko ime pošiljatelja setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Rekviziti lozinke pošiljalaca = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('primjer e -pošte', 'RoverBeacon', 'Astronaut se prestao kretati. Za oporavak slijedite upute u priloženoj datoteci.', 'rovermap.png') disp ('poruka poslana') kraj

Preporučuje se: