Оглавление:

Garden Helper Roomba Bot: 8 шагов
Garden Helper Roomba Bot: 8 шагов

Видео: Garden Helper Roomba Bot: 8 шагов

Видео: Garden Helper Roomba Bot: 8 шагов
Видео: You’re welcome 😚 #Roomba #maintenance 2024, Ноябрь
Anonim
Садовый помощник Roomba Bot
Садовый помощник Roomba Bot

Киара Майерс, Ахмад Альгадир и Мэдисон Типпет

Цель:

Это руководство научит вас, как запрограммировать робот Roomba Bot с помощью MATLAB, чтобы перемещаться по саду, обнаруживая фрукты / овощи круглой формы, которые достаточно созрели, чтобы их можно было собрать, исходя из их размера. Этот робот также отправляет вам электронное письмо с предупреждением о том, сколько фруктов готово к сбору, и о пути, по которому они прошли.

Функции:

  • Использует датчики света для обнаружения стен и слегка поворачивает, чтобы не задеть их
  • Использует датчики ударов, чтобы нарушить программу, когда он ударяется о камень в конце сада.
  • Использует обработку изображений для обнаружения круга в саду, а затем определения его радиуса.
  • Использует датчики обрыва для обнаружения цветной ленты, указывающей на присутствие фруктов.

Шаг 1. Материалы и принадлежности:

  • Один ноутбук
  • MATLAB 2017
  • Пылесос Roomba
  • Raspberry Pi
  • Деревянные блоки
  • Белая бумага
  • Черная бумага
  • Цветная лента / тонкая полоска цветной бумаги
  • Большой камень

Шаг 2:

Шаг 3: Сборка вашего «сада»

Сборка вашего
Сборка вашего
  1. Возьмите черную бумагу и нарежьте кружочки разного размера.
  2. Приклейте эти черные круги скотчем на большую белую бумагу.

    Этот контраст будет необходим при обнаружении фрукта

  3. Используйте свои деревянные блоки, чтобы построить похожую на лабиринт садовую дорожку, по которой ваш робот будет перемещаться

    Мы выбрали U-образный путь, как на картинке выше

  4. В конце вашего сада добавьте камень, дверь или другой объект, чтобы ваш робот знал, что он готов.
  5. Приклейте белую бумагу с кружком на стены сада.

    Мы использовали ведра, чтобы приклеить его, потому что наши стены были слишком короткими для камеры

  6. Положите цветной скотч / тонкую полоску цветной бумаги на землю перед фруктом.

Шаг 4: Написание кода

Путешествие по саду

Использование датчиков удара: для запуска программы мы помещаем код в оператор while, который перебирает различные операторы if до тех пор, пока код не будет нарушен. Если ударить по любому из бамперов, это приведет к тому, что их значение будет равно истине (что в логическом значении равно 1). Оператор if используется для взлома кода, когда одно из их значений равно 1.

Использование Cliff Sensors: в операторе while мы используем оператор if, чтобы сообщить Roomba, когда он прибыл на место расположения растения. Roomba обнаруживает цветную ленту на полу, исследуя порог красного цвета, который улавливают датчики обрыва. Если левый или правый датчик обрыва обнаруживает цвет с более высоким порогом, чем у земли, он останавливает робота на 2 секунды (используя команду паузы). В течение этих 2 секунд Roomba сделает снимок фруктов и отобразит их. Используя встроенную команду imfindcircles, установите диапазон радиусов кругов, и робот Roomba найдет ваш так называемый фрукт.

Использование обработки изображений: внутри оператора if мы встраиваем еще один оператор if, который говорит: если обнаруженный радиус, radii3, больше или равен нашему минимальному требованию к спелому фрукту, r1 (это решаете вы), затем подсчитайте и отобразите Roomba сколько фруктов готово и поверните, чтобы продолжить через сад. Если нет, пора продолжить через сад. Примечание: вам может потребоваться отрегулировать угол поворота, потому что все Roomba разные.

Использование световых амортизаторов: в другом заявлении if анализируются световые амортизаторы, чтобы убедиться, что ни один из них не превышает установленный нами порог. Если левый, правый, левый центральный, правый центральный, левый передний или правый передний световой бампер поднимется выше порога, Roomba слегка повернется под соответствующим углом, чтобы не удариться о стену. Следовательно, навигация по лабиринту.

Остальная часть кода используется для построения маршрута, пройденного Roomba, а затем отправки результатов на вашу электронную почту.

Шаг 5: скопируйте код

% Цель: в зависимости от своих размеров, Roomba будет проходить через сад и различать овощи / фрукты, готовые к сбору. % Входы: датчики светового удара, датчики обрыва, датчики столкновения, изображение с камеры.% Выходы: всякий раз, когда датчики освещенности превышают пороговое значение, Roomba поворачивается и делает снимок, издает звуковой сигнал, если радиус% овощей / фруктов находится в определенном диапазоне. Код ломается, когда робот-робот врезается в объект, отправляет астронавту электронное письмо о том, сколько фруктов готово для сбора%, и карту движения робота. % Использование: операторы If и while, команды построения графиков, код электронной почты из MATLAB

к = 0

тик

timerVal = тик

пока правда

v =.2; % velocity r.setDriveVelocity (v, v);% roomba вперед L = r.getLightBumpers; LC = L.leftCenter; Rr = L.right; Lf = L. левый; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % порог. РУТ = 30; % Высокий красный порог RTL = 10; % Низкий порог красного B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; если S.leftFront> PL1 || S.rightFront> PL1% определяет, превышает ли цвет на земле пороговое значение. R.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pause в течение 2 секунд img = r.getImage; % take image imshow (img)% display image [center3, radius3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = вязкие окружности (центры3, радиусы3); % ищите круги радиусов w / в указанном диапазоне на изображении, если радиусы3> = r1 T = 1 k = k + 1 dist1 = 0,2. * elapsedTime% Если обнаруженный радиус больше или равен минимальному требованию в% для спелых фруктов, тогда Roomba считает этот фрукт elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2. * elapsedTime% Если нет, то конец фрукта не засчитывается.

if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Если фрукт был обнаружен, отобразите номер на Roomba,% сделайте шум и включите elseif T == 2 r.turnAngle (78)% Если обнаружены 2 плода, поверните, чтобы продолжить через% garden else r.turnAngle (78)% Если плодов не обнаружено, поверните, чтобы продолжить через конец% garden end if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end% Если какое-либо значение световых бамперов превышает пороговое значение, тогда% the Roomba слегка повернется в нужном направлении, чтобы% не ударился об стену

если B.right == 1 || B.left == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Если любой из Бамберса попадают, затем Roomba воспроизводит звук, вращается,% и нарушает код

перерыв конец

конец разброс (0,533, 0, '^') удерживать разброс (0,533, dist1, '<') удерживать разброс (-dist2, dist1, 'v') удерживать разброс (-dist2, 0, 'd') сохранить как (gcf, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123 #' host = 'smtp.gmail.com' port = '465'

setpref ('Интернет', 'E_mail', почта); setpref ('Интернет', 'SMTP_Server', хост) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', почта); props.setProperty ('mail.smtp.host', хост); props.setProperty ('mail.smtp.port', порт); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'истина'); props.setProperty ('mail.smtp.auth', 'истина'); props.setProperty ('mail.smtp.socketFactory.port', порт); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'ложь'); sendmail (mail, 'Здравствуйте, космонавт! В саду столько фруктов', kmsg, {'motion.png'})

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