Агуулгын хүснэгт:

UTK EF 230 MarsRoomba төслийн намар 2018: 5 алхам
UTK EF 230 MarsRoomba төслийн намар 2018: 5 алхам

Видео: UTK EF 230 MarsRoomba төслийн намар 2018: 5 алхам

Видео: UTK EF 230 MarsRoomba төслийн намар 2018: 5 алхам
Видео: Bike Tour of Seattle - 45 Miles! 4K 60fps with Captions - Prowalk Tours 2024, Арваннэгдүгээр
Anonim
UTK EF 230 MarsRoomba төслийн намар 2018
UTK EF 230 MarsRoomba төслийн намар 2018

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

Гэсэн хэдий ч ирээдүйн роверуудыг хүний туслалцаанд ашиглах болно гэсэн үндэслэлээр манай баг ровер хүний ямар талыг хянах боломжтойг авч үзсэн. Бид яаралтай сансрын нисгэгчийг амьдрал, тоног төхөөрөмжөө алдсан тохиолдолд ухаан алдахад хүргэсэн бол сансрын нисгэгч нь хөдөлгөөнгүй байгааг ажиглаж, зовлонгийн тухай мессеж дамжуулснаар манай ровер хөдөлгөөнт маягийн гэрэлт цамхаг болж чадна гэсэн дүгнэлтэд хүрсэн. Хүмүүсийг дагаж, хөдөлгөөнгүй байдлыг тодорхойлохын тулд ровер нь хүний гутлын өнгө, хөдөлгөөн гэх мэт оролтыг авах болно. Анхаарал хандуулах ёстой өөр нэг зүйл бол яаралтай үед ослын дохиог дамжуулахын тулд замаа санах хэрэгтэй болно. Манай ровер Ангараг гаригийн хэрэгцээг хангаж байгаа тул ийм гадаадын газар нутагт ийм өндөр өртөгтэй нислэг хийх шаардлагатай бол олон давхар аюулгүйн сейф шаардлагатай бөгөөд хэрэв сансрын нисгэгч костюмны доголдол эсвэл ухаангүй байдлаасаа болж туслалцаа авах боломжгүй бол ровер бусад хүмүүст сэрэмжлүүлж чадна..

Энэхүү заавар нь уншигчдад "сансрын нисгэгч" -ийг амжилттай дагаж мөрдөх, шаардлагатай бол аюулын дохиог илгээхэд зориулагдсан юм.

Алхам 1: Шаардлагатай материал

Шаардлагатай материалууд
Шаардлагатай материалууд

1) Интернетэд холбогдсон компьютер/зөөврийн компьютер

2) MATLAB_R2018a

3) Roomba болон Roomba татаж авах

Алхам 2: Тохируулах/татаж авах

Тохиргоо/Татаж авах
Тохиргоо/Татаж авах

Roomba руу нэвтрэхэд шаардлагатай програм хангамжийг татаж авахын тулд энэ скриптийг MATLAB дээр ажиллуулна уу (төслийн хавтсанд өөрийн файлд хадгалагдсан)

Нэмэлт тусламж:

EF 230 Roomba төслийн% суулгалтын програм% Хамгийн сүүлийн шинэчлэлт: 2017 оны 9 -р сарын 13 (https сервертэй холбоотой аюулгүй байдлын асуудлыг засаж, алдаа гарсан тохиолдолд устгасан файлыг устгах тухай анхааруулга) functionbabaInstall 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 (files, '') '' ':' '' cd '' 'Та үргэлжлүүлэхийг хүсч байна уу? '}; дуут дохио; yn = questdlg (хүлээх мөр,… dlgTitle,… 'Тийм', 'Үгүй', 'Тийм');

if ~ strcmp (yn, 'Yes'), буцах; Төгсгөл

% байгаа файлуудын жагсаалтыг авах боломжтой_files = файлууд (cellfun (@exist, files)> 0); if ~ isempty (existing_files) % тэдгээрийг орлуулах нь үнэхээр зөв эсэхийг шалгаарай = {'Та эдгээр файлуудыг сольж байна:' '' strjoin (existing_files, '') '' 'Орлуулах нь зөв үү?' }; дуут дохио; yn = questdlg (хүлээх мөр,… dlgTitle,… 'Тийм', 'Үгүй', 'Тийм'); if ~ 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 устгах (дамми) төгсгөлийн төгсгөл

if cnt == length (files) msg = 'Суулгалт амжилттай боллоо'; хүлээх (msgbox (msg, dlgTitle)); else msg = 'Суулгалтын алдаа - дэлгэрэнгүйг командын цонхноос үзнэ үү'; хүлээх (errordlg (msg, dlgTitle))); Төгсгөл

төгсгөл %roombaInstall

Алхам 3: Код 1 -р хэсэг: Хяналтын функц

Код 1 -р хэсэг: Хяналтын функц
Код 1 -р хэсэг: Хяналтын функц

Энэ функц нь Roomba -ийн хувьсагч ба зургийг Roomba дээрх камераас аваад мөрдөж буй объектын төв xy координатыг олдог

Энэ кодыг өөр фолдерт өөр фолдерт хадгална уу.

функц [xm, ym] = trackingblue (r) %Оролтууд: roomba хувьсагч %Гаралт: Дараах объектын төвийн x ба y утга %Зорилго: дүрс өгсөн цэнхэр биетийн төвийг олно %Хэрэглээ [x утга, y утга] = 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 = хамгийн их (1, xm-5): мин (xm+5, хэмжээ (bw, 1)); yy = хамгийн их (1, ym-5): мин (ym+5, хэмжээ (bw, 2)); bwbw = тэг (хэмжээ (bw), 'uint8'); bwbw (xx, yy) = 255; дэд хэсгийг барих (1, 2, 2) дэд зураг (justBlue + bwbw); Төгсгөл

Алхам 4: Код 2 -р хэсэг: While Loop

Энэ код нь объектын x ба y байршилд үндэслэн Roomba -ийг хянах функцээс хөөж гаргадаг. Энэ нь Roomba цэнхэр өнгийг хайж байхдаа хана, хадан цохионоос болгоомжлох болно. Энэ нь мөн Roomba замын x ба y координатыг авч, дагаж буй дүрс бүхий харгалзах схемийг үүсгэх болно. Хэрэв овойлт мэдрэгч идэвхжсэн бол энэ нь имэйлийн хэсэг рүү шилжинэ

%Rover төсөл

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Оролт: roomba утга, камерын өгөгдөл, овойлт, гэрэл, хананы мэдрэгч %Зорилго: Сансрын нисгэгчийг дагаж, саад бэрхшээлээс зайлсхийдэг. Анхааруулга өгвөл roomba нь газрын зургийн дэлгэрэнгүй мэдээллийг %руу имэйлээр илгээдэг бөгөөд энэ нь эхлэх байрлалын дагуу хаана байгааг харуулдаг. %Хэрэглээ: Roomba хувьсагчийг зарлаж програмыг ажиллуулаарай, мөн %нь хөдөлж буй ногоон объекттой болно %Гаралт: Зураг хянах зураг, имэйлийн газрын зураг, текстийг хэрэглэгч рүү харуулна %% Хэсгийг дагаж b = 0; %Хувьсагчдыг эхлүүлэх c = 0; x = 0; y = 0; тета = 0; while c == 0 %Loop нь цэнхэр объект болон саад тотгорыг илрүүлэх t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); Cliff = getCliffSensors (r); %мэдрэгчийн утгын бүтцийг эхлүүлэх гэрэл = getLightBumpers (r); овойлт = getBampers (r); хэрэв light.leftCenter> = 10 || light.rightCenter> = 10 % r.stop r.setLEDDigits ('help') c = 1 %, b == 0 % бол bump.right == 1 || ойролцоо хана байгаа эсэхийг мэдэрнэ. овойлт.зүүн == 1 || bump.front == 1 % Ханыг мэдэрсэнийхээ дараа ямар нэгэн зүйл мөргөлдсөнийг мэдэрдэг % c = 1 % b = 1 % disp ('овойлт') % төгсгөл % төгсгөл өөр бол овойлт.аруун == 1 || овойлт.зүүн == 1 || bump.front == 1 %Хэрэв энэ нь ямар нэгэн зүйл мөргөлдсөн эсэхийг мэдэрсэн бол, энэ нь r.stop c = 1 b = 1 өөр имэйл илгээх болно cliff.leftFront <= 100 || Cliff.rightFront <= 100 || цохио.зүүн <= 100 || cliff.right <= 100 %r.stop c = 1 r.setLEDDigits ('help') else ойролцоо хадан цохио байгаа эсэхийг мэдэрдэг %yval = 100 r.setDriveVelocity (0.1) өөр бол yval бол драйверын хурдыг цэнхэр өнгөөр тохируулна. 400 r.turnAngle (-5) төгсгөлийн төгсгөл тета = тета + r.getAngle; x = d.*cosd (teta) + x; % x өрөөний координат y = d.*sind (тета).*d + y; Roomba дэд хэсгийн % y координат (1, 2, 1) график (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', 'үнэн'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('жишээ имэйл', 'RoverBeacon', 'Сансрын нисэгч хөдлөхөө больсон. Сэргээхийн тулд хавсаргасан файл дахь зааврыг дагана уу.', 'rovermap.png') disp ('имэйл илгээсэн') төгсгөл

Зөвлөмж болгож буй: