Turinys:

„UTK EF 230 MarsRoomba“projekto ruduo 2018: 5 žingsniai
„UTK EF 230 MarsRoomba“projekto ruduo 2018: 5 žingsniai

Video: „UTK EF 230 MarsRoomba“projekto ruduo 2018: 5 žingsniai

Video: „UTK EF 230 MarsRoomba“projekto ruduo 2018: 5 žingsniai
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Liepa
Anonim
„UTK EF 230 MarsRoomba“projekto ruduo 2018 m
„UTK EF 230 MarsRoomba“projekto ruduo 2018 m

Šiuo metu Marso roveriai yra naudojami duomenims rinkti Marso paviršiumi įvairiais metodais, iki galo sužinoti daugiau apie planetos potencialą mikrobams. „Rovers“duomenų rinkimui pirmiausia naudoja fotografavimo ir dirvožemio analizės įrankius, tačiau roveriai taip pat apima navigacijos prietaisus, radiacijos detektorius, atmosferos jutiklius ir lazerį uolienų mėginių garinimui. Planuojamos 2020 m. Roverio misijos tikslas iš esmės yra tas pats, tačiau su specialia užduotimi „surinkti dirvožemio ir uolienų mėginius ir išsaugoti juos paviršiuje, kad ateityje jie galėtų grįžti į Žemę“, teigia NASA.

Tačiau laikydamiesi prielaidos, kad būsimi roveriai bus naudojami žmonėms padėti, mūsų komanda svarstė, kokius žmonių aspektus roveris galėtų stebėti. Mes padarėme išvadą, kad jei avarijos atveju astronautas prarastų sąmonę, nes jam trūksta gyvybės palaikymo ir įrangos, mūsų roveris galėtų būti mobilus gegužinis švyturys, pastebėjęs, kad jo sekamas astronautas yra nejudrus ir perduoda nelaimės pranešimą. Kad galėtų sekti žmogų ir nustatyti nejudrumą, roveris imtųsi tokių duomenų, kaip žmogaus batų spalva ir jų judesiai. Kitas dalykas, į kurį reikia atsižvelgti, yra tai, kad jis turėtų prisiminti savo kelią, kad avariniu atveju perduotų nelaimės signalą. Mūsų roveris patenkina Marso poreikį, nes norint atlikti tokią brangią misiją tokioje svetimoje vietovėje reikia kelių sluoksnių nesaugių seifų, o jei astronautas negalės gauti savo pagalbos dėl netinkamo veikimo ar sąmonės netekimo, roveris gali įspėti kitus.

Ši instrukcija skirta padėti skaitytojui užprogramuoti savo „Roomba“sėkmingai sekti „astronautą“ir prireikus nusiųsti nelaimės signalą.

1 žingsnis: reikalingos medžiagos

Reikalingos medžiagos
Reikalingos medžiagos

1) Kompiuteris/nešiojamas kompiuteris, prieinamas internete

2) MATLAB_R2018a

3) „Roomba“ir „Roomba“atsisiųsti

2 veiksmas: sąranka/atsisiuntimas

Sąranka/Atsisiuntimas
Sąranka/Atsisiuntimas

Paleiskite šį scenarijų MATLAB, kad atsisiųstumėte programinę įrangą, reikalingą norint pasiekti „Roomba“(išsaugotą savo faile projekto aplanke)

Papildoma pagalba:

% EF 230 „Roomba Project“diegimo programa% Paskutinis atnaujinimas: 2017 m. Rugsėjo 13 d. (Ištaisytos saugos problemos, susijusios su „https“serveriu ir pašalintų failų ištrynimo įspėjimas, jei įvyko klaidų) funkcija roombaInstall clc; % failų, kuriuos reikia įdiegti, sąrašas = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % vieta įdiegti iš options = weboptions ('CertificateFilename', ''); % liepia ignoruoti sertifikatų reikalavimų serverį = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = '„Roomba“diegimas/atnaujinimas “; % rodymo tikslas ir gaukite patvirtinimo raginimą = {'Ši programa atsisiųs šiuos EF 230 Roomba failus:' '' strjoin (failai, '') '' '' į šį aplanką: '' 'cd' '' Ar norite tęsti? '}; pyptelėjimas; yn = questdlg (raginimas,… dlgTitle,… „Taip“, „Ne“, „Taip“);

jei ~ strcmp (yn, 'Taip'), grįžti; galas

% get failų, kurie egzistuoja, sąrašas jei ~ isempty (egzistuojantys_failai) % įsitikinkite, kad tikrai gerai juos pakeisti. }; pyptelėjimas; yn = questdlg (raginimas,… dlgTitle,… „Taip“, „Ne“, „Taip“); jei ~ strcmp (yn, 'Taip'), grįžti; pabaiga galas

% atsisiųsti failus cnt = 0; i = 1: ilgis (failai) f = failai {i}; disp (['Atsisiunčiama' f]); pabandykite url = [serveris f]; žiniatinklio išsaugojimas (f, url, parinktys); % pridėta parinkčių, kad būtų išvengta saugumo klaidų cnt = cnt + 1; catch disp (['Klaida atsisiunčiant' f]); manekenas = [f '.html']; jei egzistuoja (manekenas, 'failas') == 2 ištrinti (fiktyvus) pabaigos pabaigą

if cnt == ilgis (failai) msg = 'Sėkmingas diegimas'; laukti (msgbox (msg, dlgTitle)); else msg = 'Įdiegimo klaida - daugiau informacijos rasite komandų lange'; waitfor (errordlg (msg, dlgTitle)); galas

pabaiga %roombaInstall

3 žingsnis: kodas 1 dalis: sekimo funkcija

Kodas 1 dalis. Stebėjimo funkcija
Kodas 1 dalis. Stebėjimo funkcija

Ši funkcija paima kintamąjį „Roomba“ir vaizdą iš „Roomba“kameros ir nustato stebimo objekto centro xy koordinates

Išsaugokite šį kodą kitame to paties aplanko faile.

funkcija [xm, ym] = trackingblue (r) %Įėjimai: roomba kintamasis %Išėjimai: x ir y šio objekto centro reikšmė %Tikslas: suranda mėlyno objekto centrą su vaizdu %Naudojimas [x reikšmė, y value] = trackingblue (roomba kintamasis) img = r.getImage; % nuskaito fotoaparatą iš roboto papildomosios dalies (1, 2, 2) antrinio vaizdo (img); %rodo vaizdą tame pačiame lange kaip ir kelio pavadinimas ('Stebėjimo vaizdas') red = img (:,:, 1); žalia = img (:,:, 2); mėlyna = img (:,:, 3); tik mėlyna = mėlyna - žalia/2 - raudona/2; bw = tik mėlyna> 40; sulaikyti antrinėje dalyje (1, 2, 2) pavaizdą (bw); [x, y] = rasti (bw); if ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = apvalus (vidurkis (y)); xx = max (1, xm-5): min (xm+5, dydis (bw, 1)); yy = max (1, ym-5): min (ym+5, dydis (bw, 2)); bwbw = nuliai (dydis (bw), 'uint8'); bwbw (xx, yy) = 255; palaikykite antrinės dalies (1, 2, 2) antrinį vaizdą (tikBlue + bwbw); galas

4 žingsnis: kodas 2 dalis

Šis kodas varo „Roomba“pagal stebėjimo funkcijos objekto x ir y vietą. Tai leis „Roomba“saugotis sienų ir uolų, ieškant mėlynos spalvos. Tai taip pat užims „Roomba“kelio x ir y koordinates ir sukurs atitinkamą grafiką su stebėjimo vaizdu. Jei įjungtas smūgio jutiklis, jis pereis į el

„Rover“projektas

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Įėjimai: roomba vertė, kameros duomenys, smūgis, šviesos ir sienos jutikliai %Tikslas: seka astronautą ir vengia kliūčių. Jei įspėjama, „roomba“siunčia el. Laišką, kuriame išsamiai aprašomas žemėlapis ir kur jis yra pagal pradinę padėtį. %Naudojimas: tiesiog paleiskite programą paskelbę „roomba“kintamąjį, taip pat %turi judantį žalią objektą %Išėjimai: rodo vaizdo stebėjimo paveikslėlį, el. Laiškų žemėlapį ir tekstą vartotojui %% Sekite b = 0; %Kintamųjų inicijavimas c = 0; x = 0; y = 0; teta = 0; o c == 0 %kilpa, kad ji aptiktų mėlyną objektą ir kliūtis t = r.timeGet; d = r.getDistance; [xval, yval] = stebėjimo mėlyna (r); skardis = getCliffSensors (r); %inicijavimo struktūros jutiklio reikšmėms šviesa = getLightBumpers (r); guzas = getBumpers (r); jei šviesa.kairysCentras> = 10 || light.rightCenter> = 10 % Jausmas, jei šalia sienos yra r.stop r.setLEDDigits ('pagalba') c = 1 %, o b == 0 %, jei atsitrenkia.stat == 1 || guzas.kairė == 1 || bump.front == 1 % Jausmas, jei jis kažką atsitrenkė, pajutęs sieną % c = 1 % b = 1 % disp ('guzas') % end % end elseif bump.right == 1 || guzas.kairė == 1 || bump.front == 1 %Pajuto, ar kažką atsitrenkė, jei taip, jis atsiųs el. laišką r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || skardis.priekinis priekis <= 100 || skardis.kairė <= 100 || cliff.right <= 100 %Jausmas, jei šalia uolos yra skardis. stop c = 1 r.setLEDDigits ('help') else %Nustato važiavimo greitį, kad jis atitiktų mėlyną spalvą, jei yval = 100 r.setDriveVelocity (0,1) elseif yval 400 r.turnAngle (-5) pabaigos pabaiga teta = teta + r.getAngle; x = d.*cosd (teta) + x; % x kambario koordinatė y = d.*sind (teta).*d + y; % y „roomba“poskyrio koordinatė (1, 2, 1) grafikas (x, y, „bd“) % nubraižo kelią ir prideda pavadinimo pavadinimą („Roomba Path“) palaukite; galas

5 veiksmas: kodas 3 dalis: el. Pašto skyrius

Tai atliks nubrėžtą kelią ir vaizdą ir nusiųs jį nurodytu el. Pašto adresu

(Čia parodyta el. Pašto pavyzdys)

%% El. Pašto skiltis

jei b == 1 saveas (gcf, 'rovermap.png') %išsaugo figūrą setpref ('Internetas', 'SMTP_Server', 'smtp.gmail.com'); setpref („Internetas“, „El. paštas“, „[email protected]“); % pašto paskyra, kurią reikia siųsti iš setpref ('Internetas', 'SMTP_Username', '[email protected]'); % siuntėjų vartotojo vardas setpref ('Internetas', 'SMTP_Password', 'gssegsse'); % Siuntėjų slaptažodžių rekvizitai = 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 („pavyzdinis el. paštas“, „RoverBeacon“, „Astronautas nustojo judėti. Norėdami atsigauti, vadovaukitės pridėto failo nurodymais.“, „rovermap.png“) disp („el. laiškas išsiųstas“) pabaiga

Rekomenduojamas: