Sadržaj:

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

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

Video: UTK EF 230 MarsRoomba projekt jesen 2018: 5 koraka
Video: По следам древней цивилизации? 🗿 Что, если мы ошиблись в своем прошлом? 2024, Studeni
Anonim
UTK EF 230 MarsRoomba projekt jesen 2018
UTK EF 230 MarsRoomba projekt 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 potencijalima planeta 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. Planirani cilj roverske misije za 2020. uglavnom je isti, ali s posebnim zadatkom "prikupiti uzorke tla i stijena i pohraniti ih na površinu za potencijalni povratak na Zemlju putem buduće misije", navodi NASA.

Međutim, pod pretpostavkom da će se budući roveri koristiti za ljudsku pomoć, naš je tim 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 opreme za održavanje i život, naš bi rover mogao poslužiti kao pokretni svjetionik, primijetivši da je astronaut koji je slijedio nepomičan i prenosio poruku u nevolji. Da bi pratio čovjeka i utvrdio nepokretnost, rover bi uzimao unose kao što su boja ljudskih cipela i njihovo kretanje. Još jedan ulaz koji treba uzeti u obzir jest 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 takvom 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 osmišljen je kako bi pomogao čitatelju u programiranju njegove ili njezine Roombe da uspješno slijedi "astronauta" i 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) Preuzimanje Roombe i Roombe

Korak 2: Postavljanje/preuzimanje

Postavljanje/preuzimanje
Postavljanje/preuzimanje

Pokrenite ovu skriptu u MATLAB -u kako biste preuzeli softver potreban za pristup Roombi (spremljen u vlastitu datoteku u mapi projekta)

Dodatna pomoć:

% Instalacijski program za EF 230 Roomba Project% Zadnje ažuriranje: 13. rujna 2017. (Riješeni sigurnosni problemi povezani s https poslužiteljem i upozorenje o brisanju datoteke ako se jave pogreške) funkcija roombaInstall clc; % popis 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 certifikata server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instaliranje/ažuriranje Roombe'; % display purpose and get prompt prompt = {'Ovaj program će preuzeti ove datoteke EF 230 Roomba:' '' strjoin (files, '') '' '' u ovu mapu: '' 'cd' '' Želite li nastaviti? '}; bip; yn = questdlg (upit, … dlgTitle, … 'Da', 'Ne', 'Da');

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

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

% preuzimanje datoteka cnt = 0; za i = 1: duljina (datoteke) f = datoteke {i}; disp (['Preuzimanje' f]); probajte url = [poslužitelj f]; websave (f, url, opcije); % dodanih mogućnosti za izbjegavanje sigurnosnih pogrešaka cnt = cnt + 1; catch disp (['Pogreška pri preuzimanju' f]); lutka = [f '.html']; ako postoji (lažna, 'datoteka') == 2 brisanje (lažna) end end end

if cnt == length (files) msg = 'Instalacija uspješna'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Greška pri instalaciji - detalje potražite u naredbenom prozoru'; waitfor (errordlg (msg, dlgTitle)); kraj

kraj %roombaInstaliraj

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 te pronalazi središnje xy koordinate praćenog objekta

Spremite ovaj kôd u drugu datoteku u istoj mapi.

funkcija [xm, ym] = trackingblue (r) %Ulazi: roomba varijabla %Izlazi: x i y vrijednost središta sljedećeg objekta %Svrha: pronalazi središte plavog objekta sa slikom %Upotreba [x vrijednost, y vrijednost] = trackingblue (roomba varijabla) img = r.getImage; % čita kameru s podcrta robota (1, 2, 2) podslika (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 = samoPLAV> 40; držite na podcrtici (1, 2, 2) podslika (bw); [x, y] = nađi (tm); 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 (tm, 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: Kod 2, dio: Dok je petlja

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

%Rover projekt

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Ulazi: vrijednost roombe, podaci o kameri, udarci, svjetlo i zidni senzori %Svrha: Prati astronauta i izbjegava prepreke. Ako je upozoren, roomba šalje e -poruku %s pojedinostima o karti i o njezinoj lokaciji prema početnoj poziciji. %Upotreba: samo pokrenite program s deklariranom roomba varijablom, također %imate pokretni zeleni objekt %Izlazi: prikazuje sliku za praćenje slike, mapu e -pošte i tekst korisniku %% Slijedeći odjeljak b = 0; %Inicijaliziranje varijabli c = 0; x = 0; y = 0; theta = 0; dok je c == 0 %Petlja za otkrivanje plavog objekta i prepreka 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 svjetlo.lijevi centar> = 10 || light.rightCenter> = 10 % Osjeti postoji li zid u blizini r.stop r.setLEDDigits ('pomoć') c = 1 % dok je b == 0 % ako je neravnina.desna == 1 || bump.left == 1 || bump.front == 1 % Osjeti da li je naletio na nešto nakon što je osjetio zid % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Osjeti ako je nešto naletjelo, ako je tako, poslat će e -poruku r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || litica.desnoSpred <= 100 || litica.lijevo <= 100 || cliff.right <= 100 %Osjeti ako se u blizini r.stop nalazi litica c = 1 r.setLEDDigits ('pomoć') else %Postavlja brzine vožnje da slijede plavo ako je yval = 100 r.setDriveVelocity (0.1) elseif yval 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) iscrtavanje (x, y, 'bd') % iscrtava putanju i dodaje naslov naslova ('Roomba Path') hold on; kraj

Korak 5: Kod 3: odjeljak e -pošte

To će uzeti zacrtanu putanju i sliku te ih poslati na navedenu adresu e -pošte

(Ovdje prikazano s primjerom e -pošte)

%% odjeljak e -pošte

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

Preporučeni: