Оглавление:
Видео: Mars Roomba Project UTK: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ЭТО БУДЕТ РАБОТАТЬ, ТОЛЬКО ЕСЛИ КОМНАТА УСТАНОВЛЕНА В
ОЧЕНЬ КОНКРЕТНЫМ СПОСОБОМ, ДАННАЯ ИНСТРУКЦИЯ БЫЛА СОЗДАНА ДЛЯ УНИВЕРСИТЕТА СТУДЕНТОВ ТЕННЕССИ И ФАКУЛЬТЕТА И ПРЕДНАЗНАЧЕНА ДЛЯ ИСПОЛЬЗОВАНИЯ
Этот код используется для настройки 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 должен работать в соответствии с инструкциями.
Рекомендуемые:
Mars Roomba: 6 шагов
Mars Roomba: это руководство расскажет вам, как работать с вакуумным ботом Roomba, управляемым Raspberry Pi. Мы будем использовать операционную систему через MATLAB
Roomba Explorer: 4 шага
Roomba Explorer: используя MATLAB и Create2 Robot от iRobot, этот проект будет исследовать различные области неизвестного местоположения. Мы использовали датчики робота, чтобы помочь маневрировать на опасной местности. Получая фотографии и видеопоток с Raspberry Pi, который
Roomba, помогающий космонавту: 4 шага
Roomba, помогающий астронавту: в этом проекте используется Raspberry Pi 3 на борту iRobot Create Version 2. MATLAB используется для программирования робота, чтобы он следовал определенным инструкциям, используя его датчики и камеру. Датчики и камеры используются для выполнения определенных задач
UTK EF 230 MarsRoomba Project осень 2018: 5 шагов
UTK EF 230 MarsRoomba Project Осень 2018: В настоящее время марсоходы используются для сбора данных на поверхности Марса различными методами, чтобы в конечном итоге узнать больше о потенциале планеты для микробной жизни. Марсоходы в основном используют инструменты фотографии и анализа почвы для получения данных c
IRobot Create-Mars Expedition Rover Mark I: 4 шага
IRobot Create-Mars Expedition Rover Mark I. В этом руководстве вы узнаете, как настроить iRobot Create с использованием кода MatLab. Ваш робот будет иметь возможность искать минералы, различая формы, маневрировать на пересеченной местности с помощью датчиков обрыва, а также может