Съдържание:

UTK EF 230 MarsRoomba Project есен 2018: 5 стъпки
UTK EF 230 MarsRoomba Project есен 2018: 5 стъпки

Видео: UTK EF 230 MarsRoomba Project есен 2018: 5 стъпки

Видео: UTK EF 230 MarsRoomba Project есен 2018: 5 стъпки
Видео: UTK - EF 230 Autonomous Vehicle Project 2024, Ноември
Anonim
UTK EF 230 MarsRoomba Project есен 2018
UTK EF 230 MarsRoomba Project есен 2018

В момента марсоходът се използва за събиране на данни на повърхността на Марс чрез различни методи, за да се научи повече за потенциала на планетата за микробен живот. Роверите използват предимно фотография и инструменти за анализ на почвата за събиране на данни, но роувърите също включват навигационни инструменти, детектори на радиация, атмосферни сензори и лазер за изпаряване на скални проби. Планираната мисия за роувър за 2020 г. е предимно същата, но със специалната задача да „събере проби от почва и скала и да ги кешира на повърхността за потенциално завръщане на Земята чрез бъдеща мисия“, според НАСА.

Въпреки това, при предпоставката, че бъдещите роувъри ще бъдат използвани за човешка помощ, нашият екип обмисли кои аспекти на хората ровърът може да наблюдава. Стигнахме до заключението, че ако при някаква извънредна ситуация астронавтът изпадне в безсъзнание с недостатъчно поддържане на живота и оборудването, нашият роувър може да служи като подвижен маяк, след като наблюдава, че астронавтът, който е последвал, е неподвижен и предава съобщение за бедствие. За да проследи човека и да определи неподвижността, марсоходът би приел данни като цвета на обувките на човека и тяхното движение. Друг вход, който трябва да се вземе предвид, е, че той трябва да запомни пътя си, за да предаде сигнал за бедствие в случай на спешност. Нашият марсоход отговаря на нуждата на Марс, тъй като опитът за такава скъпа мисия на такъв чужд терен изисква множество слоеве на аварийни сейфове и ако астронавтът не може да получи своята помощ поради неизправност в костюма или безсъзнание, роувърът може да предупреди другите.

Тази инструкция е предназначена да помогне на читателя при програмирането на неговата или нейната Roomba да следва успешно „астронавт“и да изпраща сигнал за бедствие, ако е приложимо.

Стъпка 1: Необходими материали

Необходими материали
Необходими материали

1) Компютър/лаптоп с достъп до интернет

2) MATLAB_R2018a

3) Изтегляне на Roomba и Roomba

Стъпка 2: Настройка/Изтегляне

Настройка/Изтегляне
Настройка/Изтегляне

Стартирайте този скрипт в MATLAB, за да изтеглите софтуера, необходим за достъп до Roomba (запазен в собствен файл в папката на проекта)

Допълнителна помощ:

% Инсталационна програма за проект EF 230 Roomba% Последна актуализация: 13 септември 2017 г. (Фиксирани проблеми със сигурността, свързани с https сървъра и предупреждение за изтриване на файл при възникване на грешки) функция roombaInstall clc; % списък с файлове за инсталиране на файлове = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % местоположение за инсталиране от options = weboptions ('CertificateFilename', ''); % му кажете да игнорира изискванията за сертификат server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Инсталиране/актуализиране на Roomba'; % display display and get prompt prompt = {'Тази програма ще изтегли тези файлове EF 230 Roomba:' '' strjoin (files, '') '' '' в тази папка: '' 'cd' '' Искате ли да продължите? '}; звуков сигнал; yn = questdlg (подкана,… dlgTitle,… „Да“, „Не“, „Да“);

ако ~ strcmp (yn, 'Да'), връщане; край

% get списък с съществуващи файлове postoje_files = файлове (cellfun (@exist, файлове)> 0); if ~ isempty (existing_files) % уверете се, че наистина е добре да ги замените prompt = {'Заменяте тези файлове (файлове):' '' strjoin (existing_files, '') '' 'OK to replace?' }; звуков сигнал; yn = questdlg (подкана,… dlgTitle,… „Да“, „Не“, „Да“); ако ~ strcmp (yn, 'Да'), връщане; край край

% изтегляне на файловете cnt = 0; за i = 1: дължина (файлове) f = файлове {i}; disp (['Изтегляне' f]); опитайте url = [сървър f]; websave (f, url, options); % добавени опции за избягване на грешки в сигурността cnt = cnt + 1; catch disp (['Грешка при изтеглянето' f]); манекен = [f '.html']; ако съществуват (фиктивен, 'файл') == 2 изтриване (фиктивен) край край край

if cnt == length (files) msg = 'Инсталацията е успешна'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Грешка при инсталиране - вижте командния прозорец за подробности'; waitfor (errordlg (msg, dlgTitle)); край

край %roomba Инсталиране

Стъпка 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); %показва изображение в същия прозорец като заглавието на пътя ('Проследяващо изображение') red = img (:,:, 1); зелено = img (:,:, 2); синьо = img (:,:, 3); justBlue = синьо - зелено/2 - червено/2; bw = justBlue> 40; задръжте подсхемата (1, 2, 2) подобраза (bw); [x, y] = намери (bw); ако ~ 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: Докато цикъл

Този код управлява Roomba въз основа на местоположението x и y на обекта от функцията за проследяване. Това ще накара Roomba да внимава за стени и скали, докато търси синьо. Това също ще вземе координатите x и y на пътя на Roomba и ще създаде съответния график с проследяващото изображение. Ако сензорът за удар е активиран, той ще премине към секцията за имейли

%Rover Project

%Jonah Zahn, Wade Price, Noah Sloan %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); cliff = getCliffSensors (r); %инициализиране на структурите за сензорни стойности light = getLightBumpers (r); bump = getBumpers (r); ако light.leftCenter> = 10 || light.rightCenter> = 10 % Усеща дали има стена в близост до r.stop r.setLEDDigits ('помощ') 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 ('help') else %Задава скоростите на задвижване, които да следват синьото, ако yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d.*cosd (тета) + x; % x координата на румба y = d.*sind (theta).*d + y; % y координата на подплота на roomba (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 ('Internet', '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 ('имейл изпратен') край

Препоръчано: