Innholdsfortegnelse:

UTK EF 230 MarsRoomba Project høsten 2018: 5 trinn
UTK EF 230 MarsRoomba Project høsten 2018: 5 trinn

Video: UTK EF 230 MarsRoomba Project høsten 2018: 5 trinn

Video: UTK EF 230 MarsRoomba Project høsten 2018: 5 trinn
Video: Глава 11. Джейн Эйр Шарлотты Бронте 2024, Juli
Anonim
UTK EF 230 MarsRoomba Project høsten 2018
UTK EF 230 MarsRoomba Project høsten 2018

For tiden brukes Mars -rovere til å samle data på overflaten av Mars gjennom forskjellige metoder, til den endelige enden på å lære mer om planetens potensial for mikrobielt liv. Rovers bruker først og fremst fotografering og jordanalyseverktøy for datainnsamling, men rovere inkluderer også navigasjonsinstrumenter, strålingsdetektorer, atmosfæriske sensorer og en laser for fordampning av steinprøver. Det planlagte roveroppdraget i 2020 er stort sett det samme, men med den spesielle oppgaven å "samle prøver av jord og stein og lagre dem på overflaten for potensiell retur til jorden ved et fremtidig oppdrag," ifølge NASA.

Men under forutsetningen om at fremtidige rovere vil bli brukt til menneskelig hjelp, vurderte teamet vårt hvilke aspekter ved mennesker roveren kunne overvåke. Vi kom til den konklusjonen at hvis en nødssituasjon skulle gjøre en astronaut bevisstløs med sviktende livsstøtte og utstyr, kunne roveren vår fungere som et mobilt fyrtårn ved å observere at astronauten den fulgte er ubevegelig og videreformidle et nødsbudskap. For å følge mennesket og bestemme immobilitet, ville roveren ta innspill som fargen på menneskets sko og bevegelse. En annen innspill å vurdere er at den må huske veien for å sende et nødsignal i nødstilfeller. Roveren vår dekker et behov på Mars ved at et slikt kostbart oppdrag på slikt fremmed terreng krever flere lag med feilsikring, og skulle en astronaut ikke kunne få sin egen hjelp på grunn av funksjonsfeil eller bevisstløshet, kan roveren varsle andre.

Denne instruksen er designet for å hjelpe leseren med å programmere sin Roomba til å lykkes med å følge en "astronaut" og sende et nødssignal hvis det er aktuelt.

Trinn 1: Nødvendige materialer

Materialer som trengs
Materialer som trengs

1) Internett -tilgjengelig datamaskin/bærbar PC

2) MATLAB_R2018a

3) Roomba og Roomba Last ned

Trinn 2: Oppsett/nedlasting

Oppsett/nedlasting
Oppsett/nedlasting

Kjør dette skriptet i MATLAB for å laste ned programvaren som trengs for å få tilgang til Roomba (lagret i sin egen fil i prosjektmappen)

Ytterligere hjelp:

% Installasjonsprogram for EF 230 Roomba Project% Siste oppdatering: 13. september 2017 (Fikset sikkerhetsproblemer knyttet til https -server og fjernet advarsel om sletting av filer hvis det oppstår feil) funksjon roombaInstall clc; % liste over filer for å installere filer = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % plassering å installere fra alternativer = weboptions ('CertificateFilename', ''); % be den om å ignorere sertifikatkrav server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba Install/Update'; % visningsformål og få bekreftelsesprompt = {'Dette programmet vil laste ned disse EF 230 Roomba -filene:' '' strjoin (files, '') '' 'til denne mappen:' '' cd '' 'Vil du fortsette? '}; pip; yn = questdlg (ledetekst, … dlgTitle,… 'Ja', 'Nei', 'Ja');

hvis ~ strcmp (yn, 'Ja'), returner; slutt

% få liste over filer som eksisterer eksisterende_filer = filer (cellfun (@exist, filer)> 0); Hvis ~ isempty (eksisterende_filer) % sørg for at det virkelig er greit å bytte dem prompt = {'Du bytter ut disse filene:' '' strjoin (eksisterende_filer, '') '' 'OK å erstatte?' }; pip; yn = questdlg (ledetekst, … dlgTitle,… 'Ja', 'Nei', 'Ja'); hvis ~ strcmp (yn, 'Ja'), returner; ende ende

% last ned filene cnt = 0; for i = 1: lengde (filer) f = filer {i}; disp (['Laster ned' f]); prøv url = [server f]; websave (f, url, alternativer); % lagt til alternativer for å unngå sikkerhetsfeil cnt = cnt + 1; catch disp (['Feil ved nedlasting' f]); dummy = [f '.html']; hvis finnes (dummy, 'file') == 2 slett (dummy) end end end

if cnt == length (files) msg = 'Installasjon vellykket'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Installasjonsfeil - se kommandovinduet for detaljer'; waitfor (errordlg (msg, dlgTitle)); slutt

slutt %roombaInstall

Trinn 3: Kode Del 1: Sporingsfunksjon

Kode Del 1: Sporingsfunksjon
Kode Del 1: Sporingsfunksjon

Denne funksjonen tar Roomba -variabelen og bildet fra kameraet på Roomba og finner de midtre xy -koordinatene til det sporede objektet

Lagre denne koden i en annen fil i samme mappe.

funksjon [xm, ym] = trackingblue (r) %Innganger: roomba -variabel %Utganger: x og y -verdien til midten av følgende objekt %Formål: finner midten av et blått objekt gitt et bilde %Bruk [x -verdi, y verdi] = trackingblue (roomba -variabel) img = r.getImage; % leser kameraet av robotundersplottet (1, 2, 2) delbilde (avbildning); %viser bildet i samme vindu som banetittelen ('Tracking Image') red = img (:,:, 1); grønn = img (:,:, 2); blå = img (:,:, 3); justBlue = blå - grønn/2 - rød/2; bw = justBlue> 40; hold på delplot (1, 2, 2) delbilde (bw); [x, y] = finn (bw); hvis ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = rund (gjennomsnitt (y)); xx = maks (1, xm-5): min (xm+5, størrelse (bw, 1)); åå = maks (1, ym-5): min (ym+5, størrelse (bw, 2)); bwbw = nuller (størrelse (bw), 'uint8'); bwbw (xx, åå) = 255; hold på delplottet (1, 2, 2) delbilde (justBlue + bwbw); slutt

Trinn 4: Kode del 2: While Loop

Denne koden driver Roomba basert på x og y plasseringen av objektet fra sporingsfunksjonen. Dette vil få Roomba til å passe på vegger og klipper mens du søker blått. Dette vil også ta x- og y -koordinatene til Roomba -banen og opprette et tilsvarende plott med sporingsbildet. Hvis støtsensoren er aktivert, går den videre til e -postdelen

%Rover -prosjekt

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Innganger: roomba -verdi, kameradata, støt, lys og veggsensorer %Formål: Følger astronaut og unngår hindringer. Hvis varslet, sender roomba en e -post %som beskriver et kart og hvor det er i henhold til startposisjonen. %Bruk: bare kjør programmet med å ha erklært en roomba -variabel, også %har et grønt objekt i bevegelse %Utdata: viser bildesporingsbilde, e -postkart og tekst til bruker %% Følgende seksjon b = 0; %Initialiserer variabler c = 0; x = 0; y = 0; theta = 0; mens c == 0 %Loop for å få det til å oppdage det blå objektet og hindringer t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %initialiserer strukturene for sensorverdier lys = getLightBumpers (r); bump = getBumpers (r); hvis light.leftCenter> = 10 || light.rightCenter> = 10 % Sanser hvis det er en vegg i nærheten av r.stop r.setLEDDigits ('hjelp') c = 1 % mens b == 0 % hvis bump.right == 1 || bump.left == 1 || bump.front == 1 % Sanser om den har støttet noe etter at den registrerer en vegg % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Sanser hvis den har støttet noe, i så fall vil den sende en e -post r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || klippe. venstre <= 100 || cliff.right <= 100 %Sanser hvis det er en klippe nær r.stop c = 1 r.setLEDDigits ('hjelp') else %Angir stasjonshastighetene for å følge den blå hvis yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koordinat av romba y = d.*sind (theta).*d + y; % y -koordinat for roomba -underplottet (1, 2, 1) plottet (x, y, 'bd') % plotter banen og legger til en titteltittel ('Roomba Path') hold på; slutt

Trinn 5: Kode Del 3: E -post seksjon

Dette tar den plottede banen og bildet og sender det til en spesifisert e -postadresse

(Vist her med eksempel e -post)

%% e -postdel

hvis b == 1 saveas (gcf, 'rovermap.png') %lagrer tallet setpref ('Internett', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internett', 'E_mail', '[email protected]'); % e -postkonto som skal sendes fra setpref ('Internett', 'SMTP_Username', '[email protected]'); % avsendere brukernavn setpref ('Internett', 'SMTP_Password', 'gssegsse'); % Avsendere passord rekvisitter = 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 ('eksempel e -post', 'RoverBeacon', 'Astronauten har sluttet å bevege seg. Følg instruksjonene i den vedlagte filen for gjenoppretting,' rovermap-p.webp

Anbefalt: