ዝርዝር ሁኔታ:

UTK EF 230 MarsRoomba Project Fall 2018: 5 ደረጃዎች
UTK EF 230 MarsRoomba Project Fall 2018: 5 ደረጃዎች

ቪዲዮ: UTK EF 230 MarsRoomba Project Fall 2018: 5 ደረጃዎች

ቪዲዮ: UTK EF 230 MarsRoomba Project Fall 2018: 5 ደረጃዎች
ቪዲዮ: UTK - EF 230 Autonomous Vehicle Project 2024, ህዳር
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

በአሁኑ ጊዜ የማርስ ሮቨሮች ስለ ፕላኔት ስለ ተህዋሲያን ሕይወት የበለጠ ለማወቅ እስከ መጨረሻው ድረስ በተለያዩ ዘዴዎች በማርስ ወለል ላይ መረጃን ለመሰብሰብ ያገለግላሉ። ሮቨርስ በዋናነት ለመረጃ አሰባሰብ የፎቶግራፍ እና የአፈር ትንተና መሣሪያዎችን ይጠቀማል ፣ ግን ሮቨሮች እንዲሁ የአሰሳ መሳሪያዎችን ፣ የጨረር መመርመሪያዎችን ፣ የከባቢ አየር ዳሳሾችን እና ለሮክ ናሙና የእንፋሎት ማስወገጃ ሌዘርን ያካትታሉ። የታቀደው የ 2020 ሮቨር ተልእኮ ግብ በአብዛኛው ተመሳሳይ ነው ፣ ነገር ግን በልዩ ተልእኮ “የአፈር እና የድንጋይ ናሙናዎችን በመሰብሰብ ለወደፊቱ ተልእኮ ወደ ምድር መመለስ እንዲችሉ በላዩ ላይ ማከማቸት” ናሳ እንደገለጸው።

ሆኖም ፣ የወደፊቱ ሮቨሮች ለሰብአዊ ዕርዳታ ጥቅም ላይ ይውላሉ በሚለው መሠረት ቡድናችን ሮቨር ምን ዓይነት የሰዎች ገጽታዎች ሊቆጣጠሩ እንደሚችሉ አስቧል። አንዳንድ የአስቸኳይ ጊዜ ጠፈርተኛ የህይወት ድጋፍን እና መሣሪያን ባለማስተዋሉ ህሊናውን ቢያደርግ ፣ ሮቨርዋ የተከተለው ጠፈርተኛ የማይንቀሳቀስ እና የመረበሽ መልእክት የሚያስተላልፍ መሆኑን በመመልከት የሞባይል ሜይዲያ መብራት ሆኖ ሊያገለግል ይችላል ብለን መደምደሚያ ላይ ደርሰናል። ሰውን ለመከተል እና የማይነቃነቅነትን ለመወሰን ሮቦሩ እንደ የሰው ጫማ ቀለም እና እንቅስቃሴቸው ያሉ ግብዓቶችን ይወስዳል። ሊታሰብበት የሚገባ ሌላ ግብዓት የአስቸኳይ ጊዜ ሁኔታ ሲከሰት የጭንቀት ምልክትን ለማስተላለፍ መንገዱን ማስታወስ አለበት። በእንደዚህ ዓይነት የውጭ መሬት ላይ እንዲህ ዓይነቱን ውድ ተልእኮ መሞከር ብዙ የውድቀት-ደህንነት ደረጃዎችን ስለሚያስፈልገው ሮቨርዎቻችን በማረሻ ላይ ፍላጎትን ያሟላል ፣ እና የጠፈር ተመራማሪ በስራ ብልሹነት ወይም በንቃተ ህሊና ምክንያት የራሳቸውን እርዳታ ማግኘት ካልቻለ ሮቨር ሌሎችን ማስጠንቀቅ ይችላል።.

ይህ አስተማሪ አንባቢው ‹ሮማንባ› ን ‹ጠፈርተኛ› በተሳካ ሁኔታ እንዲከተል እና የሚመለከት ከሆነ የአስጨናቂ ምልክትን እንዲልክ ለመርዳት የተነደፈ ነው።

ደረጃ 1: የሚያስፈልጉ ቁሳቁሶች

የሚያስፈልጉ ቁሳቁሶች
የሚያስፈልጉ ቁሳቁሶች

1) በይነመረብ ተደራሽ ኮምፒተር/ላፕቶፕ

2) MATLAB_R2018a

3) Roomba እና Roomba ማውረድ

ደረጃ 2 ማዋቀር/ማውረድ

ማዋቀር/ማውረድ
ማዋቀር/ማውረድ

Roomba ን ለመድረስ የሚያስፈልገውን ሶፍትዌር ለማውረድ ይህንን ስክሪፕት በ MATLAB ውስጥ ያሂዱ (በፕሮጀክቱ አቃፊ ውስጥ በራሱ ፋይል ውስጥ የተቀመጠ)።

ተጨማሪ እገዛ

% የመጫኛ ፕሮግራም ለኤፍ 230 Roomba ፕሮጀክት% የመጨረሻው ዝመና - መስከረም 13 ፣ 2017 (ከ https አገልጋይ ጋር የተዛመዱ ቋሚ ችግሮች እና ከተከሰቱ ፋይል መሰረዝ ማስጠንቀቂያ ተወግዷል) ተግባር roombaInstall clc; ፋይሎችን ለመጫን % ፋይሎች ዝርዝር = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; ከአማራጮች ለመጫን % አካባቢ = weboptions ('CertificateFilename', ''); % የእውቅና ማረጋገጫ መስፈርቶችን አገልጋይ ችላ እንዲለው ይንገሩት = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba ጫን/አዘምን'; % የማሳያ ዓላማ እና የማረጋገጫ ጥያቄ ያግኙ = {'' ይህ ፕሮግራም እነዚህን EF 230 Roomba ፋይሎች '' '' strjoin (files, '') '' '' ወደዚህ አቃፊ ያውርዳል ፦ '' '' cd '' '' መቀጠል ይፈልጋሉ? '}; ቢፕ; yn = questdlg (ጥያቄ ፣… dlgTitle ፣… 'አዎ' ፣ 'አይ' ፣ 'አዎ') ፤

~ strcmp (yn ፣ ‘አዎ’) ከሆነ ፣ ይመለሱ ፤ አበቃ

ነባር_ ፋይሎች = ፋይሎች (የሴልfun (@exist ፣ ፋይሎች)> 0) ያሉ የፋይሎች ዝርዝር % ያግኙ ፤ ~ isempty (ነባር_ፋዮች) % ወዲያውኑ እነሱን ለመተካት በእርግጥ ትክክል መሆኑን ያረጋግጡ = {'እነዚህን ፋይሎች (ዎች) እየተተኩ ነው' '' 'strjoin (ነባር_ፋይሎች ፣' ')' '' 'ለመተካት እሺ?' ' }; ቢፕ; yn = questdlg (ጥያቄ ፣… dlgTitle ፣… 'አዎ' ፣ 'አይ' ፣ 'አዎ') ፤ ~ strcmp (yn ፣ ‘አዎ’) ከሆነ ፣ ይመለሱ ፤ መጨረሻ መጨረሻ

% ፋይሎቹን ያውርዱ cnt = 0; ለ i = 1: ርዝመት (ፋይሎች) f = ፋይሎች {i}; disp (['ማውረድ' ረ]); url = [አገልጋይ ረ] ን ይሞክሩ; ድር አስቀምጥ (ረ ፣ ዩአርኤል ፣ አማራጮች); የደህንነት ስህተቶችን ለማስወገድ % የታከሉ አማራጮች cnt = cnt + 1; መያዝ ዲስክ (['ማውረድ ስህተት' ረ]); ዱሚ = [f '.html']; ካለ (ዱሚ ፣ ‹ፋይል›) == 2 ሰርዝ (ዱሚ) የመጨረሻ መጨረሻ መጨረሻ

cnt == ርዝመት (ፋይሎች) msg = 'መጫኑ ተሳክቷል'; ተጠባባቂ (msgbox (msg ፣ dlgTitle)); ሌላ msg = 'የመጫን ስህተት - ለዝርዝሮች የትእዛዝ መስኮቱን ይመልከቱ'; ተጠባባቂ (errordlg (msg ፣ dlgTitle)); አበቃ

ጨርስ %roomba ጫን

ደረጃ 3: ኮድ ክፍል 1 - የመከታተያ ተግባር

ኮድ ክፍል 1 - የመከታተያ ተግባር
ኮድ ክፍል 1 - የመከታተያ ተግባር

ይህ ተግባር የ Roomba ተለዋዋጭውን እና ስዕሉን በካሜራው ላይ በካሜባው ላይ ይወስዳል እና ክትትል የተደረገበትን ነገር ማዕከላዊ xy መጋጠሚያዎችን ያገኛል።

በተመሳሳዩ አቃፊ ውስጥ ይህን ኮድ በሌላ ፋይል ውስጥ ያስቀምጡ።

ተግባር [xm ፣ ym] = የመከታተያ ሰማያዊ (r) %ግብዓቶች - የክፍልባ ተለዋዋጭ %ውጤቶች - የሚከተለው ነገር ማዕከላዊ እና የ x እሴት y እሴት] = የመከታተያ (ሰማያዊ ክፍል) ተለዋዋጭ img = r.getImage; % ካሜራውን ከሮቦት ንዑስ ክፍል (1 ፣ 2 ፣ 2) ንዑስ ምስል (img) ላይ ያነባል ፤ %ልክ እንደ የመንገድ ርዕስ ('የመከታተያ ምስል') በተመሳሳይ መስኮት ውስጥ ምስልን ያሳያል ቀይ = img (:,:, 1); አረንጓዴ = img (:,:, 2); ሰማያዊ = img (:,:, 3); justBlue = ሰማያዊ - አረንጓዴ/2 - ቀይ/2; bw = justBlue> 40; በንዑስ (1 ፣ 2 ፣ 2) ንዑስ ምስል (bw) ላይ ይያዙ። [x, y] = አግኝ (bw); ~ isempty (x) && ~ isempty (y) xm = round (አማካይ (x)); ym = ክብ (አማካይ (y)); xx = ከፍተኛ (1 ፣ xm-5) ደቂቃ (xm+5 ፣ መጠን (bw ፣ 1)); yy = max (1 ፣ ym-5): ደቂቃ (ym+5 ፣ መጠን (bw ፣ 2)); bwbw = ዜሮዎች (መጠን (bw) ፣ 'uint8'); bwbw (xx ፣ yy) = 255; በንዑስ (1 ፣ 2 ፣ 2) ንዑስ -ምስል (justBlue + bwbw) ላይ ይያዙ; አበቃ

ደረጃ 4: ኮድ ክፍል 2 - Loop እያለ

ይህ ኮድ የእቃውን በ x እና y ቦታ ላይ በመመርኮዝ Roomba ን ከክትትል ተግባሩ ላይ ያነዳዋል። ይህ ሰማያዊውን በመፈለግ Roomba ግድግዳዎችን እና ቋጥኞችን እንዲጠብቅ ያደርገዋል። ይህ እንዲሁም የ Roomba መንገድ የ x እና y መጋጠሚያዎችን ይወስዳል እና ከመከታተያው ምስል ጋር ተጓዳኝ ሴራ ይፈጥራል። የጎደለው አነፍናፊ ገቢር ከሆነ ወደ የኢሜል ክፍል ይሄዳል።

%ሮቨር ፕሮጀክት

%ዮናስ ዛህን ፣ ዋድ ዋጋ ፣ ኖህ ስሎአን %jzahn2 ፣ wprice15 ፣ nsloan1 %ግብዓቶች - የክፍል ዋጋ ፣ የካሜራ መረጃ ፣ ጉድ ፣ ብርሃን እና የግድግዳ ዳሳሾች %ዓላማ - ጠፈርተኛን ይከተላል እና እንቅፋቶችን ያስወግዳል። ማስጠንቀቂያ ከተሰጠ ፣ ክፍሉባ አንድ ካርታ እና በመነሻ ቦታው መሠረት የሚገልጽበትን ኢሜይል %ይልካል። %አጠቃቀም - የክፍልባን ተለዋዋጭ በማወጅ ፕሮግራሙን ብቻ ያሂዱ ፣ እንዲሁም %የሚንቀሳቀስ አረንጓዴ ነገር አላቸው %ውጤቶች - የምስል መከታተያ ሥዕል ፣ የኢሜይሎች ካርታ እና ጽሑፍ ለተጠቃሚ %% የሚከተለው ክፍል ለ = 0 ፤ %የመነሻ ተለዋዋጮች c = 0; x = 0; y = 0; ቴታ = 0; c == 0 %Loop ሰማያዊውን ነገር እና እንቅፋቶችን እንዲለይ ለማድረግ t = r.timeGet; d = r.getDistance; [xval, yval] = የመከታተያ ነጥብ (r); ገደል = getCliffSensors (r); %ለአነፍናፊ እሴቶች ብርሃን = getLightBumpers (r) መዋቅሮችን ማስጀመር; ጉብታ = getBumpers (r); if.leftCenter> = 10 || light.rightCenter> = 10 % ስሜት r.stop r.setLEDDigits ('help') c = 1 % ሲኖር b == 0 % bump.right == 1 || bump.left == 1 || bump.front == 1 % ግድግዳ ከተሰማው በኋላ የሆነ ነገር እንደወደቀ ይሰማዋል % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %አንድ ነገር ከደበደበ ይሰማዋል ፣ ከሆነ ኢሜል ይልካል r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || ገደል. ቀኝ ፊት <= 100 || ገደል.ግራ <= 100 || cliff.right <= 100 %የስሜት ሕዋሶች r.stop c = 1 r.setLEDDigits ('እገዛ') አቅራቢያ ካለ ስሜት <yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) መጨረሻውን ታታ = theta + r.getAngle; x = መ.*cosd (theta) + x; የክፍሉባ y = መ.*sind (theta)*d + y; የክፍልባ ንዑስ ክፍል (1 ፣ 2 ፣ 1) ሴራ (x ፣ y ፣ 'bd') % % አስተባባሪ መንገዱን ያሴራል እና የርዕስ ርዕስ ('Roomba Path') ያዝ። አበቃ

ደረጃ 5 ኮድ ክፍል 3 የኢሜል ክፍል

ይህ የታቀደውን መንገድ እና ምስል ወስዶ ወደ አንድ የተወሰነ የኢሜል አድራሻ ይልካል።

(በምሳሌ ኢሜል እዚህ ይታያል)

%% የኢሜል ክፍል

b == 1 saveas (gcf ፣ 'rovermap.png') %የስዕሉን setpref ('Internet' ፣ 'SMTP_Server' ፣ 'smtp.gmail.com') ካስቀመጠ ፤ setpref ('በይነመረብ' ፣ 'ኢ_ሜል' ፣ '[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 ('ምሳሌ ኢሜል' ፣ 'ሮቨርቤኮን' ፣ 'የጠፈር ተመራማሪው መንቀሳቀሱን አቁሟል። ለማገገም ፣ በተያያዘው ፋይል ውስጥ ያሉትን መመሪያዎች ይከተሉ።' ፣ 'rovermap.png') disp ('ኢሜል ተልኳል') መጨረሻ

የሚመከር: