Բովանդակություն:

UTK EF 230 MarsRoomba Project Fall 2018: 5 քայլ
UTK EF 230 MarsRoomba Project Fall 2018: 5 քայլ

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 քայլ

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 քայլ
Video: The Light Gate Welcomes Dr. Irena McCammon Scott PhD., July 10th, 2023 2024, Հուլիսի
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

Ներկայումս մարսագնացները օգտագործվում են Մարսի մակերևույթի վերաբերյալ տարբեր եղանակներով տվյալներ հավաքելու համար ՝ վերջնականապես վերջնականապես իմանալով մոլորակի մանրէաբանական կյանքի ներուժի մասին: Թռչող սարքերը տվյալների հավաքագրման համար հիմնականում օգտագործում են լուսանկարչության և հողի վերլուծության գործիքներ, սակայն արկածախնդիր սարքերը ներառում են նաև նավիգացիոն գործիքներ, ճառագայթման դետեկտորներ, մթնոլորտային տվիչներ և լազեր ՝ ժայռերի նմուշի գոլորշիացման համար: ՆԱՍԱ -ի տվյալներով ՝ 2020 թ. Մոլորակագնացների առաքելության նպատակը հիմնականում նույնն է, բայց հատուկ առաջադրանքն է ՝ «հողի և ժայռի նմուշներ հավաքելը և դրանք մակերևույթում պահելը ՝ ապագա առաքելությամբ Երկիր հնարավոր վերադարձի համար»:

Այնուամենայնիվ, այն ենթադրությամբ, որ ապագա թռչող սարքերը կօգտագործվեն մարդկանց օգնության համար, մեր թիմը հաշվի առավ, թե մարդկանց որ կողմերը կարող է վերահսկել արբանյակը: Մենք եկանք այն եզրակացության, որ եթե ինչ -որ արտակարգ իրավիճակ տիեզերագնացին անգիտակից վիճակում դնի կյանքի և սարքավորումների խափանումների պատճառով, մեր արբանյակը կարող է ծառայել որպես շարժական մայիսյան փարոս ՝ նկատելով, որ տիեզերագնացն անշարժ է և փոխանցում է անհանգստության ուղերձ: Մարդուն հետևելու և անշարժությունը որոշելու համար, արբանյակը պետք է օգտագործի այնպիսի տվյալներ, ինչպիսիք են մարդու կոշիկի գույնը և դրանց շարժումները: Մեկ այլ ներդրում, որը պետք է հաշվի առնել, այն է, որ այն պետք է հիշի իր ուղին, որպեսզի արտակարգ իրավիճակների դեպքում փոխանցի անհանգստության ազդանշանը: Մեր տիեզերագնացը բավարարում է Մարսի կարիքն այն առումով, որ նման թանկարժեք առաքելություն կատարելը նման օտարերկրյա տեղանքում պահանջում է խափանման սարքերի բազմաթիվ շերտեր, և եթե տիեզերագնացը չկարողանա ինքնուրույն օգնություն ստանալ կոստյումի անսարքության կամ անգիտակից վիճակի պատճառով, արբանյակը կարող է զգուշացնել ուրիշներին:.

Այս հրահանգը նախատեսված է օգնելու ընթերցողին ծրագրել իր Roomba- ին հաջողությամբ հետևել «տիեզերագնացին» և անհրաժեշտության դեպքում ազդանշանի ուղարկել:

Քայլ 1: Անհրաժեշտ նյութեր

Անհրաժեշտ նյութեր
Անհրաժեշտ նյութեր

1) ինտերնետ հասանելի համակարգիչ/նոութբուք

2) MATLAB_R2018 ա

3) Roomba և Roomba ներբեռնում

Քայլ 2: Կարգավորում/ներբեռնում

Կարգավորում/Ներբեռնում
Կարգավորում/Ներբեռնում

Գործարկեք այս սցենարը MATLAB- ում, որպեսզի ներբեռնեք Roomba մուտք գործելու համար անհրաժեշտ ծրագրակազմը (որը պահվում է նախագծի թղթապանակի իր սեփական ֆայլում):

Լրացուցիչ օգնություն ՝

% Տեղադրման ծրագիր EF 230 Roomba Project- ի համար Վերջին թարմացումը `սեպտեմբերի 13, 2017 (Անվտանգության շտկված խնդիրներ ՝ կապված https սերվերի հետ և հեռացված ֆայլի ջնջման նախազգուշացումը, եթե առաջացել են սխալներ) roombaInstall clc; % ֆայլերի ցանկ ֆայլեր տեղադրելու համար = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % location to install from options = weboptions ('CertificateFilename', ''); % ասեք նրան, որ անտեսի սերտիֆիկատի պահանջները սերվեր = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba- ի տեղադրում/թարմացում'; % ցուցադրման նպատակը և ստացեք հաստատման հուշում = {'Այս ծրագիրը կներբեռնի այս EF 230 Roomba ֆայլերը.' '' strjoin (ֆայլեր, '') '' 'այս պանակին.' '' ' '}; ազդանշան; yn = questdlg (հուշում,… dlgTitle,… 'Այո', 'Ոչ', 'Այո');

եթե ~ strcmp (yn, 'Yes'), վերադառնալ; վերջ

% ստանալ գոյություն ունեցող ֆայլերի ցանկ = ֆայլեր (cellfun (@exist, files)> 0); if ~ isempty (գոյություն ունեցող_ֆայլեր) % համոզվեք, որ իսկապես լավ է դրանք փոխարինել հուշել = {'Դուք փոխարինում եք այս ֆայլերը (ներ):' '' strjoin (գոյություն ունեցող_ֆայլեր, '') '' 'Լավ է փոխարինել?' }; ազդանշան; yn = questdlg (հուշում,… dlgTitle,… 'Այո', 'Ոչ', 'Այո'); եթե ~ strcmp (yn, 'Yes'), վերադառնալ; վերջ վերջ

% բեռնել ֆայլերը cnt = 0; համար i = 1: երկարություն (ֆայլեր) f = ֆայլեր {i}; disp (['' Ներբեռնում 'f]); փորձեք url = [սերվեր f]; websave (f, url, ընտրանքներ); % ավելացված տարբերակներ `անվտանգության սխալներից խուսափելու համար cnt = cnt + 1; catch disp (['Ներբեռնման սխալ' f]); կեղծ = [f '.html']; եթե գոյություն ունի (կեղծ, 'ֆայլ') == 2 ջնջել (կեղծ) վերջի վերջը

եթե cnt == երկարությունը (ֆայլեր) msg = 'Տեղադրումը հաջողված է'; սպասել (msgbox (msg, dlgTitle)); else msg = 'Տեղադրման սխալ. մանրամասների համար տե՛ս հրամանի պատուհանը'; սպասել (errordlg (msg, dlgTitle)); վերջ

վերջ %roombaInstall

Քայլ 3. Կոդ Մաս 1. Հետևման գործառույթ

Կոդ 1. մաս. Հետևման գործառույթ
Կոդ 1. մաս. Հետևման գործառույթ

Այս գործառույթը վերցնում է Roomba փոփոխականը և նկարը Roomba- ի տեսախցիկից և գտնում է հետագծվող օբյեկտի կենտրոնական xy կոորդինատները:

Պահեք այս կոդը նույն պանակի մեկ այլ ֆայլում:

գործառույթ [xm, ym] = trackingblue (r) %Մուտքեր. արժեք] = trackingblue (roomba փոփոխական) img = r.getImage; % կարդում է ռոբոտի ենթածրագրի (1, 2, 2) ենթապատկերի տեսախցիկը (img); %-ը ցույց է տալիս պատկերը նույն պատուհանում, որտեղ նշված է ուղու վերնագիրը ('Հետևող պատկերը') red = img (:,,: 1); կանաչ = img (:,:, 2); կապույտ = img (:,:, 3); justBlue = կապույտ - կանաչ/2 - կարմիր/2; bw = պարզապես Կապույտ> 40; պահել ենթահողում (1, 2, 2) ենթապատկերում (bw); [x, y] = գտնել (bw); եթե ~ դատարկ (x) && ~ դատարկ (y) xm = կլոր (միջին (x)); ym = կլոր (միջին (y)); xx = առավելագույն (1, xm-5) ՝ րոպե (xm+5, չափ (bw, 1)); yy = առավելագույնը (1, ym-5): min (ym+5, չափը (bw, 2)); bwbw = զրո (չափ (bw), 'uint8'); bwbw (xx, yy) = 255; պահել ենթահողում (1, 2, 2) ենթապատկերում (justBlue + bwbw); վերջ

Քայլ 4: Կոդ Մաս 2. Կապ

Այս ծածկագիրը Roomba- ն քշում է ՝ հետևելով գործառույթի օբյեկտի x և y տեղադրությանը: Սա կստիպի Roomba- ին զգույշ լինել պատերից և ժայռերից `միաժամանակ փնտրելով կապույտ: Սա նաև կվերցնի Roomba ուղու x և y կոորդինատները և կստեղծի համապատասխան գծապատկեր հետևման պատկերով: Եթե հարվածի սենսորը միացված է, այն կտեղափոխվի էլ

Rover նախագիծ

Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Մուտքեր. Սենյակի արժեք, տեսախցիկի տվյալներ, հարվածի, լույսի և պատի տվիչներ %Նպատակը. Եթե զգուշացնեն, roomba- ն էլ. Նամակ է ուղարկում, որը մանրամասնում է քարտեզը և գտնվելու վայրը `ըստ իր սկզբնական դիրքի: %Օգտագործում. Պարզապես գործարկեք ծրագիրը ՝ roomba փոփոխական հայտարարելով, նաև %ունեն շարժվող կանաչ օբյեկտ %Արդյունքներ. Ցույց է տալիս պատկերին հետևող նկարը, էլ. %Փոփոխականների սկզբնականացում c = 0; x = 0; y = 0; թետա = 0; իսկ c == 0 %Loop ՝ այն կապույտ առարկան և խոչընդոտները հայտնաբերելու համար t = r.timeGet; d = r.getDistance; [xval, yval] = հետևման կապույտ (r); ժայռ = getCliffSensors (r); %սենսորային արժեքների կառուցվածքների նախաստորագրում լույս = getLightBumpers (r); bump = getBumpers (r); եթե light.leftCenter> = 10 || light.rightCenter> = 10 % ensesգում է, եթե կա պատ r. կանգառի մոտ r.setLEDDigits ('օգնություն') c = 1 %, իսկ b == 0 %, եթե bump.right == 1 || bump.left == 1 || bump.front == 1 % ensesգում է, եթե ինչ -որ բան բախվել է պատը զգալուց հետո % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %ensesգում է, եթե ինչ -որ բան բախվել է, եթե այո, այն էլ.փոստ կուղարկի r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightF Front <= 100 || ժայռ. ձախ <= 100 || cliff.right <= 100 %ensesգում է, եթե կա ժայռ r. մոտ 400 r.turnAngle (-5) վերջի վերջ theta = theta + r.getAngle; x = d.*cosd (theta) + x; սենյակի % x կոորդինատ y = d.*sind (theta).*d + y; roomba ենթածրագրի (1, 2, 1) սյուժեի (x, y, 'bd') % y կոորդինատը գծում է ուղին և ավելացնում վերնագրի վերնագիրը ('Roomba Path') պահելը; վերջ

Քայլ 5. Կոդ 3. Մաս 3. Էլեկտրոնային բաժին

Սա կտանի գծագրված ուղին և պատկերը և կուղարկի այն նշված էլ. Հասցեին:

(Ownուցադրված է այստեղ էլ.փոստի օրինակով)

%% Էլեկտրոնային բաժին

եթե b == 1 saveas (gcf, 'rovermap.png') %պահում է գործիքի setpref- ը ('ինտերնետ', 'SMTP_Server', 'smtp.gmail.com'); setpref («Ինտերնետ», «E_mail», «[email protected]»); % փոստի հաշիվ ՝ setpref- ից ուղարկելու համար («Ինտերնետ», «SMTP_Username», «[email protected]»); % ուղարկողների օգտվողի անուն setpref ('ինտերնետ', 'SMTP_Password', 'gssegsse'); % Ուղարկողների գաղտնաբառեր = 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 («օրինակ էլ.», «RoverBeacon», «Տիեզերագնացը դադարել է շարժվել: Վերականգնման համար հետևեք կից ֆայլում տրված ցուցումներին»: «rovermap.png») disp («ուղարկված էլ.

Խորհուրդ ենք տալիս: