Оглавление:

Mars Roomba Project UTK: 4 шага
Mars Roomba Project UTK: 4 шага

Видео: Mars Roomba Project UTK: 4 шага

Видео: Mars Roomba Project UTK: 4 шага
Видео: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Ноябрь
Anonim
Марс Roomba Project ЮТК
Марс Roomba Project ЮТК
Марс Roomba Project ЮТК
Марс Roomba Project ЮТК

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ЭТО БУДЕТ РАБОТАТЬ, ТОЛЬКО ЕСЛИ КОМНАТА УСТАНОВЛЕНА В

ОЧЕНЬ КОНКРЕТНЫМ СПОСОБОМ, ДАННАЯ ИНСТРУКЦИЯ БЫЛА СОЗДАНА ДЛЯ УНИВЕРСИТЕТА СТУДЕНТОВ ТЕННЕССИ И ФАКУЛЬТЕТА И ПРЕДНАЗНАЧЕНА ДЛЯ ИСПОЛЬЗОВАНИЯ

Этот код используется для настройки Roomba для запуска локально написанного и сохраненного кода в MATLAB. Это не сработает, если вы не можете получить необходимые библиотеки на веб-сайте Университета Теннесси. Если у вас есть библиотеки, вы можете использовать их для программирования собственного Roomba, используя функции библиотеки. Это руководство научит вас, как установить библиотеки, создать папку для всего кода, а также как кодировать и использовать программу, которую мы предоставили ниже.

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

· Roomba

· MATLAB

· Камера Raspberry Pi и Pi

Шаг 1. Получение библиотек

На инженерном веб-сайте есть набор инструментов / библиотека, загрузите ее и поместите в новую папку. Эта папка должна содержать все рабочие файлы проекта, так как любая функция, используемая в создаваемой вами программе, должна будет ссылаться на библиотеку. После того, как вы это сделаете, вы можете приступить к работе над своими программами.

Шаг 2: Написание программ

В программе можно использовать довольно много функций, доступ к этим функциям можно получить с помощью команды "doc roomba". Используя эти функции, вы можете управлять роботом Roomba разными способами. Приведенный ниже код использует датчики удара, датчики световой полосы, камеру и датчики обрыва по-разному для создания марсохода. Мы использовали датчики ударов, чтобы определить, когда Roomba ударяет об объект, когда это происходит, робот реверсирует, разворачивается и продолжает движение. Перед тем, как Roomba столкнется с объектом, световая полоса обнаружит объект и замедлит работу Roomba, чтобы, когда он столкнется с объектом, чтобы активировать датчик удара, Roomba будет меньше поврежден / затронут ударом. Камера ищет воду или лаву на поверхности, если жидкость не обнаружена, робот продолжит поиск, если вода обнаружена, робот сообщит операторам. Датчики обрыва предназначены для остановки робота, если он приближается к обрыву. Если робот почувствует обрыв, он развернется и развернется, чтобы не упасть.

Шаг 3: Код

Скопируйте и вставьте это в файл MATLAB, который находится в той же папке, что и библиотеки.

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

while true% Infinte while цикл, чтобы код продолжал работать

dontFall = cliffCheck (r)% Назначает переменную dontFall функции cliffCheck

if dontFall% if оператор для продолжения в коде после завершения cliffCheck

r.setDriveVelocity (0.1, 0.1)% Продолжает движение Roomba после завершения cliffCheck

end% заканчивается оператором 'dontFall' if

bumper = bumpcheck (r)% Назначает переменную 'bumper' функции 'bumpcheck'

if bumper% if инструкция для продолжения в коде после завершения "bumpcheck"

r.setDriveVelocity (0.1, 0.1)% Продолжает движение Roomba после завершения "ударной проверки"

end% завершает оператор if

жидкости = LiquidCheck (r)% Назначает переменную "жидкости" функции "Проверка жидкости".

if liquids% if инструкция для продолжения в коде после завершения проверки LiquidCheck

r.setDriveVelocity (0.1, 0.1)% Продолжает движение Roomba после завершения проверки LiquidCheck

end% завершает оператор if "жидкости"

lightbumper = lightcheck (r)% Присваивает переменную 'lightbumper' функции 'lightcheck'

pause (0.1)% Кратковременная пауза, чтобы избежать непрерывной итерации цикла

end% завершает бесконечный цикл while

end% завершает функцию

function bumper = bumpcheck (r)% Создает функцию bumpcheck

bumpdata = r.getBumpers% Назначает все данные из заставки переменной 'bumpdata'

bumper = bumpdata.right || bumpdata.left || bumpdata.front% Создает сохраненную переменную "бампер" для различных бамперов.

if bumpdata.right> 0% Оператор If, вызывающий выполнение различных функций Roomba при ударе бампера

r.stop% Останавливает Roomba

r.moveDistance (-0,3, 0,2)% переворачивает Roomba на 0,3 м

r.turnAngle (90, 0,5)% Поворачивает Roomba на 90 градусов как можно быстрее

конец

если bumpdata.front> 0

r.stop

r.moveDistance (-0,3; 0,2)

r.turnAngle (randi (270), 0.5)% Поворачивает Roomba с произвольным интервалом от 0 до 270 градусов как можно быстрее

конец

если bumpdata.left> 0

r.stop

r.moveDistance (-0,3; 0,2)

r.turnAngle (-90, 0,5)% Поворачивает Roomba на -90 градусов как можно быстрее

конец

конец

function lightbumper = lightcheck (r)% Создает функцию 'lightcheck'

lightdata = r.getLightBumpers% Назначает все данные от датчика светового удара переменной 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Создает сохраненную переменную lightbumper для различных световых бамперов.

if lightbumper% Оператор If для вызова данных светового экрана сверху

if lightdata.left> 10% Оператор If, вызывающий выполнение различных функций Roomba, если световой бампер определяет более 10 значений

r.setDriveVelocity (0,05, 0,05)% Замедляет Roomba, чтобы подготовиться к удару

end% завершает начальный оператор if

если lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

конец

если lightdata.right> 10

r.setDriveVelocity (0,05, 0,05)

конец

если lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

конец

end% заканчивается оператором if 'lightbumper'

end% завершает функцию световой проверки

function dontFall = cliffCheck (r)% Создает функцию cliffCheck

data = r.getCliffSensors; % Назначает все данные с датчика обрыва переменной 'data'

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Создает сохраненную переменную dontFall для различных датчиков обрыва.

if dontFall% Оператор If для вызова данных датчика обрыва сверху

if data.left <1010% Оператор If, вызывающий выполнение различных функций roomba, если датчик обрыва обнаруживает менее 1010 значений

r.stop

r.moveDistance (-0,2, 0,2)% переворачивает Roomba на 0,2 м

r.turnAngle (-90, 0,5)% Поворачивает Roomba на -90 градусов как можно быстрее

elseif data.leftFront <1010

r.stop

r.moveDistance (-0,3; 0,2)

r.turnAngle (90, 0,5)% Поворачивает Roomba на 90 градусов как можно быстрее

elseif data.rightFront <1010

r.stop

r.moveDistance (-0,3; 0,2)

r.turnAngle (90, 0,5)% Поворачивает Roomba на 90 градусов как можно быстрее

elseif data.right <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5)% Поворачивает Roomba на 90 градусов как можно быстрее

конец

конец

конец

function liquids = LiquidCheck (r)% Создает функцию LiquidCheck

в то время как истина% запускает бесконечный цикл для калибровки

img = r.getImage; % читает камеру робота

image (img)% показывает изображение в окне рисунка

red_mean = mean (mean (img (200, 150, 1)))% читает среднее количество красных пикселей

blue_mean = mean (mean (img (200, 150, 3)))% читает среднее количество синих пикселей

жидкости = red_mean || blue_mean% Создает сохраненную переменную "жидкости" для различных цветовых переменных.

if жидкости% Оператор If для вызова данных изображения сверху

if red_mean> 170% Оператор If, вызывающий выполнение различных функций Roomba, если камера видит средний красный цвет больше 170

r.stop% останавливает roomba

r.setLEDCenterColor (255)% устанавливает красный цвет круга

r.setLEDDigits (); % очистить дисплей

f = waitbar (0, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % создает полосу ожидания для сообщения о загрузке

r.setLEDDigits ('ГОРЯЧИЙ'); % устанавливает светодиодный дисплей на вывод «ГОРЯЧЕЕ».

pause (0.5)% Короткая пауза для чтения отображаемой информации

r.setLEDDigits ('ЛАВА'); % устанавливает светодиодный дисплей на вывод 'LAVA'

пауза (0,5)

waitbar (.33, f, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % увеличивает полосу ожидания

r.setLEDDigits ('ГОРЯЧИЙ');

пауза (0,5)

r.setLEDDigits ('ЛАВА');

пауза (0,5)

waitbar (.67, f, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % увеличивает полосу ожидания

r.setLEDDigits ('ГОРЯЧИЙ');

пауза (0,5)

r.setLEDDigits ('ЛАВА');

waitbar (1, f, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % завершает панель ожидания

пауза (1)

close (f)% закрывает панель ожидания

r.setLEDDigits (); % очищает светодиодный дисплей

закрыть все% Закрывает все предыдущие окна

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Очищает окно графика осей и диаграммы

у = 0,5; % устанавливает y-позицию текста в окне построения.

х = 0,06; % устанавливает x-позицию текста в окне построения.

title ('FROM MARS ROOMBA', 'fontsize', 32)% Добавляет заголовок в окно построения.

quadeqtxt = 'ОПАСНАЯ ЛАВА'; % Устанавливает для переменной quadeqtxt значение 0

текст (x, y, quadeqtxt, 'интерпретатор', 'латекс', 'размер шрифта', 36); % отображает текст quadeq в окне построения.

r.moveDistance (-0.2, 0.2)% переворачивает румбу на 0,2 м

r.turnAngle (180, 0.5)% максимально быстро поворачивает румбу на 180 градусов

r.setLEDCenterColor (128, 128); % устанавливает центральный светодиодный индикатор Roomba на оранжевый

закрыть все% закрывает оставшиеся открытые окна

elseif blue_mean> 175% Оператор If, вызывающий выполнение различных функций Roomba, если камера видит средний синий цвет больше 175

r.stop% останавливает roomba

r.setLEDCenterColor (255)% устанавливает красный цвет круга

r.setLEDDigits (); % очистить дисплей

f = waitbar (0, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % создает полосу ожидания для сообщения о загрузке

r.setLEDDigits ('СМОТРЕТЬ'); % устанавливает светодиодный дисплей на вывод "LOOK"

pause (0.5)% Короткая пауза для чтения отображаемой информации

r.setLEDDigits ('ВАТР'); % устанавливает светодиодный дисплей на вывод WATR

пауза (0,5)

waitbar (.33, f, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % увеличивает полосу ожидания

r.setLEDDigits ('СМОТРЕТЬ');

пауза (0,5)

r.setLEDDigits ('ВАТР');

пауза (0,5)

waitbar (.67, f, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % увеличивает полосу ожидания

r.setLEDDigits ('СМОТРЕТЬ');

пауза (0,5)

r.setLEDDigits ('ВАТР');

waitbar (1, f, '* ВХОДЯЩЕЕ СООБЩЕНИЕ *'); % завершает панель ожидания

пауза (1)

close (f)% закрывает панель ожидания

r.setLEDDigits (); % очищает светодиодный дисплей

закрыть все% Закрывает все предыдущие окна

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Очищает окно графика осей и диаграммы

у = 0,5; % устанавливает y-позицию текста в окне построения.

х = 0,06; % устанавливает x-позицию текста в окне построения.

title ('FROM MARS ROOMBA', 'fontsize', 32)% Добавляет заголовок в окно построения.

quadeqtxt = 'НАЙДЕННАЯ ВОДА'; % Устанавливает для переменной quadeqtxt значение 0

текст (x, y, quadeqtxt, 'интерпретатор', 'латекс', 'размер шрифта', 36); % отображает текст quadeq в окне построения.

r.moveDistance (-0.2, 0.2)% переворачивает румбу на 0,2 м

r.turnAngle (180, 0.5)% максимально быстро поворачивает румбу на 180 градусов

r.setLEDCenterColor (128, 128); % устанавливает центральный светодиодный индикатор Roomba на оранжевый

закрыть все% закрывает оставшиеся открытые окна

end% завершает оператор if 'red_mean'

end% завершает оператор if "жидкости"

end% закрывает бесконечный цикл while

end% завершает функцию LiquidCheck

Шаг 4: запуск кода

После того, как вы скопировали и вставили код в MATLAB, вы должны подключиться к Roomba. После подключения Roomba вы должны назвать переменную r. Функции используют переменную r при обращении к Roomba, поэтому Roomba должен быть определен как переменная r. После запуска кода Roomba должен работать в соответствии с инструкциями.

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