Sisällysluettelo:

UTK EF 230 MarsRoomba -hanke syksyllä 2018: 5 vaihetta
UTK EF 230 MarsRoomba -hanke syksyllä 2018: 5 vaihetta

Video: UTK EF 230 MarsRoomba -hanke syksyllä 2018: 5 vaihetta

Video: UTK EF 230 MarsRoomba -hanke syksyllä 2018: 5 vaihetta
Video: Кочует в вагонах - выходит семья 2024, Marraskuu
Anonim
UTK EF 230 MarsRoomba -hanke syksyllä 2018
UTK EF 230 MarsRoomba -hanke syksyllä 2018

Tällä hetkellä Mars -rovereita käytetään tietojen keräämiseen Marsin pinnalla eri menetelmillä, jotta voimme oppia lisää planeetan mahdollisuuksista mikrobielämään. Roverit käyttävät pääasiassa valokuvaus- ja maaperäanalyysityökaluja tietojen keräämiseen, mutta rovereihin kuuluu myös navigointivälineitä, säteilyilmaisimia, ilmakehän antureita ja laser kivinäytehöyrystystä varten. Suunniteltu rover -tehtävän 2020 tavoite on enimmäkseen sama, mutta sen erityistehtävänä on "kerätä näytteitä maaperästä ja kivestä ja tallentaa ne välimuistiin pinnalle tulevaa tehtävää varten palatakseen", NASAn mukaan.

Olettaen kuitenkin, että tulevia kulkijoita käytetään ihmisten avuksi, tiimimme pohti, mitä rovers -ihmisiä voisi seurata. Tulimme siihen johtopäätökseen, että jos jokin hätätilanteessa astronautti menettää tajuntansa, jos elintoimintoja ja varusteita ei ole, roverimme voisi toimia liikkuvana majakkavalona havaitsemalla, että sen seuraama astronautti on liikkumaton ja välittää hätäsanoman. Seuratakseen ihmistä ja määrittääkseen liikkumattomuuden rover ottaisi tietoja, kuten ihmisen kenkien värin ja niiden liikkeen. Toinen huomioon otettava tieto on, että sen on muistettava polkunsa voidakseen välittää hätäsignaalin hätätilanteessa. Kuljettajamme täyttää Marsin tarpeet siinä mielessä, että tällaisen kalliin tehtävän suorittaminen tällaisella vieraalla maastolla vaatii useita kerroksia vikasuojaa, ja jos astronautti ei pysty saamaan omaa apua toimintahäiriön tai tajuttomuuden vuoksi, rover voi varoittaa muita.

Tämä ohje on suunniteltu auttamaan lukijaa ohjelmoimaan Roombaansa seuraamaan "astronauttia" ja lähettämään tarvittaessa hätäsignaalin.

Vaihe 1: Tarvittavat materiaalit

Tarvittavat materiaalit
Tarvittavat materiaalit

1) Internet -yhteys tietokone/kannettava tietokone

2) MATLAB_R2018a

3) Lataa Roomba ja Roomba

Vaihe 2: Asennus/lataus

Asennus/lataus
Asennus/lataus

Suorita tämä komentosarja MATLABissa ladataksesi Roomban käyttämiseen tarvittavat ohjelmistot (tallennettu omaan tiedostoonsa projektikansioon)

Lisäapua:

% EF 230 Roomba Project -asennusohjelma% Viimeisin päivitys: 13. syyskuuta 2017 (Korjatut suojausongelmat, jotka liittyvät https -palvelimeen ja poistetun tiedoston poistovaroitus, jos virheitä ilmenee) function roombaInstall clc; % luettelo asennettavista tiedostoista = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % sijainti asennettavaksi vaihtoehdoista = weboptions ('CertificateFilename', ''); % käske ohittaa varmennevaatimukset palvelin = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomban asennus/päivitys'; % näyttötarkoitus ja vahvistuskehote = {'Tämä ohjelma lataa nämä EF 230 Roomba -tiedostot:' '' strjoin (tiedostot, '') '' '' tähän kansioon: '' 'cd' '' Haluatko jatkaa? '}; piippaus; yn = questdlg (kehote,… dlgTitle,… 'Kyllä', 'Ei', 'Kyllä');

jos ~ strcmp (yn, 'Kyllä'), palaa; loppuun

% get luettelo tiedostoista olemassa olevista_files = files (cellfun (@exist, files)> 0); jos ~ isempty (olemassa olevat_tiedostot) % varmista, että on todella hyvä korvata ne. }; piippaus; yn = questdlg (kehote,… dlgTitle,… 'Kyllä', 'Ei', 'Kyllä'); jos ~ strcmp (yn, 'Kyllä'), palaa; loppu loppu

% lataa tiedostot cnt = 0; i = 1: pituus (tiedostot) f = tiedostot {i}; disp (['Ladataan' f]); kokeile url = [palvelin f]; web -tallennus (f, url, vaihtoehdot); % lisävaihtoehtoja suojausvirheiden välttämiseksi cnt = cnt + 1; catch disp (['Virhe ladattaessa' f]); nukke = [f '.html']; jos on olemassa (dummy, 'file') == 2 poista (dummy) end end end end

if cnt == pituus (tiedostot) msg = 'Asennus onnistui'; odota (msgbox (msg, dlgTitle)); else msg = 'Asennusvirhe - katso lisätietoja komentoikkunasta'; waitfor (errordlg (msg, dlgTitle)); loppuun

end %roombaInstall

Vaihe 3: Koodi Osa 1: Seuranta

Koodi Osa 1: Seuranta
Koodi Osa 1: Seuranta

Tämä toiminto ottaa Roomba -muuttujan ja Roomban kameran kuvan ja löytää seuratun kohteen keskikohdat xy

Tallenna tämä koodi samaan kansioon toiseen tiedostoon.

function [xm, ym] = trackingblue (r) %Tulot: roomba muuttuja %Lähdöt: x ja y seuraavan objektin keskipisteen arvo %Tarkoitus: löytää sinisen objektin keskipisteen, kun kuva on %Käyttö [x arvo, y value] = trackingblue (roomba -muuttuja) img = r.getImage; % lukee kameran pois robotin aliosasta (1, 2, 2) alikuvasta (img); %näyttää kuvan samassa ikkunassa kuin polun otsikko ('Seurantakuva') punainen = img (:,:, 1); vihreä = img (:,:, 2); sininen = img (:,:, 3); justBlue = sininen - vihreä/2 - punainen/2; bw = justBlue> 40; pidä alakuvauksessa (1, 2, 2) alikuvassa (bw); [x, y] = löytää (bw); jos ~ isempty (x) && ~ isempty (y) xm = pyöreä (keskiarvo (x)); ym = pyöreä (keskiarvo (y)); xx = max (1, xm-5): min (xm+5, koko (bw, 1)); yy = max (1, ym-5): min (ym+5, koko (bw, 2)); bwbw = nollia (koko (bw), 'uint8'); bwbw (xx, yy) = 255; pidä aliosaa (1, 2, 2) alikuvana (justBlue + bwbw); loppuun

Vaihe 4: Koodi Osa 2: Silmukka

Tämä koodi ajaa Roomban seurantatoiminnon objektin x- ja y -sijainnin perusteella. Tämä saa Roomban varomaan muureja ja kallioita etsiessään sinistä. Tämä ottaa myös Roomba -polun x- ja y -koordinaatit ja luo vastaavan kuvaajan seurantakuvan kanssa. Jos törmäysanturi aktivoidaan, se siirtyy sähköpostiosioon

%Rover -projekti

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Tulot: roomba -arvo, kameratiedot, törmäys-, valo- ja seinäanturit %Tarkoitus: Seuraa astronauttia ja välttää esteitä. Jos hälytys lähetetään, roomba lähettää sähköpostiviestin, jossa kerrotaan kartasta ja missä se on lähtöasennon mukaan. %Käyttö: suorita vain ohjelma, jossa on ilmoitettu roomba -muuttuja, ja myös %: lla on liikkuva vihreä esine %Lähdöt: näyttää kuvan seurantakuvan, sähköpostin kartan ja tekstin käyttäjälle %% Seuraa osaa b = 0; %Alustetaan muuttujat c = 0; x = 0; y = 0; teeta = 0; kun taas c == 0 %Silmukka, jotta se havaitsee sinisen kohteen ja esteet t = r.timeGet; d = r.getDistance; [xval, yval] = seuranssininen (r); cliff = getCliffSensors (r); %rakenteiden alustaminen anturin arvoille valo = getLightBumpers (r); kolahtaa = getBumpers (r); jos valo.leftCenter> = 10 || light.rightCenter> = 10 % Tunnistaa, jos seinän lähellä on r.stop r.setLEDDigits ('help') c = 1 %, kun taas b == 0 %, jos kolahtaa.right == 1 || bump.left == 1 || bump.front == 1 % Tunnistaa, jos se on törmännyt johonkin sen jälkeen, kun se havaitsee seinän % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Tunnistaa, jos se on törmännyt johonkin, jos niin, se lähettää sähköpostia r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || kallio.vasen <= 100 || cliff.right <= 100 %Tunnistaa, jos kallio on lähellä r.stop c = 1 r.setLEDDigits ('help') else %Asettaa ajonopeudet seuraamaan sinistä, jos yval = 100 r.setDriveVelocity (0,1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d.*cosd (teeta) + x; % x huoneen koordinaatti y = d.*sind (theta).*d + y; % y -koordinaatti roomba -alitavasta (1, 2, 1) juoni (x, y, 'bd') % piirtää polun ja lisää otsikon otsikon ('Roomba -polku') odota; loppuun

Vaihe 5: Koodi Osa 3: Sähköpostiosio

Tämä vie piirretyn polun ja kuvan ja lähettää sen määritettyyn sähköpostiosoitteeseen

(Näytetään tässä esimerkkisähköpostilla)

%% Sähköposti -osio

jos b == 1 saveas (gcf, 'rovermap.png') %tallentaa luvun setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'Sähköposti', '[email protected]'); % sähköpostitili lähetettäväksi osoitteesta setpref ('Internet', 'SMTP_Username', '[email protected]'); % lähettäjien käyttäjätunnus setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Lähettäjien salasana rekvisiitta = 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 ('esimerkki sähköposti', 'RoverBeacon', 'Astronautti on lakannut liikkumasta. Toipumiseen noudata liitteenä olevan tiedoston ohjeita.', 'rovermap.png') disp ('email sent') end

Suositeltava: