INHOUDSOPGAWE:

UTK EF 230 MarsRoomba -projek Herfs 2018: 5 stappe
UTK EF 230 MarsRoomba -projek Herfs 2018: 5 stappe

Video: UTK EF 230 MarsRoomba -projek Herfs 2018: 5 stappe

Video: UTK EF 230 MarsRoomba -projek Herfs 2018: 5 stappe
Video: Белокурая крыша с мокрым подвалом ► 1 Прохождение Lollipop Chainsaw 2024, November
Anonim
UTK EF 230 MarsRoomba -projek Herfs 2018
UTK EF 230 MarsRoomba -projek Herfs 2018

Tans word Mars -rovers gebruik om data op die oppervlak van Mars te versamel deur middel van verskillende metodes, om uiteindelik meer te leer oor die potensiaal van die planeet vir mikrobiese lewe. Rovers gebruik hoofsaaklik fotografie- en grondanalise -instrumente vir die insameling van data, maar rovers bevat ook navigasie -instrumente, stralingsdetektore, atmosferiese sensors en 'n laser vir die verdamping van steenmonsters. Die doel van die beplande rovermissie vir 2020 is meestal dieselfde, maar met die spesiale taak om "monsters van grond en gesteentes te versamel en dit op die oppervlak te bêre vir moontlike terugkeer na die aarde deur 'n toekomstige missie," volgens NASA.

Onder die veronderstelling dat toekomstige rovers vir menslike hulp gebruik sal word, het ons span egter oorweeg watter aspekte van mense die rover kan monitor. Ons het tot die gevolgtrekking gekom dat as 'n noodgeval 'n ruimtevaarder bewusteloos maak met gebrekkige lewensondersteuning en toerusting, ons rover kan dien as 'n mobiele baken deur op te let dat die ruimtevaarder wat dit gevolg het, onbeweeglik is en 'n boodskap van nood oordra. Om die mens te volg en immobiliteit te bepaal, sou die rover insette neem, soos die kleur van die skoene van die mens en die beweging daarvan. 'N Ander insette wat in ag geneem moet word, is dat dit sy pad moet onthou om 'n noodsein in geval van nood te kan oordra. Ons rover vervul 'n behoefte op Mars omdat die poging om so 'n duur missie op so 'n vreemde terrein te bewerkstellig, verskeie lae faalkluise benodig, en as 'n ruimtevaarder nie in staat is om hul eie hulp te kry nie as gevolg van wanfunksionering of bewusteloosheid, kan die rover ander waarsku.

Hierdie instruksie is ontwerp om die leser te help met die programmering van sy of haar Roomba om 'n 'ruimtevaarder' suksesvol te volg en, indien van toepassing, 'n noodsein te stuur.

Stap 1: materiaal benodig

Materiaal benodig
Materiaal benodig

1) Internet/toeganklike rekenaar/skootrekenaar

2) MATLAB_R2018a

3) Roomba en Roomba aflaai

Stap 2: Opstel/aflaai

Opstel/aflaai
Opstel/aflaai

Begin hierdie script in MATLAB om die sagteware af te laai wat nodig is om toegang tot die Roomba te kry (gestoor in sy eie lêer in die projekmap)

Bykomende hulp:

% Installasieprogram vir EF 230 Roomba -projek % lys lêers om lêers te installeer = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % plek om van opsies te installeer = webopsies ('CertificateFilename', ''); % gee dit aan om die sertifikaatvereistes te vergeet server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba installering/opdatering'; % vertoondoel en kry bevestiging prompt = {'Hierdie program sal hierdie EF 230 Roomba -lêers:' '' strjoin (lêers, '') '' 'na hierdie vouer aflaai:' '' cd '' 'Wil u voortgaan? '}; biep; yn = questdlg (prompt, … dlgTitle, … 'Ja', 'Nee', 'Ja');

as ~ strcmp (yn, 'Ja'), gee terug; einde

% kry 'n lys met lêers wat bestaan bestaande lêers = lêers (cellfun (@exist, lêers)> 0); as ~ isempty (existing_files) % seker maak dat dit regtig ok is om hulle prompt te vervang = {'U vervang hierdie lêer (s):' '' strjoin (existing_files, '') '' 'OK om te vervang?' }; biep; yn = questdlg (prompt, … dlgTitle, … 'Ja', 'Nee', 'Ja'); as ~ strcmp (yn, 'Ja'), gee terug; einde einde

% laai die lêers af cnt = 0; vir i = 1: lengte (lêers) f = lêers {i}; disp (['Aflaai' f]); probeer url = [bediener f]; websave (f, url, opsies); % het opsies bygevoeg om sekuriteitsfoute te vermy cnt = cnt + 1; catch disp (['Fout tydens aflaai' f]); dummy = [f '.html']; as daar bestaan (dummy, 'file') == 2 delete (dummy) end end end

if cnt == length (files) msg = 'Installasie suksesvol'; wag vir (msgbox (msg, dlgTitle)); else msg = 'Installasie fout - sien opdrag venster vir meer inligting'; wag vir (errordlg (msg, dlgTitle)); einde

eind %roombaInstall

Stap 3: Kode Deel 1: Opsporingsfunksie

Kode Deel 1: Opsporingsfunksie
Kode Deel 1: Opsporingsfunksie

Hierdie funksie neem die Roomba -veranderlike en die foto van die kamera op die Roomba en vind die middelste xy -koördinate van die opgespoorde voorwerp

Stoor hierdie kode in 'n ander lêer in dieselfde gids.

funksie [xm, ym] = trackingblue (r) %Insette: roomba veranderlike %Uitsette: x en y waarde van die middel van die volgende voorwerp %Doel: vind die middelpunt van 'n blou voorwerp gegewe 'n beeld %Gebruik [x waarde, y waarde] = trackingblue (roomba veranderlike) img = r.getImage; % lees die kamera af van die subbeeld van die robot -subplot (1, 2, 2) (afb); %toon beeld in dieselfde venster as die padtitel ('Tracking Image') rooi = img (:,:, 1); groen = img (:,:, 2); blou = img (:,:, 3); justBlue = blou - groen/2 - rooi/2; bw = justBlue> 40; hou subplot (1, 2, 2) subbeeld (bw) vas; [x, y] = vind (bw); as ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = rond (gemiddelde (y)); xx = max (1, xm-5): min (xm+5, grootte (bw, 1)); yy = max (1, ym-5): min (ym+5, grootte (bw, 2)); bwbw = nulle (grootte (bw), 'uint8'); bwbw (xx, jj) = 255; hou subplot (1, 2, 2) subbeeld (justBlue + bwbw); einde

Stap 4: Kode Deel 2: While Loop

Hierdie kode dryf die Roomba gebaseer op die x en y ligging van die voorwerp vanaf die opsporingsfunksie. Dit sal die Roomba laat waak vir mure en kranse terwyl hy blou soek. Dit neem ook die x- en y -koördinate van die Roomba -pad en maak 'n ooreenstemmende plot met die opsporingsbeeld. As die stamp sensor geaktiveer is, gaan dit oor na die e -pos afdeling

%Rover -projek

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Insette: roomba -waarde, kameradata, stamp-, lig- en muursensors %Doel: Volg ruimtevaarder en vermy hindernisse. As dit in kennis gestel word, stuur die roomba 'n e -pos met 'n e -pos met inligting oor 'n kaart en waar dit is volgens die beginposisie. %Gebruik: voer die program uit met die verklaring van 'n roomba -veranderlike, ook %het 'n bewegende groen voorwerp %Uitsette: toon prentopsporing, e -poskaart en teks aan gebruiker %% Volgende afdeling b = 0; %Initialiseer veranderlikes c = 0; x = 0; y = 0; theta = 0; terwyl c == 0 %lus om die blou voorwerp en hindernisse te laat opspoor t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %initialisering van die strukture vir sensorwaardes lig = getLightBumpers (r); stamp = getBumpers (r); as lig.sentrum> = 10 || light.rightCenter> = 10 % Gevoel as daar 'n muur naby r.stop is r.setLEDDigits ('help') c = 1 % terwyl b == 0 % as bump.right == 1 || stamp.links == 1 || bump.front == 1 % Gevoel as dit iets gestamp het nadat dit 'n muur aanvoel % c = 1 % b = 1 % disp ('stamp') % end % end elseif bump.right == 1 || stamp.links == 1 || bump.front == 1 %Gevoel as dit iets gestamp het, indien wel, stuur dit 'n e -pos r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || krans.links <= 100 || cliff.right <= 100 %Gevoel as daar 'n krans naby r.stop is c = 1 r.setLEDDigits ('help') anders %Stel die dryfsnelhede in om die blou te volg as yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x koördinaat van die roomba y = d.*sin (theta).*d + y; % y koördinaat van die roomba subplot (1, 2, 1) plot (x, y, 'bd') % teken die pad en voeg 'n titeltitel ('Roomba Path') by; einde

Stap 5: Kode Deel 3: E -posafdeling

Dit sal die pad en prentjie op 'n uiteensetting neem en dit na 'n spesifieke e -posadres stuur

(Hier getoon met voorbeeld -e -posadres)

%% E -posafdeling

as b == 1 saveas (gcf, 'rovermap.png') %die syfer setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % posrekening om van setpref af te stuur ('Internet', 'SMTP_Username', '[email protected]'); % sender gebruikersnaam setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Senders wagwoord rekwisiete = 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 ('voorbeeld -e -pos', 'RoverBeacon', 'Die ruimtevaarder het opgehou beweeg. Volg die aanwysings in die aangehegte lêer vir herstel,' rovermap-p.webp

Aanbeveel: