Mundarija:

UTK EF 230 MarsRoomba Project Fall 2018: 5 qadam
UTK EF 230 MarsRoomba Project Fall 2018: 5 qadam

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 qadam

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 qadam
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Iyul
Anonim
UTK EF 230 MarsRoomba loyihasi kuz 2018
UTK EF 230 MarsRoomba loyihasi kuz 2018

Hozirgi vaqtda Mars sayyoralari turli xil usullar bilan Mars yuzasidagi ma'lumotlarni to'plash uchun ishlatiladi, natijada sayyoraning mikroblar hayoti salohiyati haqida ko'proq ma'lumotga ega bo'ladilar. Ma'lumot yig'ish uchun roverlar asosan fotografiya va tuproqni tahlil qilish vositalaridan foydalanadilar, ammo roverlarga navigatsiya asboblari, radiatsiya detektorlari, atmosfera sensorlar va tog 'namunalarini bug'lanish lazeri ham kiradi. NASA ma'lumotlariga ko'ra, 2020 yilgi rover missiyasining maqsadi asosan bir xil, lekin "tuproq va tog 'jinslarining namunalarini to'plash va kelajakda Yerga qaytishi uchun ularni keshlash" maxsus vazifasi bilan.

Biroq, kelajakda roverlar odamlarga yordam berish uchun ishlatiladi, degan xulosaga kelsak, bizning guruhimiz rover odamlarning qaysi jihatlarini kuzatishi mumkinligini ko'rib chiqdi. Biz shunday xulosaga keldikki, agar biron bir favqulodda vaziyatda kosmonavtni hayotiy ta'minoti va jihozlari ishlamay qolsa, u behush holatda qolsa, bizning sayohatchimiz kosmonavtning harakatsizligini kuzatib, qayg'u haqida xabar berib, mayday mayoq bo'lib xizmat qilishi mumkin. Odamga ergashish va harakatsizlikni aniqlash uchun rover odam poyafzalining rangi va uning harakati kabi ma'lumotlarni oladi. Shuni e'tiborga olish kerakki, favqulodda vaziyatda signal signalini uzatish uchun u o'z yo'lini eslab qolishi kerak. Bizning sayohatchimiz Marsdagi ehtiyojni qondiradi, chunki bunday chet elda qimmatga tushadigan missiyani amalga oshirish uchun bir nechta qatlamli seyflar kerak bo'ladi va agar kosmonavt kostyumning noto'g'ri ishlashi yoki hushidan ketishi tufayli o'z yordamiga ega bo'lolmasa, u boshqa odamlarni ogohlantirishi mumkin..

Bu yo'riqnoma o'quvchiga Roombani "kosmonavt" ni muvaffaqiyatli kuzatib borishi va kerak bo'lsa, signal signalini yuborishda yordam berish uchun mo'ljallangan.

1 -qadam: kerakli materiallar

Kerakli materiallar
Kerakli materiallar

1) Internetga ulanadigan kompyuter/noutbuk

2) MATLAB_R2018a

3) Roomba va Roomba -ni yuklab olish

2 -qadam: O'rnatish/Yuklab olish

O'rnatish/Yuklab olish
O'rnatish/Yuklab olish

Roomba -ga kirish uchun zarur bo'lgan dasturiy ta'minotni yuklab olish uchun MATLAB -da ushbu skriptni ishga tushiring (loyiha papkasida o'z faylida saqlanadi)

Qo'shimcha yordam:

% EF 230 Roomba loyihasi uchun o'rnatish dasturi% Oxirgi yangilanish: 2017 yil 13 sentyabr (HTTPS serveri bilan bog'liq tuzatilgan xavfsizlik muammolari va agar xatolik yuz bersa, o'chirilgan faylni o'chirish haqida ogohlantirish) funktsiyasi roombaInstall clc; Fayllarni o'rnatish uchun % fayllar ro'yxati = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; variantlardan o'rnatish uchun % manzil = weboptions ('CertificateFilename', ''); % sertifikat talablariga e'tibor bermaslikni aytadi server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba o'rnatish/yangilash'; % display maqsadi va tasdiq so'rovini oladi = {'Bu dastur EF 230 Roomba fayllarini yuklaydi:' '' strjoin (fayllar, '') '' 'bu papkaga:' '' cd '' 'Davom etishni xohlaysizmi? '}; ovozli signal; yn = questdlg (tezkor,… dlgTitle,… 'Ha', 'Yo'q', 'Ha');

if ~ strcmp (yn, 'Ha'), qaytish; oxiri

% mavjud fayllar ro'yxatini oling_files = fayllar (cellfun (@exist, files)> 0); if ~ isempty (mavjud_files) % ularni almashtirish haqiqatan ham to'g'ri ekanligiga ishonch hosil qiling prompt = {'Siz bu fayl (lar) ni almashtiryapsiz:' '' strjoin (mavjud_files, '') '' 'O'zgartirish kerakmi?' }; ovozli signal; yn = questdlg (tezkor,… dlgTitle,… 'Ha', 'Yo'q', 'Ha'); if ~ strcmp (yn, 'Ha'), qaytish; oxiri oxiri

% fayllarni yuklab olish cnt = 0; i = 1 uchun: uzunlik (fayllar) f = fayllar {i}; disp (['Yuklanmoqda' f]); url = [server f] ni sinab ko'ring; veb -saqlash (f, url, variantlar); xavfsizlik xatolarining oldini olish uchun % variantlar qo'shildi cnt = cnt + 1; catch disp (['Yuklab olishda xatolik' f]); qo'g'irchoq = [f '.html']; agar mavjud bo'lsa (qo'g'irchoq, 'fayl') == 2 o'chirish (qo'g'irchoq) end end end

if cnt == length (files) msg = 'O'rnatish muvaffaqiyatli bo'ldi'; kutish (msgbox (msg, dlgTitle)); else msg = 'O'rnatish xatosi - tafsilotlar uchun buyruq oynasiga qarang'; kutish (errordlg (msg, dlgTitle)); oxiri

end %roombaInstall

3 -qadam: Kod 1 -qism: Kuzatish funktsiyasi

Kod 1 -qism: Kuzatish funktsiyasi
Kod 1 -qism: Kuzatish funktsiyasi

Bu funksiya Roomba o'zgaruvchisini va kameradagi Roombadagi rasmni oladi va kuzatiladigan ob'ektning markaziy xy koordinatalarini topadi

Ushbu kodni boshqa papkada saqlang.

funktsiya [xm, ym] = kuzatuvchi ko'k (r) %Kirish: xona o'zgaruvchisi %Chiqish: quyidagi ob'ekt markazining x va y qiymati %Maqsad: tasvir berilgan ko'k ob'ektning markazini topadi %Foydalanish [x qiymati, y qiymat] = kuzatuv ko'k (xona o'zgaruvchisi) img = r.getImage; % robotni pastki qismidagi kamerani o'qiydi (1, 2, 2) pastki tasvir (img); %tasvirni yo'lning sarlavhasi bilan bir oynada ko'rsatadi ('Tasvirni kuzatish') red = img (:,,:, 1); yashil = img (:,,:, 2); ko'k = img (:,,:, 3); justBlue = ko'k - yashil/2 - qizil/2; bw = justBlue> 40; subplot (1, 2, 2) pastki tasvirini ushlab turish (bw); [x, y] = topish (bw); if ~ isempty (x) && ~ isempty (y) xm = yumaloq (o'rtacha (x)); ym = dumaloq (o'rtacha (y)); xx = maksimal (1, xm-5): min (xm+5, o'lcham (bw, 1)); yy = maksimal (1, ym-5): min (ym+5, o'lcham (bw, 2)); bwbw = nol (o'lcham (bw), 'uint8'); bwbw (xx, yy) = 255; (1, 2, 2) pastki tasvirni ushlab turish (justBlue + bwbw); oxiri

4 -qadam: Kod 2 -qism: Loop paytida

Bu kod Roombani ob'ektning x va y joylashuviga qarab kuzatuv funktsiyasidan haydab chiqaradi. Bu Roombani devorlar va jarliklarga, ko'k rangni qidirishga majbur qiladi. Bu, shuningdek, Roomba yo'lining x va y koordinatalarini oladi va kuzatuv tasviri bilan mos keladigan syujet yaratadi. Agar zarba sensori faollashtirilgan bo'lsa, u elektron pochta bo'limiga o'tadi

%Rover loyihasi

%Yunus Zahn, Ueyd Prays, Nuh Sloan %jzahn2, wprice15, nsloan1 %Kirishlar: xona qiymati, kamera ma'lumotlari, zarba, yorug'lik va devor datchiklari %Maqsad: Kosmonavtni kuzatadi va to'siqlardan qochadi. Agar ogohlantirilsa, Roomba xaritani va uning boshlang'ich pozitsiyasiga muvofiq qaerda ekanligini batafsil %elektron pochta xabarini yuboradi. %Foydalanish: faqat Roomba o'zgaruvchisini e'lon qilgan holda dasturni ishga tushiring, shuningdek %harakatlanuvchi yashil ob'ektga ega %Chiqish: tasvirni kuzatish rasmini, elektron pochta xaritasini va foydalanuvchiga matnni ko'rsatadi %% B = 0 bo'limidan so'ng; %O'zgaruvchilarni ishga tushirish c = 0; x = 0; y = 0; teta = 0; c == 0 %Loop esa ko'k ob'ekt va to'siqlarni t = r.timeGet aniqlashini ta'minlash uchun; d = r.getDistance; [xval, yval] = kuzatuvchi ko'k (r); jarlik = getCliffSensors (r); %sensorlar qiymatlari uchun tuzilmalarni ishga tushirish light = getLightBampers (r); bump = getBampers (r); agar light.leftCenter> = 10 || light.rightCenter> = 10 % r.stop r.setLEDDigits ('yordam') c = 1 % yaqinida devor borligini sezadi, b == 0 % bo'lsa bump.right == 1 || bump.left == 1 || bump.front == 1 % Devorni sezganidan keyin nimadir urilganini sezadi % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Agar biror narsa urilgan bo'lsa, sezadi, agar shunday bo'lsa, u elektron pochta xabarini yuboradi 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 ('help') else yonida jarlik borligini sezadi %yval = 100 r.setDriveVelocity (0.1) boshqa bo'lsa 400 r.turnAngle (-5) oxiri oxiri teta = teta + r.getAngle; x = d.*cosd (teta) + x; % x xona koordinatasi y = d.*sind (teta).*d + y; % y xona jadvalining (1, 2, 1) uchastkasining koordinatasi (x, y, 'bd') % yo'lni belgilaydi va sarlavha sarlavhasini ('Roomba yo'li') qo'shib qo'yadi; oxiri

5 -qadam: Kod 3 -qism: Elektron pochta bo'limi

Bu chizilgan yo'l va tasvirni oladi va uni ko'rsatilgan elektron pochta manziliga yuboradi

(Bu erda elektron pochta namunasi ko'rsatilgan)

%% elektron pochta bo'limi

agar b == 1 saveas (gcf, 'rovermap.png') %setpref raqamini saqlasa ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); setpref -dan yuboriladigan % pochta hisobi ('Internet', 'SMTP_Username', '[email protected]'); % yuboruvchilar foydalanuvchi nomi setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Yuboruvchilar parollari rekvizitlari = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'rost'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('elektron pochta namunasi', 'RoverBeacon', 'Astronavt harakatini to'xtatdi. Qayta tiklash uchun biriktirilgan fayldagi ko'rsatmalarga amal qiling.', 'rovermap.png') disp ('elektron pochta yuborildi') oxiri

Tavsiya: