Satura rādītājs:

UTK EF 230 MarsRoomba projekts 2018. gada rudens: 5 soļi
UTK EF 230 MarsRoomba projekts 2018. gada rudens: 5 soļi

Video: UTK EF 230 MarsRoomba projekts 2018. gada rudens: 5 soļi

Video: UTK EF 230 MarsRoomba projekts 2018. gada rudens: 5 soļi
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Jūlijs
Anonim
UTK EF 230 MarsRoomba projekts 2018. gada rudens
UTK EF 230 MarsRoomba projekts 2018. gada rudens

Pašlaik Marsa roverus izmanto, lai savāktu datus uz Marsa virsmas, izmantojot dažādas metodes, līdz galam, lai uzzinātu vairāk par planētas potenciālu mikrobu dzīvē. Rovers datu vākšanai galvenokārt izmanto fotografēšanas un augsnes analīzes rīkus, bet roveros ietilpst arī navigācijas instrumenti, radiācijas detektori, atmosfēras sensori un lāzers iežu paraugu iztvaikošanai. Paredzētās 2020. gada roveru misijas mērķis lielākoties ir viens un tas pats, bet ar īpašo uzdevumu “savākt augsnes un iežu paraugus un tos saglabāt kešatmiņā uz virsmas, lai nākotnē varētu atgriezties uz Zemes”, norāda NASA.

Tomēr, pieņemot, ka nākamie roveri tiks izmantoti cilvēku palīdzībai, mūsu komanda apsvēra, kādus cilvēku aspektus rover varētu uzraudzīt. Mēs nonācām pie secinājuma, ka gadījumā, ja kāda ārkārtas situācija padarītu astronautu bezsamaņā bez dzīvības nodrošināšanas un aprīkojuma trūkuma, mūsu roveris varētu kalpot kā mobila maija bāka, novērojot, ka astronauts, kuram tas seko, ir nekustīgs un pārraida briesmu vēstījumu. Lai sekotu cilvēkam un noteiktu nekustīgumu, roveris izmantos tādas ziņas kā cilvēka apavu krāsa un to kustība. Vēl viena informācija, kas jāņem vērā, ir tā, ka tai būtu jāatceras savs ceļš, lai avārijas gadījumā nosūtītu briesmu signālu. Mūsu roveris atbilst Marsa vajadzībām, jo, lai veiktu tik dārgu misiju šādā ārzemju apvidū, ir nepieciešami vairāki neaizsargātu seifu slāņi, un, ja astronauts nevarēs saņemt savu palīdzību nepareizas darbības vai bezsamaņas dēļ, roveris var brīdināt citus.

Šī pamācība ir paredzēta, lai palīdzētu lasītājam programmēt savu Roomba, lai sekotu "astronautam", un vajadzības gadījumā nosūtīt briesmu signālu.

1. darbība. Nepieciešamie materiāli

Nepieciešamie materiāli
Nepieciešamie materiāli

1) Internets pieejams dators/klēpjdators

2) MATLAB_R2018a

3) Roomba un Roomba lejupielāde

2. darbība: iestatīšana/lejupielāde

Iestatīšana/lejupielāde
Iestatīšana/lejupielāde

Palaidiet šo skriptu MATLAB, lai lejupielādētu programmatūru, kas nepieciešama, lai piekļūtu Roomba (saglabāta savā failā projekta mapē)

Papildu palīdzība:

% EF 230 Roomba Project instalēšanas programma% Pēdējais atjauninājums: 2017. gada 13. septembris (novērstas drošības problēmas, kas saistītas ar https serveri un brīdinājums par noņemtu failu dzēšanu, ja rodas kļūdas) function roombaInstall clc; % instalējamo failu saraksts = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % atrašanās vieta, ko instalēt no options = weboptions ('CertificateFilename', ''); % sakiet, lai tas ignorētu sertifikātu prasību serveri = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba instalēšana/atjaunināšana'; % displeja mērķis un saņemt apstiprinājuma uzvedni = {'Šī programma lejupielādēs šos EF 230 Roomba failus:' '' strjoin (faili, '') '' '' šajā mapē: '' 'cd' '' Vai vēlaties turpināt? '}; pīkstiens; yn = questdlg (uzvedne,… dlgTitle,… 'Jā', 'Nē', 'Jā');

ja ~ strcmp (yn, 'Jā'), atgriezties; beigas

% get to failu saraksts, kas pastāv esošie_files = faili (cellfun (@exist, files)> 0); ja ~ isempty (esošie_faili) % pārliecinieties, vai tiešām ir pareizi tos nomainīt. }; pīkstiens; yn = questdlg (uzvedne,… dlgTitle,… 'Jā', 'Nē', 'Jā'); ja ~ strcmp (yn, 'Jā'), atgriezties; beigas beigas

% lejupielādēt failus cnt = 0; i = 1: garums (faili) f = faili {i}; disp (['Lejupielāde' f]); mēģiniet url = [serveris f]; tīmekļa saglabāšana (f, url, opcijas); % pievienotas iespējas, lai izvairītos no drošības kļūdām cnt = cnt + 1; catch disp (['Kļūda lejupielādējot' f]); fiktīvs = [f '.html']; ja pastāv (fiktīvs, 'fails') == 2 dzēst (fiktīvu) beigas beigas

if cnt == garums (faili) msg = 'Instalēšana veiksmīga'; gaidīt (msgbox (msg, dlgTitle)); else msg = 'Instalācijas kļūda - sīkāku informāciju skatīt komandu logā'; waitfor (errordlg (msg, dlgTitle)); beigas

end %roombaInstall

3. darbība. Kods 1. daļa: izsekošanas funkcija

Kods 1. daļa: izsekošanas funkcija
Kods 1. daļa: izsekošanas funkcija

Šī funkcija ņem Roomba mainīgo un attēlu no Roomba kameras un atrod izsekotā objekta centra xy koordinātas

Saglabājiet šo kodu citā failā tajā pašā mapē.

funkcija [xm, ym] = trackingblue (r) %Ievadi: roomba mainīgais %Izejas: x un y vērtība šāda objekta centrā %Mērķis: atrod zila objekta centru, ņemot vērā attēlu %Lietojums [x vērtība, y vērtība] = trackingblue (roomba mainīgais) img = r.getImage; % nolasa kameru no robota apakšplāna (1, 2, 2) apakšattēla (img); %parāda attēlu tajā pašā logā kā ceļa nosaukums ('izsekošanas attēls') red = img (:,:, 1); zaļš = img (:,:, 2); zils = img (:,:, 3); justBlue = zils - zaļš/2 - sarkans/2; bw = tikai zils> 40; turēt apakšplānā (1, 2, 2) apakšattēlu (bw); [x, y] = atrast (bw); ja ~ isempty (x) && ~ isempty (y) xm = apaļš (vidējais (x)); ym = apaļš (vidējais (y)); xx = max (1, xm-5): min (xm+5, izmērs (bw, 1)); yy = max (1, ym-5): min (ym+5, izmērs (bw, 2)); bwbw = nulles (izmērs (bw), 'uint8'); bwbw (xx, yy) = 255; turēt apakšplānā (1, 2, 2) apakšattēlu (justBlue + bwbw); beigas

4. solis: kods 2. daļa: kamēr cilpa

Šis kods virza Roomba, pamatojoties uz izsekošanas funkcijas objekta atrašanās vietu x un y. Tas liks Roomba uzmanīties no sienām un klintīm, vienlaikus meklējot zilu krāsu. Tas arī ņems Roomba ceļa x un y koordinātas un izveidos atbilstošu diagrammu ar izsekošanas attēlu. Ja trieciena sensors ir aktivizēts, tas pāriet uz e -pasta sadaļu

%Rover projekts

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Ievadi: roomba vērtība, kameras dati, trieciens, gaismas un sienas sensori %Mērķis: seko astronautam un izvairās no šķēršļiem. Ja tiek brīdināts, roomba nosūta e -pastu %, kurā sīki aprakstīta karte un vieta, kur tā atrodas atbilstoši sākuma pozīcijai. %Lietošana: vienkārši palaidiet programmu ar deklarētu roomba mainīgo, arī %ir kustīgs zaļš objekts %Rezultāti: parāda attēla izsekošanas attēlu, e -pasta karti un tekstu lietotājam %% Sekojot b = 0; %Inicializējošie mainīgie c = 0; x = 0; y = 0; teta = 0; kamēr c == 0 %Cilpa, lai tā noteiktu zilo objektu un šķēršļus t = r.timeGet; d = r.getDistance; [xval, yval] = izsekošanas zils (r); klints = getCliffSensors (r); %inicializējot struktūras sensora vērtībām gaisma = getLightBumpers (r); sasist = getBumpers (r); ja gaisma.leftCenter> = 10 || light.rightCenter> = 10 % Jūt, ja r.stop r.setLEDDigits ('palīdzība') tuvumā ir siena c = 1 %, savukārt b == 0 %, ja trieciens.preces == 1 || sasist.pa kreisi == 1 || bump.front == 1 % Jūt, ja tas ir kaut ko sasitis pēc tam, kad uztver sienu % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || sasist.pa kreisi == 1 || bump.front == 1 %Jūt, ja ir kaut ko sasitis, ja tā, tad nosūtīs e -pastu r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || klints.pa kreisi <= 100 || cliff.right <= 100 %sajūtas, ja pie klints atrodas klints. stop c = 1 r.setLEDDigits ('help') else %Iestata piedziņas ātrumus, lai tie atbilstu zilajam, ja yval = 100 r.setDriveVelocity (0,1) elseif yval 400 r.turnAngle (-5) gala beigas teta = teta + r.getAngle; x = d.*cosd (teta) + x; % x telpas koordināta y = d.*sind (teta).*d + y; Roomba apakšplāna % 1 koordināta (1, 2, 1) diagramma (x, y, 'bd') % uzzīmē ceļu un pievieno virsraksta nosaukumu ('Roomba Path'); beigas

5. darbība: kods 3. daļa: e -pasta sadaļa

Tas aizvedīs uzzīmēto ceļu un attēlu un nosūtīs to uz norādīto e -pasta adresi

(Šeit redzams ar e -pasta piemēru)

%% e -pasta sadaļa

ja b == 1 saveas (gcf, 'rovermap.png') %saglabā skaitli setpref ('Internets', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internets', 'E_mail', '[email protected]'); % pasta konts, kas jānosūta no setpref ('Internets', 'SMTP_Username', '[email protected]'); % sūtītāju lietotājvārds setpref ('Internets', 'SMTP_Password', 'gssegsse'); % Sūtītāju paroles rekvizīti = 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 ('parauga e -pasts', 'RoverBeacon', 'Astronauts ir pārstājis kustēties. Lai atgūtu, izpildiet pievienotajā failā sniegtos norādījumus.', 'rovermap.png') disp ('e -pasts nosūtīts') beigas

Ieteicams: