Оглавление:

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 Project% Последнее обновление: 13 сентября 2017 г. (Исправлены проблемы безопасности, связанные с https-сервером, и удалено предупреждение об удалении файла в случае возникновения ошибок) function roombaInstall clc; % список файлов для установки files = {'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 destination и получить запрос подтверждения = {'Эта программа загрузит эти файлы EF 230 Roomba:' '' strjoin (files, '') '' 'в эту папку:' '' cd '' 'Вы хотите продолжить? '}; гудок; yn = questdlg (подсказка,… dlgTitle,… «Да», «Нет», «Да»);

если ~ strcmp (yn, 'Да'), возврат; конец

% получить список существующих файлов existing_files = files (cellfun (@exist, files)> 0); if ~ isempty (existing_files)% убедитесь, что их действительно можно заменить prompt = {'Вы заменяете эти файлы:' '' strjoin (existing_files, '') '' 'Можно заменить?' }; гудок; yn = questdlg (подсказка,… dlgTitle,… «Да», «Нет», «Да»); если ~ strcmp (yn, 'Да'), возврат; конец конец

% скачать файлы 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 = 'Установка прошла успешно'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Ошибка установки - подробности см. в окне команд'; waitfor (errordlg (msg, dlgTitle)); конец

конец% roombaInstall

Шаг 3. Код, часть 1: функция отслеживания

Часть кода 1: функция отслеживания
Часть кода 1: функция отслеживания

Эта функция берет переменную Roomba и изображение с камеры на Roomba и находит центральные координаты xy отслеживаемого объекта

Сохраните этот код в другом файле в той же папке.

function [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) фрагмент изображения (чб); [x, y] = найти (чб); если ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = круглый (среднее (y)); xx = max (1, xm-5): min (xm + 5, size (bw, 1)); yy = max (1, ym-5): min (ym + 5, size (bw, 2)); bwbw = нули (размер (bw), 'uint8'); bwbw (xx, yy) = 255; удерживайте на подзаголовке (1, 2, 2) фрагмент изображения (justBlue + bwbw); конец

Шаг 4. Код, часть 2: цикл while

Этот код управляет роботом Roomba в зависимости от местоположения объекта по осям x и y из функции отслеживания. Это заставит Roomba следить за стенами и скалами и при этом искать синий цвет. Это также будет принимать координаты x и y пути Roomba и создавать соответствующий график с изображением отслеживания. Если датчик удара активирован, он перейдет в раздел электронной почты

% Rover Project

% Джона Зан, Уэйд Прайс, Ноа Слоан% jzahn2, wprice15, nsloan1% Входные данные: значение комнаты, данные камеры, неровности, света и настенные датчики% Цель: следует за космонавтом и избегать препятствий. В случае предупреждения Roomba отправляет электронное письмо% с подробным описанием карты и ее начального положения. % Использование: просто запустите программу с объявлением переменной roomba, а также у% есть движущийся зеленый объект.% Вывод: показывает изображение отслеживания изображения, карту электронных писем и текст пользователю %% После раздела b = 0; % Инициализация переменных c = 0; х = 0; у = 0; тета = 0; while c == 0% Цикл для обнаружения синего объекта и препятствий t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (г); обрыв = getCliffSensors (r); % инициализация структур для значений датчиков light = getLightBumpers (r); bump = getBumpers (r); если light.leftCenter> = 10 || light.rightCenter> = 10% Определяет, есть ли стена рядом с r.stop r.setLEDDigits ('help') 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; х = d. * cosd (тета) + х; % x координата комнаты y = d. * sind (theta). * d + y; % y координата вспомогательного участка комнаты (1, 2, 1) plot (x, y, 'bd')% отображает путь и добавляет заголовок заголовка ('Путь к Roomba'); конец

Шаг 5: Код. Часть 3: Раздел электронной почты

Это возьмет намеченный путь и изображение и отправит его на указанный адрес электронной почты

(Здесь показан пример электронного письма)

%% Раздел электронной почты

if b == 1 saveas (gcf, 'rovermap.png')% сохраняет цифру setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Интернет', 'E_mail', '[email protected]'); % mail аккаунт для отправки из setpref ('Интернет', 'SMTP_Username', '[email protected]'); % senders username setpref ('Интернет', 'SMTP_Password', 'gssegsse'); % Senders password props = 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 ('электронное письмо отправлено') end

Рекомендуемые: