Përmbajtje:

Projekti UTK EF 230 MarsRoomba Vjeshtë 2018: 5 hapa
Projekti UTK EF 230 MarsRoomba Vjeshtë 2018: 5 hapa

Video: Projekti UTK EF 230 MarsRoomba Vjeshtë 2018: 5 hapa

Video: Projekti UTK EF 230 MarsRoomba Vjeshtë 2018: 5 hapa
Video: 3 часа практики английского произношения – укрепите уверенность в разговоре 2024, Nëntor
Anonim
Projekti UTK EF 230 MarsRoomba Vjeshtë 2018
Projekti UTK EF 230 MarsRoomba Vjeshtë 2018

Aktualisht, roverët e Marsit përdoren për të mbledhur të dhëna në sipërfaqen e Marsit përmes metodave të ndryshme, për të përfunduar përfundimisht për të mësuar më shumë rreth potencialit të planetit për jetë mikrobike. Roverët përdorin kryesisht fotografi dhe mjete të analizës së tokës për mbledhjen e të dhënave, por roverët gjithashtu përfshijnë instrumente lundrimi, detektorë rrezatimi, sensorë atmosferikë dhe një lazer për avullimin e mostrës së shkëmbit. Qëllimi i misionit të planifikuar të rover 2020 është kryesisht i njëjtë, por me detyrën e veçantë për të "mbledhur mostra të tokës dhe shkëmbit dhe t'i ruajë ato në sipërfaqe për kthimin e mundshëm në Tokë nga një mision i ardhshëm", sipas NASA -s.

Sidoqoftë, nën premisën se roverët e ardhshëm do të përdoren për ndihmë njerëzore, ekipi ynë shqyrtoi se cilat aspekte të njerëzve roveri mund të monitoronte. Ne arritëm në përfundimin se nëse ndonjë urgjencë e bën një astronaut të pavetëdijshëm me ndihmën dhe pajisjet e dështuara të jetës, roveri ynë mund të shërbejë si një fener i lëvizshëm i mëngjesit duke vëzhguar se astronauti që ndoqi është i palëvizshëm dhe transmeton një mesazh shqetësimi. Për të ndjekur njeriun dhe për të përcaktuar palëvizshmërinë, roveri do të merrte informacione të tilla si ngjyra e këpucëve të njeriut dhe lëvizja e tyre. Një kontribut tjetër për t'u marrë parasysh është se do të duhej të mbante mend rrugën e tij në mënyrë që të transmetonte një sinjal shqetësimi në rast emergjence. Roveri ynë plotëson një nevojë në Mars në atë që përpjekja për një mision kaq të kushtueshëm në një terren të tillë të huaj kërkon shtresa të shumta të kasafortave, dhe nëse një astronaut nuk është në gjendje të marrë ndihmën e tyre për shkak të mosfunksionimit ose pavetëdijes, roveri mund të paralajmërojë të tjerët Me

Ky udhëzues është krijuar për të ndihmuar lexuesin në programimin e Roomba të tij ose të saj që të ndjekë me sukses një "astronaut" dhe të dërgojë një sinjal shqetësimi nëse është e aplikueshme.

Hapi 1: Materialet e nevojshme

Materialet e nevojshme
Materialet e nevojshme

1) Kompjuter/laptop me qasje në internet

2) MATLAB_R2018a

3) Roomba dhe Roomba Shkarko

Hapi 2: Konfigurimi/Shkarkimi

Konfigurimi/Shkarkimi
Konfigurimi/Shkarkimi

Drejtoni këtë skenar në MATLAB në mënyrë që të shkarkoni programin e nevojshëm për të hyrë në Roomba (i ruajtur në skedarin e tij në dosjen e projektit)

Ndihmë shtesë:

% Programi i instalimit për EF 230 Roomba Project% Përditësimi i fundit: 13 shtator 2017 (Çështje të rregulluara të sigurisë të lidhura me serverin https dhe heqjen e paralajmërimit të fshirjes së skedarit nëse ndodhin gabime) funksion roombaInstall clc; % lista e skedarëve për instalimin e skedarëve = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % vendndodhje për t'u instaluar nga opsionet = zgjedhjet në internet ('CertificateFilename', ''); % i thuaj që të injorojë kërkesat e certifikatës server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instalo/Përditëso Roomba'; % shfaqja e qëllimit dhe marrja e kërkesës së konfirmimit = {'Ky program do të shkarkojë këto skedarë EF 230 Roomba:' '' strjoin (skedarët, '') '' 'në këtë dosje:' '' cd '' 'A doni të vazhdoni? '}; biep; yn = questdlg (shpejtë,… dlgTitle,… 'Po', 'Jo', 'Po');

nëse ~ strcmp (yn, 'Po'), kthehu; fund

% merrni listën e skedarëve që ekzistojnë_file ekzistues = skedarë (argëtimi i qelizave (@exist, skedarët)> 0); nëse ~ është i zbrazët (skedarët_ekzistues) % sigurohuni që është me të vërtetë mirë t'i zëvendësoni ato shpejtë = {'Po i zëvendësoni këto skedarë (e):' '' strjoin (skedarët_ ekzistues, '') '' 'OK për të zëvendësuar?' }; biep; yn = questdlg (shpejtë,… dlgTitle,… 'Po', 'Jo', 'Po'); nëse ~ strcmp (yn, 'Po'), kthehu; fund fund

% shkarko skedarët cnt = 0; për i = 1: gjatësia (skedarët) f = skedarët {i}; disp (['Shkarkimi' f]); provo url = [server f]; websave (f, url, opsionet); % opsione të shtuara për të shmangur gabimet e sigurisë cnt = cnt + 1; kap disp (['Gabim në shkarkim' f]); bedel = [f '.html']; nëse ekziston (bedel, 'file') == 2 fshini (bedel) fundin e fundit

nëse cnt == gjatësia (skedarët) msg = 'Instalimi është i suksesshëm'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Gabim në instalim - shiko dritaren e komandës për detaje'; waitfor (errordlg (msg, dlgTitle)); fund

fund %roombaInstall

Hapi 3: Kodi Pjesa 1: Funksioni i Ndjekjes

Kodi Pjesa 1: Funksioni i Ndjekjes
Kodi Pjesa 1: Funksioni i Ndjekjes

Ky funksion merr ndryshoren Roomba dhe fotografinë nga kamera në Roomba dhe gjen koordinatat qendrore xy të objektit të gjurmuar

Ruajeni këtë kod në një skedar tjetër në të njëjtën dosje.

funksioni [xm, ym] = ndjekja e ngjyrës blu (r) %Inputet: variabli roomba %Rezultatet: vlera x dhe y e qendrës së objektit të mëposhtëm %Qëllimi: gjen qendrën e një objekti blu të dhënë një imazh %Përdorimi [vlera x, y vlera] = blu ndjekja (ndryshorja e dhomës) img = r.getImage; % lexon kamerën jashtë nën -komplotit robot (1, 2, 2) nën -imazh (img); %tregon imazhin në të njëjtën dritare me titullin e shtegut ('Tracking Image') red = img (:,,, 1); jeshile = img (:,:, 2); blu = img (:,,, 3); justBlue = blu - jeshile/2 - e kuqe/2; bw = vetëm Blu> 40; mbajeni nënlotën (1, 2, 2) nën -imazhin (bw); [x, y] = gjej (bw); nëse ~ e zbrazët (x) && ~ e zbrazët (y) xm = e rrumbullakët (mesatarja (x)); ym = e rrumbullakët (mesatarja (y)); xx = max (1, xm-5): min (xm+5, madhësia (bw, 1)); yy = max (1, ym-5): min (ym+5, madhësia (bw, 2)); bwbw = zero (madhësia (bw), 'uint8'); bwbw (xx, yy) = 255; mbaj nën -figurën (1, 2, 2) nën -imazh (justBlue + bwbw); fund

Hapi 4: Kodi Pjesa 2: Ndërsa Lak

Ky kod drejton Roomba bazuar në vendndodhjen x dhe y të objektit nga funksioni i gjurmimit. Kjo do ta bëjë Roomba të ketë kujdes për muret dhe shkëmbinjtë, ndërsa kërkon blu. Kjo gjithashtu do të marrë koordinatat x dhe y të shtegut Roomba dhe do të krijojë një komplot përkatës me imazhin e përcjelljes. Nëse sensori i përplasjes aktivizohet, ai do të kalojë në seksionin e postës elektronike

%Projekti Rover

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Inputet: vlera e dhomës, të dhënat e kamerës, sensorët e përplasjes, dritës dhe murit %Qëllimi: Ndjek astronautin dhe shmang pengesat. Nëse paralajmërohet, roomba dërgon një email me detaje mbi një hartë dhe ku është sipas pozicionit të saj të fillimit. %Përdorimi: thjesht ekzekutoni programin duke deklaruar një ndryshore roomba, gjithashtu %kanë një objekt të gjelbër në lëvizje %Rezultatet: tregon figurën e përcjelljes së imazhit, hartën e postës elektronike dhe tekstin tek përdoruesi %% Pas Seksionit b = 0; %Fillimi i variablave c = 0; x = 0; y = 0; theta = 0; ndërsa c == 0 %Loop për ta bërë atë të zbulojë objektin blu dhe pengesat t = r.timeGet; d = r.getDistance; [xval, yval] = blu ndjekja (r); shkëmb = getCliffSensors (r); %inicializimi i strukturave për vlerat e sensorit drita = getLightBumpers (r); përplasem = getBumpers (r); nëse drita.leftCenter> = 10 || light.rightCenter> = 10 % Kupton nëse ka një mur pranë r.stop r.setLEDDigits ('ndihmë') c = 1 % ndërsa b == 0 % nëse përplasem.djathtas == 1 || përplasem.majtas == 1 || bump.front == 1 % Ndjen nëse ka përplasur diçka pasi ndjen një mur % c = 1 % b = 1 % disp ('përplasje') % fund % fund elseif përplasje.djathtas == 1 || përplasem.majtas == 1 || bump.front == 1 %Kupton nëse ka përplasur diçka, nëse po, do të dërgojë një email r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || shkëmb.djathtas Përpara <= 100 || shkemb.majtas <= 100 || cliff.right <= 100 %Kupton nëse ka një shkëmb pranë r.ndaloni c = 1 r.setLEDDigits ('ndihmë') tjetër %Vendos shpejtësitë e makinës për të ndjekur ngjyrën blu nëse yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r. KtheseAngle (-5) fundi theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koordinata e dhomës y = d.*sind (theta).*d + y; koordinata % y e nënplotës së roomba (1, 2, 1) komplot (x, y, 'bd') % vizaton shtegun dhe shton një titull titulli ('Rruga Roomba') mbajeni; fund

Hapi 5: Kodi Pjesa 3: Seksioni i Email -it

Kjo do të marrë rrugën dhe imazhin e vizatuar dhe do t'i dërgojë në një adresë emaili të specifikuar

(Shfaqet këtu me shembull email)

%% Seksioni i Email -it

nëse b == 1 saveas (gcf, 'rovermap.png') %ruan setpref të figurës ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % llogari postare për t'u dërguar nga setpref ('Internet', 'SMTP_Username', '[email protected]'); % dërgues i emrit të përdoruesit setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Sends props password = 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 ('email shembull', 'RoverBeacon', 'Astronauti ka ndaluar së lëvizuri. Për shërim, ndiqni udhëzimet në skedarin e bashkangjitur.', 'rovermap.png') disp ('email u dërgua') fund

Recommended: