Мазмуну:

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: UTK - EF 230 Autonomous Vehicle Project 2024, Июль
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

Учурда, Марс роверлери Марстын бетиндеги маалыматтарды ар кандай ыкмалар менен чогултуу үчүн колдонулат, бул планетанын микробдук жашоого болгон мүмкүнчүлүктөрү жөнүндө көбүрөөк билүү үчүн. Роверс негизинен маалымат чогултуу үчүн сүрөткө тартууну жана топуракты талдоо куралдарын колдонот, бирок роверлерде навигациялык приборлор, радиация детекторлору, атмосфера сенсорлору жана тоо тектеринин буусу үчүн лазер бар. НАСАнын маалыматы боюнча, 2020 -жылы пландаштырылган миссиянын максаты негизинен бирдей, бирок "топурактын жана тоо тектеринин үлгүлөрүн чогултуу жана Жерге потенциалдуу кайтып келүү үчүн аларды жер бетинде кэштөө" өзгөчө тапшырма менен.

Бирок, келечектеги роверлер адамдарга жардам берүү үчүн колдонулат деген негизде, биздин команда ровер адамдардын кандай аспектилерин көзөмөлдөй аларын карап чыкты. Биз кандайдыр бир чукул кырдаалда космонавтты эс -учун жоготуп, жашоо камсыздоосу жана жабдуулары жок кылышы керек деген жыйынтыкка келдик, биздин ровер астронавт кыймылсыз экенин байкап, кыйналып жаткандыгын билдирүү менен мобилдик маяк катары кызмат кыла алат. Адамды ээрчип, кыймылсыздыгын аныктоо үчүн, ровер адамдын бут кийиминин түсү жана алардын кыймылы сыяктуу маалыматтарды алат. Дагы бир эске алуу керек, бул өзгөчө кырдаалда сигнал сигналын берүү үчүн өз жолун эстеши керек болчу. Биздин ровер Марстагы муктаждыкты канааттандырат, анткени мындай бөтөн жерде кымбат баалуу миссияны ишке ашыруу үчүн сейфтердин бир нече катмары талап кылынат, эгерде космонавт костюмунун иштебегендигинен же эсин жоготконунан өз жардамын ала албаса, анда ровер башкаларга эскертүү бере алат..

Бул көрсөтмө окурманга Roomba программасын "космонавтын" ийгиликтүү ээрчүүсүнө жана эгер мүмкүн болсо кырсык сигналын жөнөтүүгө жардам берүү үчүн иштелип чыккан.

1 -кадам: Керектүү материалдар

Керектүү материалдар
Керектүү материалдар

1) Интернетке жеткиликтүү компьютер/ноутбук

2) MATLAB_R2018a

3) Roomba жана Roomba жүктөө

2 -кадам: Орнотуу/Жүктөө

Орнотуу/Жүктөө
Орнотуу/Жүктөө

Бул сценарийди Roombга кирүү үчүн керектүү программаны жүктөө үчүн MATLABда иштетиңиз (долбоордун папкасында өз файлында сакталган)

Кошумча жардам:

EF 230 Roomba долбоору үчүн% Орнотуу программасы% Акыркы жаңыртуу: 2017 -жылдын 13 -сентябры (https сервери менен байланышкан коопсуздук маселелери жана каталар чыкса, файлды жок кылуу эскертүүсү алынып салынган) functionbabaInstall clc; Файлдарды орнотуу үчүн % тизмеси = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; опциялардан орнотуу үчүн % жайгашуу = weboptions ('CertificateFilename', ''); % тастыктаманын талаптарын этибарга албоону айт = server = '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; аяктоо

% бар файлдардын тизмесин алуу_мумкун болгон файлдар = файлдар (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 = [server 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 мааниси, y маани] = trackingblue (бөлмө өзгөрмөсү) img = r.getImage; % камераны роботтун кошумча планынан окуйт (1, 2, 2) subimage (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): мүн (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 -бөлүк: Цикл учурунда

Бул код Roombаны объектинин x жана y жайгашуусунун негизинде көзөмөлдөө функциясынан айдайт. Бул Roomba көк издеп жатканда, дубалдарды жана аскаларды сак болот. Бул ошондой эле Roomba жолунун x жана y координаттарын алат жана көзөмөл сүрөтү менен тиешелүү сюжетти түзөт. Эгерде согуу сенсору иштетилсе, ал электрондук почта бөлүмүнө өтөт

%Rover долбоору

%Жунус Зах, Уэйд Прайс, Нух Слоан %jzahn2, wprice15, nsloan1 %Кириштер: roomba мааниси, камера маалыматы, шишик, жарык жана дубал сенсорлору %Максаты: Космонавтты ээрчип, тоскоолдуктарды болтурбоо. Эгер эскертүү берилсе, Roomba картаны жана анын баштапкы позициясына ылайык кайда экенин электрондук почта аркылуу %жөнөтөт. %Колдонуу: жөн гана Roomba өзгөрмөсүн жарыялоо менен программаны иштетиңиз, ошондой эле %кыймылдуу жашыл объектиге ээ %Чыгымдар: сүрөттү көзөмөлдөө сүрөтүн, электрондук почта картасын жана текстти колдонуучуга көрсөтөт %% Кийинки бөлүм b = 0; %Өзгөрмөлөрдү баштоо c = 0; x = 0; y = 0; тета = 0; ал эми c == 0 %Loop бул көк объектти жана тоскоолдуктарды аныктоо үчүн t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); жар = getCliffSensors (r); сенсордун мааниси структураларды инициализациялоо жарык = getLightBumpers (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 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %r.stop c = 1 r.setLEDDigits ("жардам") жанында жар бар экенин сезет башка %yval = 100 r.setDriveVelocity (0.1) башка болсо 400 r.turnAngle (-5) учу учу тета = тета + r.getAngle; x = d.*cosd (theta) + x; % x координаты Roomba y = d.*sind (тета).*d + y; % y координаты Roomba подплотунун (1, 2, 1) участогунун (x, y, 'bd') % жолу чийилет жана аталыштын аталышын кошот ('Roomba Path') кармап туруу; аяктоо

5 -кадам: Код 3 -бөлүк: Электрондук почта бөлүмү

Бул пландалган жолду жана сүрөттү алып, көрсөтүлгөн электрондук почта дарегине жөнөтөт

(Бул жерде мисал электрондук почта менен көрсөтүлгөн)

%% Электрондук почта бөлүмү

if 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

Сунушталууда: