Indholdsfortegnelse:

UTK EF 230 MarsRoomba Project Efterår 2018: 5 trin
UTK EF 230 MarsRoomba Project Efterår 2018: 5 trin

Video: UTK EF 230 MarsRoomba Project Efterår 2018: 5 trin

Video: UTK EF 230 MarsRoomba Project Efterår 2018: 5 trin
Video: Глава 11. Джейн Эйр Шарлотты Бронте 2024, November
Anonim
UTK EF 230 MarsRoomba Project Efterår 2018
UTK EF 230 MarsRoomba Project Efterår 2018

I øjeblikket bruges Mars -rovere til at indsamle data på Mars overflade ved hjælp af forskellige metoder til den endelige ende med at lære mere om planetens potentiale for mikrobielt liv. Rovers bruger primært fotografi og jordanalyseværktøjer til dataindsamling, men rovers omfatter også navigationsinstrumenter, strålingsdetektorer, atmosfæriske sensorer og en laser til fordampning af stenprøver. Den planlagte rovermission i 2020 er stort set det samme, men med den særlige opgave at "indsamle prøver af jord og sten og gemme dem på overfladen for potentiel tilbagevenden til Jorden ved en fremtidig mission," ifølge NASA.

Men under forudsætningen af, at fremtidige rovere vil blive brugt til menneskelig bistand, overvejede vores team, hvilke aspekter af mennesker roveren kunne overvåge. Vi kom til den konklusion, at hvis en nødsituation gør en astronaut bevidstløs med svigtende livsstøtte og udstyr, kan vores rover tjene som et mobilt fyrtårn ved at observere, at den astronaut, den fulgte, er urørlig og videresender et nødsbudskab. For at følge mennesket og bestemme immobilitet ville roveren tage input som farven på menneskets sko og deres bevægelse. Et andet input at overveje er, at det skulle huske sin vej for at videresende et nødsignal i nødstilfælde. Vores rover opfylder et behov på Mars ved at forsøge en så kostbar mission på sådant fremmed terræn nødvendiggør flere lag fejlsikre, og skulle en astronaut ikke være i stand til at få deres egen hjælp på grund af funktionsfejl eller bevidstløshed, kan roveren advare andre.

Denne instruks er designet til at hjælpe læseren med at programmere sin Roomba til med succes at følge en "astronaut" og til at sende et nødsignal, hvis det er relevant.

Trin 1: Nødvendige materialer

Nødvendige materialer
Nødvendige materialer

1) Internet/tilgængelig computer/bærbar computer

2) MATLAB_R2018a

3) Roomba og Roomba Download

Trin 2: Opsætning/download

Opsætning/download
Opsætning/download

Kør dette script i MATLAB for at downloade den software, der er nødvendig for at få adgang til Roomba (gemt i sin egen fil i projektmappen)

Yderligere hjælp:

% Installationsprogram til EF 230 Roomba Project% Sidste opdatering: 13. september 2017 (Fixede sikkerhedsproblemer forbundet med https -server og fjernet advarsel om sletning af filer, hvis der opstod fejl) funktion roombaInstall clc; % liste over filer til installation af filer = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % placering at installere fra optioner = weboptioner ('CertificateFilename', ''); % bed den om at ignorere certifikatkrav server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba -installation/opdatering'; % visningsformål og få bekræftelsesprompt = {'Dette program vil downloade disse EF 230 Roomba -filer:' '' strjoin (filer, '') '' 'til denne mappe:' '' cd '' 'Vil du fortsætte? '}; bip; yn = questdlg (prompt,… dlgTitle,… 'Ja', 'Nej', 'Ja');

hvis ~ strcmp (yn, 'Ja'), returneres; ende

% få liste over filer, der findes eksisterende_filer = filer (cellfun (@exist, filer)> 0); hvis ~ isempty (eksisterende_filer) % sørg for, at det virkelig er ok at udskifte dem prompt = {'Du erstatter disse fil (er):' '' strjoin (eksisterende_filer, '') '' 'OK at erstatte?' }; bip; yn = questdlg (prompt,… dlgTitle,… 'Ja', 'Nej', 'Ja'); hvis ~ strcmp (yn, 'Ja'), returneres; ende ende

% download filerne cnt = 0; for i = 1: længde (filer) f = filer {i}; disp (['Downloader' f]); prøv url = [server f]; websave (f, url, muligheder); % tilføjede muligheder for at undgå sikkerhedsfejl cnt = cnt + 1; catch disp (['Fejl ved download' f]); dummy = [f '.html']; hvis findes (dummy, 'fil') == 2 slet (dummy) ende ende ende

if cnt == length (files) msg = 'Installation vellykket'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Installationsfejl - se kommandovinduet for detaljer'; waitfor (errordlg (msg, dlgTitle)); ende

slut %roombaInstall

Trin 3: Kode Del 1: Sporingsfunktion

Kode Del 1: Sporingsfunktion
Kode Del 1: Sporingsfunktion

Denne funktion tager Roomba -variablen og billedet fra kameraet på Roomba og finder de midterste xy -koordinater for det sporede objekt

Gem denne kode i en anden fil i den samme mappe.

funktion [xm, ym] = trackingblue (r) %Inputs: roomba variabel %Outputs: x og y værdi af midten af følgende objekt %Formål: finder midten af et blåt objekt givet et billede %Anvendelse [x værdi, y værdi] = trackingblue (roomba -variabel) img = r.getImage; % læser kameraet af underbilledet (1, 2, 2) fra robotundergrunden (img); %viser billede i samme vindue som stititlen ('Sporingsbillede') rød = img (:,:, 1); grøn = img (:,:, 2); blå = img (:,:, 3); justBlue = blå - grøn/2 - rød/2; bw = justBlue> 40; hold på delplot (1, 2, 2) delbillede (bw); [x, y] = find (bw); hvis ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = rund (middelværdi (y)); xx = max (1, xm-5): min (xm+5, størrelse (bw, 1)); yy = max (1, ym-5): min (ym+5, størrelse (bw, 2)); bwbw = nuller (størrelse (bw), 'uint8'); bwbw (xx, åå) = 255; hold på delplot (1, 2, 2) delbillede (justBlue + bwbw); ende

Trin 4: Kode Del 2: While Loop

Denne kode driver Roomba baseret på objektets x og y placering fra sporingsfunktionen. Dette får Roomba til at passe på vægge og klipper, mens den søger blå. Dette vil også tage x- og y -koordinaterne for Roomba -stien og oprette et tilsvarende plot med sporingsbilledet. Hvis bump -sensoren er aktiveret, går den videre til e -mail -sektionen

%Rover -projekt

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Inputs: roomba værdi, kameradata, bump, lys og væg sensorer %Formål: Følger astronaut og undgår forhindringer. Hvis der advares, sender roomba en e -mail %, der beskriver et kort, og hvor det er i henhold til dets startposition. %Anvendelse: bare kør programmet med at have erklæret en roomba -variabel, også %har et grønt objekt i bevægelse %Outputs: viser billedsporingsbillede, e -mailkort og tekst til bruger %% Følgende afsnit b = 0; %Initialiseringsvariabler c = 0; x = 0; y = 0; theta = 0; mens c == 0 %Loop for at få det til at registrere det blå objekt og forhindringer t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %initialiserer strukturerne for sensorværdier lys = getLightBumpers (r); bump = getBumpers (r); hvis light.leftCenter> = 10 || light.rightCenter> = 10 % Sanser, hvis der er en væg i nærheden af r.stop r.setLEDDigits ('hjælp') c = 1 %, mens b == 0 % hvis bump.right == 1 || bump. venstre == 1 || bump.front == 1 % Sanser, hvis den har stødt noget, efter at den har registreret en væg % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump. venstre == 1 || bump.front == 1 %Sanser, hvis den har stødt på noget, i så fald sender den en e -mail r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || klint. venstre <= 100 || cliff.right <= 100 %Sanser, hvis der er en klippe i nærheden af r.stop c = 1 r.setLEDDigits ('hjælp') else %Indstiller drevhastighederne til at følge den blå, hvis yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) ende ende theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koordinat for roomba y = d.*sind (theta).*d + y; % y koordinat for roomba -underplot (1, 2, 1) plot (x, y, 'bd') % tegner stien og tilføjer en titeltitel ('Roomba Path') hold på; ende

Trin 5: Kode Del 3: E -mail sektion

Dette vil tage den plottede sti og billede og sende det til en bestemt e -mail -adresse

(Vist her med eksempelemail)

%% e -mailsektion

hvis b == 1 saveas (gcf, 'rovermap.png') %gemmer tallet setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mailkonto, der skal sendes fra setpref ('Internet', 'SMTP_Username', '[email protected]'); % afsendere brugernavn setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Afsenders adgangskode 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 -mail', 'RoverBeacon', 'Astronauten er stoppet med at bevæge sig. For gendannelse skal du følge anvisningerne i den vedhæftede fil.', 'rovermap.png') disp ('e -mail sendt') ende

Anbefalede: