Talaan ng mga Nilalaman:

UTK EF 230 MarsRoomba Project Fall 2018: 5 Hakbang
UTK EF 230 MarsRoomba Project Fall 2018: 5 Hakbang

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 Hakbang

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 Hakbang
Video: По следам древней цивилизации? 🗿 Что, если мы ошиблись в своем прошлом? 2024, Nobyembre
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

Sa kasalukuyan, ginagamit ang Mars rovers upang mangolekta ng data sa ibabaw ng Mars sa pamamagitan ng iba't ibang mga pamamaraan, sa huling pagtatapos ng pag-alam nang higit pa tungkol sa potensyal ng planeta para sa buhay na microbial. Pangunahin na ginagamit ng mga Rovers ang mga tool sa pagkuha ng litrato at pagsusuri sa lupa para sa koleksyon ng data, ngunit nagsasama rin ang mga rovers ng mga instrumento sa nabigasyon, mga detector ng radiation, mga sensor ng atmospera, at isang laser para sa rock sample na pagsingaw. Ang layunin ng nakaplanong 2020 rover misyon ay halos pareho, ngunit may espesyal na gawain na "mangolekta ng mga sample ng lupa at bato at i-cache ang mga ito sa ibabaw para sa potensyal na pagbabalik sa Earth ng isang hinaharap na misyon," ayon sa NASA.

Gayunpaman, sa ilalim ng saligan na gagamitin ang mga rovers sa hinaharap para sa tulong ng tao, isinasaalang-alang ng aming koponan kung anong mga aspeto ng mga tao ang maaaring subaybayan ng rover. Napagpasyahan namin na dapat ang ilang emerhensiya ay walang malay na isang astronaut na may pagkabigo sa suporta at mga kagamitan sa buhay, ang aming rover ay maaaring magsilbing isang mobile mayday beacon sa pamamagitan ng pagmamasid na ang sinusundan na astronaut ay hindi kumikilos at nagpapasa ng isang mensahe ng pagkabalisa. Upang sundin ang tao at matukoy ang kawalang-kilos, ang rover ay kukuha ng mga input tulad ng kulay ng sapatos ng tao at ang kanilang galaw. Ang isa pang input na isasaalang-alang ay na maaalala nito ang landas nito upang makapag-relay ng isang signal ng pagkabalisa sa kaso ng emerhensiya. Natutugunan ng aming rover ang isang pangangailangan sa Mars na ang pagtatangka ng isang napakahalagang misyon sa naturang banyagang lupain ay nangangailangan ng maraming mga layer ng mga kabiguan, at kung ang isang astronaut ay hindi makakakuha ng kanilang sariling tulong dahil sa nababagay sa hindi gumana o walang malay, ang rover ay maaaring alertuhan ang iba.

Ang Instructable na ito ay dinisenyo upang tulungan ang mambabasa sa pagprograma ng kanyang Roomba upang matagumpay na sundin ang isang "astronaut" at upang magpadala ng isang signal ng pagkabalisa kung naaangkop.

Hakbang 1: Kailangan ng Mga Materyales

Mga Materyal na Kailangan
Mga Materyal na Kailangan

1) Computer / laptop na naa-access sa Internet

2) MATLAB_R2018a

3) Pag-download ng Roomba at Roomba

Hakbang 2: Pag-setup / Pag-download

Pag-setup / Pag-download
Pag-setup / Pag-download

Patakbuhin ang script na ito sa MATLAB upang mai-download ang software na kinakailangan upang ma-access ang Roomba (nai-save sa sarili nitong file sa folder ng proyekto)

Karagdagang Tulong:

% Programang Pag-install para sa EF 230 Roomba Project% Huling pag-update: Setyembre 13, 2017 (Naayos ang mga isyu sa seguridad na nauugnay sa https server at inalis ang babala sa pag-delete ng file kung may naganap na mga error) function roombaInstall clc; % listahan ng mga file upang mai-install ang mga file = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % lokasyon upang mai-install mula sa mga pagpipilian = weboptions ('CertificateFilename', ''); % sabihin ito upang huwag pansinin ang mga kinakailangan ng sertipiko server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba Install / Update'; % layunin ng pagpapakita at makakuha ng prompt na kumpirmasyon = {'Ang program na ito ay mag-download ng mga EF 230 Roomba file:' '' strjoin (mga file, '') '' 'sa folder na ito:' '' cd '' 'Nais mo bang magpatuloy? '}; beep; yn = questdlg (prompt,… dlgTitle, … 'Oo', 'Hindi', 'Oo');

kung ~ strcmp (yn, 'Oo'), bumalik; magtapos

% makakuha ng listahan ng mga file na umiiral na mga_files = file (cellfun (@exist, mga file)> 0); kung ~ isempty (existing_files)% siguraduhin na ok lang talaga na palitan ang mga ito prompt = {'Pinapalitan mo ang (mga) file na ito:' '' strjoin (existing_files, '') '' 'OK upang palitan?' }; beep; yn = questdlg (prompt,… dlgTitle, … 'Oo', 'Hindi', 'Oo'); kung ~ strcmp (yn, 'Oo'), bumalik; pagtatapos ng wakas

% i-download ang mga file cnt = 0; para sa i = 1: haba (mga file) f = mga file {i}; disp (['Pagda-download' f]); subukan ang url = [server f]; websave (f, url, mga pagpipilian); % nagdagdag ng mga pagpipilian upang maiwasan ang mga error sa seguridad cnt = cnt + 1; catch disp (['Error sa pag-download ng' f]); dummy = [f '.html']; kung mayroon (dummy, 'file') == 2 tanggalin (dummy) ang end end end

kung cnt == haba (mga file) msg = 'Matagumpay na Pag-install'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Error sa Pag-install - tingnan ang window ng utos para sa mga detalye'; waitfor (errordlg (msg, dlgTitle)); magtapos

magtapos% roombaInstall

Hakbang 3: Bahagi ng Code 1: Pag-andar ng Pagsubaybay

Code Part 1: Pag-andar ng Pagsubaybay
Code Part 1: Pag-andar ng Pagsubaybay

Ang pagpapaandar na ito ay tumatagal ng variable ng Roomba at ang larawan mula sa camera sa Roomba at hahanapin ang gitna xy mga coordinate ng na-track na object

I-save ang code na ito sa isa pang file sa parehong folder.

function [xm, ym] = trackingblue (r)% Inputs: variable ng roomba% Mga Output: x at y halaga ng gitna ng sumusunod na bagay% Layunin: hahanapin ang gitna ng isang asul na bagay na binigyan ng isang imahe% Paggamit [x halaga, y halaga] = trackingblue (variable ng roomba) img = r.getImage; % basahin ang camera off ng robot subplot (1, 2, 2) subimage (img); % ay nagpapakita ng imahe sa parehong window ng pamagat ng path ('Imahe ng Pagsubaybay') pula = img (:,:, 1); berde = img (:,:, 2); asul = img (:,:, 3); justBlue = asul - berde / 2 - pula / 2; bw = justBlue> 40; hawakan ang subplot (1, 2, 2) subimage (bw); [x, y] = hanapin (bw); kung ~ isempty (x) && ~ isempty (y) xm = bilog (mean (x)); ym = bilog (ibig sabihin (y)); xx = max (1, xm-5): min (xm + 5, laki (bw, 1)); yy = max (1, ym-5): min (ym + 5, laki (bw, 2)); bwbw = zero (laki (bw), 'uint8'); bwbw (xx, yy) = 255; hawakan ang subplot (1, 2, 2) subimage (justBlue + bwbw); magtapos

Hakbang 4: Bahagi ng Code 2: Habang Mag-loop

Hinahatid ng code na ito ang Roomba batay sa lokasyon ng x at y ng bagay mula sa pag-andar ng pagsubaybay. Gagawin nitong bantayan ang Roomba para sa mga dingding at bangin, habang naghahanap ng asul. Dadalhin din nito ang x at y na mga coordinate ng Roomba path at lilikha ng isang kaukulang plot na may imahe ng pagsubaybay. Kung ang sensor ng paga ay naisaaktibo ito ay lilipat sa seksyon ng email

% Ng Rover Project

% Jonah Zahn, Wade Presyo, Noah Sloan% jzahn2, wprice15, nsloan1% Mga input: halaga ng roomba, data ng camera, paga, ilaw at sensor ng dingding% Layunin: Sumusunod sa astronaut at iniiwasan ang mga hadlang. Kung nakaalerto, nagpapadala ang roomba ng isang email% na nagdedetalye ng isang mapa at kung saan ito ayon sa panimulang posisyon. % Paggamit: patakbuhin lamang ang programa na may pagdeklara ng variable ng roomba, mayroon ding% na gumagalaw na berdeng bagay% Mga Output: nagpapakita ng larawan ng pagsubaybay sa imahe, mga mapa ng email at teksto sa gumagamit %% Sumusunod sa Seksyon b = 0; % Inisyal ang mga variable c = 0; x = 0; y = 0; theta = 0; habang c == 0% Loop upang makita ito ng asul na object at mga hadlang na t = r.timeGet; d = r.getDistansya; [xval, yval] = trackingblue (r); bangin = getCliffSensors (r); % na nagpapasimula ng mga istraktura para sa sensor na nagkakahalaga ng ilaw = getLightBumpers (r); paga = getBumpers (r); kung light.leftCenter> = 10 || light.rightCenter> = 10% Senses kung mayroong dingding na malapit sa r.stop r.setLEDDigits ('help') c = 1% habang b == 0% kung bump. Right == 1 || bump.left == 1 || bump.front == 1% Senses kung may nabunggo na bagay pagkatapos nitong maramdaman ang isang pader% c = 1% b = 1% disp ('bump')% end% end elseif bump.right == 1 || bump.left == 1 || bump.front == 1% Senses kung may nabunggo na bagay, kung gayon, magpapadala ito ng isang email r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff. RightFront <= 100 || cliff.left <= 100 || cliff. Right <= 100% Senses kung mayroong isang bangin na malapit sa r.stop c = 1 r.setLEDDigits ('tulong') iba pa% Itinatakda ang mga bilis ng biyahe upang sundin ang asul kung yval = 100 r.setDriveVelocity (0.1) kung hindi man 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d. * cosd (theta) + x; % x coordinate ng roomba y = d. * sind (theta). * d + y; % y coordinate of the roomba subplot (1, 2, 1) plot (x, y, 'bd')% plot the path at nagdadagdag ng pamagat ng pamagat ('Roomba Path') na hawakan; magtapos

Hakbang 5: Bahagi ng Code 3: Seksyon ng Email

Dadalhin nito ang naka-plot na landas at imahe at ipadala ito sa isang tinukoy na email address

(Ipinapakita rito na may halimbawang email)

%% na Seksyon ng Email

kung b == 1 saveas (gcf, 'rovermap.png')% nai-save ang figure setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mail account upang ipadala mula sa setpref ('Internet', 'SMTP_Username', '[email protected]'); % mga nagpadala username setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Mga nagpadala ng password props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'totoo'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('halimbawang email', 'RoverBeacon', 'Ang astronaut ay tumigil sa paggalaw. Para sa paggaling, sundin ang mga direksyon sa naka-attach na file.', 'rovermap.png') disp ('ipinadala ang email') na pagtatapos

Inirerekumendang: