Мазмұны:

UTK EF 230 MarsRoomba жобасы 2018 жылдың күзі: 5 қадам
UTK EF 230 MarsRoomba жобасы 2018 жылдың күзі: 5 қадам

Бейне: UTK EF 230 MarsRoomba жобасы 2018 жылдың күзі: 5 қадам

Бейне: UTK EF 230 MarsRoomba жобасы 2018 жылдың күзі: 5 қадам
Бейне: UTK - EF 230 Autonomous Vehicle Project 2024, Қараша
Anonim
UTK EF 230 MarsRoomba жобасы 2018 ж
UTK EF 230 MarsRoomba жобасы 2018 ж

Қазіргі уақытта Марс роверлері әр түрлі әдістермен Марстың бетіндегі мәліметтерді жинау үшін пайдаланылады, бұл планетаның микроорганизмдердің тіршілігі туралы көбірек білуге мүмкіндік береді. Роверлер негізінен фотосурет пен топырақ талдау құралдарын пайдаланады, бірақ роверлер навигациялық құралдарды, радиациялық детекторларды, атмосфералық датчиктерді және тау жыныстарының булануына арналған лазерді қамтиды. НАСА -ның мәлімдеуінше, 2020 жылға жоспарланған ровер миссиясының мақсаты негізінен бірдей, бірақ арнайы тапсырма бойынша «топырақ пен тау жыныстарының үлгілерін жинау және оларды болашақ миссиямен Жерге ықтимал қайтару үшін жер бетінде кэште сақтау».

Алайда, болашақ роверлер адамдарға көмек ретінде пайдаланылады деген болжаммен біздің команда ровер адамның қандай аспектілерін бақылай алатынын қарастырды. Біз қандай да бір төтенше жағдайда ғарышкерді өмірлік қамтамасыз ету мен құрал -жабдықтармен ес -түссіз қалдырса, біздің ровер ғарышкердің қозғалмайтынын байқап, апат туралы хабар жібере отырып, жылжымалы маяк қызметін атқара алады деген қорытындыға келдік. Адамды қадағалап, қозғалмайтындығын анықтау үшін ровер адамның аяқ киімінің түсі мен олардың қозғалысы сияқты ақпаратты алады. Тағы бір ескерту керек, ол төтенше жағдайда апат сигналын беру үшін өз жолын есте сақтауы керек. Біздің ровер Марстағы қажеттілікті қанағаттандырады, өйткені мұндай шетелде осындай қымбат миссияны жасау бірнеше рет қауіпсіз сейфті қажет етеді, ал егер ғарышкер костюмнің дұрыс жұмыс істемеуіне немесе есінен тануына байланысты өз көмегін ала алмаса, ровер басқаларға ескерту жасай алады..

Бұл нұсқаулық оқырманға Roomba бағдарламасын «ғарышкерді» сәтті орындауға және қажет болған жағдайда апат сигналын жіберуге көмектесуге арналған.

1 -қадам: Қажетті материалдар

Қажетті материалдар
Қажетті материалдар

1) Интернетке қол жетімді компьютер/ноутбук

2) MATLAB_R2018a

3) Roomba және Roomba жүктеу

2 -қадам: орнату/жүктеу

Орнату/Жүктеу
Орнату/Жүктеу

Бұл сценарийді Roomba -ға кіруге қажетті бағдарламалық қамтамасыз етуді жүктеу үшін MATLAB -те іске қосыңыз (жоба қалтасында өз файлында сақталған)

Қосымша анықтама:

% EF 230 Roomba жобасы үшін орнату бағдарламасы% Соңғы жаңарту: 2017 жылдың 13 қыркүйегі (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 орнату/жаңарту'; % display мақсаты және растау шақыруын алу = {'Бұл бағдарлама EF 230 Roomba файлдарын жүктейді:' '' strjoin (файлдар, '') '' 'мына қалтаға:' '' cd '' 'Жалғастырғыңыз келе ме? '}; дыбыстық сигнал; yn = questdlg (шақыру,… dlgTitle,… 'Иә', 'Жоқ', 'Иә');

if ~ strcmp (yn, 'Yes'), return; Соңы

% бұрыннан бар файлдардың тізімін алады_files = файлдар (cellfun (@exist, files)> 0); if ~ isempty (existing_files) % оларды ауыстырудың дұрыс екеніне көз жеткізіңіз шақыру = {'Сіз бұл файлдарды ауыстырасыз:' '' strjoin (existing_files, '') '' 'Ауыстыруға болады ма?' }; дыбыстық сигнал; yn = questdlg (шақыру,… dlgTitle,… 'Иә', 'Жоқ', 'Иә'); if ~ strcmp (yn, 'Yes'), return; соңы соңы

% файлдарды жүктеу cnt = 0; i = 1 үшін: ұзындық (файлдар) f = файлдар {i}; disp (['Жүктеу' f]); url = [сервер f] көріңіз; websave (f, url, опциялар); қауіпсіздік қателерін болдырмау үшін % опциялар қосылды cnt = cnt + 1; catch disp (['Жүктеу қатесі' f]); манекен = [f '.html']; егер бар болса (муляж, 'файл') == 2 жою (манекен) соңы соңы

if cnt == length (files) msg = 'Орнату сәтті болды'; күту (msgbox (msg, dlgTitle)); else msg = 'Орнату қателігі - мәліметтерді командалық терезеден қараңыз'; күту (errordlg (msg, dlgTitle)); Соңы

end %roombaInstall

3 -қадам: Код 1 -бөлім: Бақылау функциясы

Код 1 -бөлім: Бақылау функциясы
Код 1 -бөлім: Бақылау функциясы

Бұл функция Roomba айнымалысы мен Roomba камерасындағы суретті алады және бақыланатын объектінің орталық xy координаттарын табады

Бұл кодты сол қалтадағы басқа файлға сақтаңыз.

функция [xm, ym] = trackingblue (r) %Кірістер: roomba айнымалы %Шығу: келесі объектінің центрінің x және y мәні %Мақсаты: суреттің көмегімен көк нысанның ортасын табады %Пайдалану [x мәні, у мән] = trackingblue (roomba айнымалысы) img = r.getImage; % камераны роботтың қосалқы бөлігінен (1, 2, 2) кіші суреттен оқиды (img); %кескінді жолдың атауы ('Tracking Image') сияқты терезеде суретті көрсетеді red = img (:,,:, 1); жасыл = img (:,,:, 2); көк = img (:,,:, 3); justBlue = көк - жасыл/2 - қызыл/2; bw = justBlue> 40; (1, 2, 2) қосалқы суретті ұстаңыз (bw); [x, y] = табу (bw); if ~ isempty (x) && ~ isempty (y) xm = дөңгелек (орташа (x)); ym = дөңгелек (орташа (y)); xx = max (1, xm-5): min (xm+5, өлшемі (bw, 1)); yy = max (1, ym-5): min (ym+5, өлшемі (bw, 2)); bwbw = нөлдер (өлшемі (bw), 'uint8'); bwbw (xx, yy) = 255; (1, 2, 2) қосалқы суретті ұстау (justBlue + bwbw); Соңы

4 -қадам: Код 2 -бөлім: Цикл кезінде

Бұл код объектінің x және y орналасуына негізделген Roomba -ны бақылау функциясынан шығарады. Бұл Roomba көгілдір түстерді іздей отырып, қабырғалар мен жартастарға назар аударады. Бұл сонымен қатар Roomba жолының x және y координаттарын алады және бақылау кескіні бар сәйкес сюжет жасайды. Егер соққы сенсоры іске қосылса, ол электрондық пошта бөліміне өтеді

%Rover жобасы

%Жүніс Зан, Уэйд Прайс, Нух Слоан %jzahn2, wprice15, nsloan1 %Кірістер: бөлме температурасы, камера деректері, соққы, жарық пен қабырға сенсорлары %Мақсаты: Ғарышкерді қадағалайды және кедергілерден аулақ болады. Егер ескерту болса, Roomba картаны және оның бастапқы орнына сәйкес орналасқан %электрондық поштаны жібереді. %Қолданылуы: жай ғана roomba айнымалысын жариялай отырып, бағдарламаны іске қосыңыз, сонымен қатар %жылжымалы жасыл объекті бар %Шығу: пайдаланушыға кескінді бақылау суретін, электрондық пошта картасын және мәтінді көрсетеді %% Келесі бөлімнен кейін b = 0; %Айнымалыларды инициализациялау c = 0; x = 0; y = 0; тета = 0; while c == 0 %Loop көк объект пен кедергілерді анықтауға мүмкіндік береді t = r.timeGet; d = r.getDistance; [xval, yval] = қадағалау көк (r); қия = getCliffSensors (r); %сенсор мәндері үшін құрылымдарды инициализациялау light = getLightBampers (r); bump = getBampers (r); егер light.leftCenter> = 10 || light.rightCenter> = 10 % r.stop r.setLEDDigits ('анықтама') с = 1 % жанында қабырға болса, сезеді 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 басқа электрондық поштаны жібереді cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %r.stop c = 1 r.setLEDDigits («анықтама») қасында жартастың бар -жоғын сезеді %yval = 100 r.setDriveVelocity (0.1) elseif yval болса, диск жылдамдығын көк түске қарай орнатады. 400 r.turnAngle (-5) соңы соңғы тета = тета + r.getAngle; x = d.*cosd (teta) + x; % x бөлменің координаты y = d.*sind (тета).*d + y; (1, 2, 1) бөлменің % y координаты (x, y, 'bd') % жолды белгілейді және тақырып атауын қосады ('Roomba Path') ұстап тұрыңыз; Соңы

5 -қадам: Код 3 -бөлім: Электрондық пошта бөлімі

Бұл жоспарланған жол мен суретті алады және оны көрсетілген электрондық пошта мекенжайына жібереді

(Бұл жерде электрондық поштаның үлгісі көрсетілген)

%% электрондық пошта бөлімі

егер 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 ('email sent') end

Ұсынылған: