Программа для робота сумоиста

Программа для робота сумоиста

Пахомов Максим Семенович, учитель математики и информатики

МБОУ « АМ Саха-Бельгийская гимназия », с.Ке птени , Усть-Алданский райо н , Республики Саха(Якутия)

Программирование робота «Сумо» конструктора LEGO на базе MINDSTORMSEV 3

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

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

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

В частности мы рассмотрим программу, составленную для соревнования лего робота к категории «Сумо».

Цель: Научить учащихся к самостоятельному программированию робота сумоиста, с минимальным применением датчиков: датчика света и инфракрасного датчика для дальнейшего участия в конкурсе «Робото-Сумо».

Задача работы: Ознакомить учащихся с самым простым способом программирования робота сумо.

Новизна: По новым требованиям ФГОС нового поколения введены новые направления в дополнительном образовании. Направление «Робототехника» представляет собой конструирование и программирование робота, т.е. развивает малую моторику, технические навыки у учащихся, а также укрепляет межпредметную связь.

Данная работа представляет собой краткую инструкцию программирования робота. В соревнованиях побеждает тот, кто выталкивает робота соперника за черный круг. Конструирование данного робота ссылается на сборку стандартного гусеничного робота по инструкции LEGOMINDSTORMSEV 3 с дополнительным применением датчика света, для определения границы поля, и инфракрасного датчика, для определения цели и направления движения.

По регламенту соревнования роботы должны находиться внутри круга с диаметром 100 см с черной границей в 2 см, в середине круга расположены две линии старта, после сигнала они должны стоять на линии в течение 5 секунд, только потом начинать движения, поэтому необходимо использовать оператор времени, настроив его на время.

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

Во избежание того, что робот пройдет мимо (в случае, когда используется прямое движение) используем оператор «цикл» с использованием независимое управления моторами для поворота на месте.

Настроим его так, чтобы двигатель A двигался c максимальной скоростью вперед, а двигатель B c максимальной скоростью назад. Тем самым независимое управление моторами даст роботу поворачиваться на одной оси.

Во избежание того, что робот будет стоять и кружиться на одном месте в операторе цикл используем инфракрасный датчик для определения цели, настроив егок порту 1 на «Приближение» меньше или равно 50 см, так как роботы будут стоять в центре круга с диаметром 1м.

Таким образом, максимальная расстояние между нами не будет превышать 100 см, так как линия старта будет в середине поля, то расстояние между роботами будет меньше 50 см.

Далее, как только датчик расстояния заметит перед собой цель, программа переключается на независимое управление моторами, движением вперед моторами A и B . Для этого просто включим оператор управления с независимыми моторами присоединённых к порту A и B , на движение вперед. Тем самым обеспечив роботу движение вперед.

Читайте также:  Меч демона готика 3

Прямое движение робота рано или поздно приведет его к черной линии, во избежание выхода из границы (поля сражения) используем датчик цвета. Настроим датчик для определения черного цвета к порту 2.

Для этого настраиваем его на определение черного цвета, как только датчик дойдет до черной линии включается мотор с движением назад (настроим независимые двигатели движения назад в течение 1 секунды) и автоматически останавливается.

После того как настроим все порты к моторам и к датчикам наша программа для соревнования сумо-роботов целиком будет иметь следующий вид с применением 2 моторов и датчика света с инфракрасным датчиком

Список использованной литературы:

1. Инструкция по сборке робота TRACK 3 R 01 Прицельное измельщение С.1-17.

Онлайн-книга по созданию робота минисумо на базе Ардуино

«Тело» нашего сумо-робота готово и отдельные его компоненты «мозг» — микроконтроллерная плата, «глаза» — сенсоры расстояния и черного/белого, «сильные ноги» — двигатели и драйвер управления ими, «кровь и регулятор давления крови» — батарея и преобразователь напряжения DC-DC, «кровеносная система» — провода и макетные платы, скелет – база, отвал, бампер, крепежные элементы – нормально функционируют.

Функционируют отдельно друг от друга.

Что сделает робота «человеком»?

Безусловно, в человеческом понимании этого сложного философского понятия. J

Этим Замыслом будет программа действий робота в «мире» робота – на ринге (дохё) для соревнований роботов-сумо.

Что он должен будет сделать в краткий миг своего «просыпания» на поле боя перед новым «сном» после выключения кнопки питания – все зависит от Вас – вашей Идеи, воплощенной в программу действий робота.

Чем более точно Вы продумали поведение робота – тем более он будет успешен в своей «жизни». Какие «знания» вы ему дали, чему Вы его обучили – только это он постарается воплотить в жизнь.

От лирики перейдем к практике. J

Давайте начнем с простого замысла – Вашему роботу надо будет просто «в лоб» вытолкнуть соперника с ринга сразу после старта поединка.

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

Начнем разбираться. По правилам проведения поединков RobotChallenge.org сумо роботы устанавливаются в пределах указанной при жеребьевке четверти ринга задней частью робота по направлению друг к другу.

Обратите внимание на правила боя – это фактически «законы физики» для робота. Их нельзя нарушать.

Итак, что должен наш сумо-робот сделать при такой расстановке (предположим он стоит в левой нижней четверти ринга)?

  1. Сразу после старта поединка повернуться направо примерно на 135 градусов
  2. Увидеть соперника передним датчиком расстояния.
  3. Если увидел, то начать движение на него и вытолкнуть с ринга.

Для простоты сейчас не рассматриваем случаи, когда расстановка роботов отличается от вышеприведенной (другие четверти ринга, роботы ближе или дальше друг от друга).

С пунктом номер один все примерно понятно. Крутим левый двигатель вперед, правый одновременно назад. Время работы двигателей экспериментально подбираем так, чтобы робот повернулся примерно на 135 градусов.

Второй пункт с задачей увидеть соперника давайте разбирать подробнее. Первое – на каком расстоянии будем искать соперника? Помним, что ринг для минисумо имеет диаметр 77 сантиметров и выбранные нами датчики отлично измеряют расстояние от 10 до 50 сантиметров. Итак вывод простой – с учетом расстановки роботов противника лучше искать на расстоянии до 30 сантиметров от себя – будет меньше ошибок поиска.

Читайте также:  Драйвер для usb irda

Третий пункт также непрост. Итак – нашли и выталкиваем соперника – с этим все понятно. А если не увидели его на этом месте (он начал движение и ушел на другую позицию пока мы поворачивали робота предположим) – что будем делать? Давайте попробуем повернуться направо на небольшой угол и еще раз поискать соперника. Все эти действия будем делать если датчики черного/белого не выехали на белое поле.

Создадим блок схему программы поведения робота:

Начало программы – момент, когда Вы включили питание робота.

Ожидание 5 секунд – для того, чтобы вы с соперником смогли отойти от ринга перед началом действий робота. В професссиональных соревнованиях роботы включаются по команде с пульта судьей с использованием специального стартового модуля.

Затем начинаем исполнять логику, которую с Вами разобрали чуть ранее. На блок схеме желтый ромб означает оператор условия (if(условияе)<если условие выполнено>else<если условие не выполнено>), прямоугольник – оператор исполнения.

Обратите внимание – робот едет вперед при обнаружении противника 0.1 секунды, затем проверяет – не выкатился ли за пределы ринга и затем опять идет на оператор проверки – видит ли фронтальный датчик соперника.

Также обратим внимание, что робот будет искать соперников до момента его выключения кнопкой (переключателем) – из постоянного цикла нет программного выхода.

Итак, соберем программно нашего робота в единое целое – глаза, моторы и задуманное блок схемой поведение.

//Скетч для простого выталкивания соперника с ринга

//робот сразу после старта поворачивает на 135 градусов

//и если не находит соперника, то крутится направо

//определяем соответствие контактов микроконтролера

//и контакам драйвера двигателей TB6612FNG

//включаем «глаза» для поиска соперника

//объявляем переменные, содержащие значения

//аналоговых портов микроконтроллера, подключаемых

//к ИК датчикам Sharp

int front_eye = A0;

int left_eye = A1;

int right_eye = A8;

//включем «глаза» для определения, на ринге мы находимся

//или выехали за него

//объявляем переменные, содержащие значения

//аналоговых портов, подключенных к датчикам

int left_bw = A6;

int right_bw = A11;

//процедура инициации портов

//инициируем переменные моторов

// делаем повопрот на 135 градусов

//левый мотор по направлению движения робота

//(против часовой стрелки)

//Правый мотор против направления движения робота

//(против часовой стрелки)

delay(100); // длительность задержки определяет

//угол поворота робота

//и подбирается экспериментально в зависимости

//от веса робота, моторов и колес

//проверяем наличие препятствия фронтальным датчиком

//на расстоянии ближе 40 см

//(значение analogRead() — 333 по таблице)

//левый мотор по направлению движения робота

//(против часовой стрелки)

//Правый мотор по направления движения робота

//(по часовой стрелке)

delay(100); // длительность задержки 0.1 секунда

else if(analogRead(left_eye) > 333)

//не найден спереди то проверяем слева

//если соперник слева найден поворачиваем налево

//левый мотор против направлению движения

//робота (по часовой стрелки)

//Правый мотор по направлению движения

//робота (по часовой стрелки)

delay(60); // длительность задержки

//определяет угол поворота робота

//и подбирается экспериментально в

//зависимости от веса робота, моторов и колес

else if(analogRead(right_eye) > 333)

//соперник не найден спереди и слева то проверяем справа

//если соперник справа найден поворачиваем

//направо на 90 градусов

//левый мотор по направлению движения робота

//(против часовой стрелки)

//Правый мотор против направления движения робота

//(против часовой стрелки)

delay(30); // длительность задержки определяет

//угол поворота робота

//и подбирается экспериментально в зависимости

//от веса робота, моторов и колес

//и справа то поворачиваем направо на 5 градусов

//левый мотор по направлению движения робота

Читайте также:  116 324 Ошибка xerox

//(против часовой стрелки)

//Правый мотор против направления движения

//робота (ппротив часовой стрелки)

delay(10); // длительность задержки определяет

//угол поворота робота

//и подбирается экспериментально в зависимости

//от веса робота, моторов и колес

//проверяем что робот не выскочил за пределы ринга

//оба датчика на черном поле

if((analogRead(left_bw) > 400)&&(analogRead(right_bw) > 400))<

//ничего не делаем

else // выехали на белое поле одним или обоими датчиками

//Отъезжаем на 5 сантиметров

//левый мотор против направления движения робота

//(по часовой стрелки)

//Правый мотор против направления движения робота

//(против часовой стрелки)

delay(100); // длительность задержки определяет

//расстояние отъезда назад

//и подбирается экспериментально в зависимости

//от веса робота, моторов и колес

// разворачиваемся на 180 градусов в правую сторону

//левый мотор по направлению движения робота

//(против часовой стрелки)

//Правый мотор против направления движения робота

//(против часовой стрелки)

delay(130); // длительность задержки определяет

//угол поворота робота

//и подбирается экспериментально в зависимости

//от веса робота, моторов и колес

//конец цикла loop — идем на начало цикла и проверяем расстояние спереди

Все операторы в данном скетче нами уже изучались, поэтому трудностей в его понимании, надеюсь, не возникнет.

Приведем фотографии, сделанные из видеозаписи поединка с неподвижным соперником, с использованием данной программы поведения робота.

Робот начинаем поворачиваться на 135 градусов направо (красная черта – начало отсчета, белая черта – текущее положение).

Обнаружен соперник. Движение вперед.

Соперник утерян из вида при движении вперед.

Начало движения направо.

Продолжение движения направо.

При продолжении движения направо соперник найден левым ИК датчиком (желтая линия).

Разворот налево на 90 градусов.

Соперник обнаружен передним ИК датчиком.

Движемся вперед к сопернику.

Врезаемся в него.

Вопросы для проверки:

  1. Программа действий робота. Почему важно продумать все ньюансы программы?
  2. Правила боев роботов сумо. Какие важные детали Вы запомнили?
  3. Блок схема программы. Какие элементы блок схем Вы знаете? Удобно ли Вам использовать блок схему для отработки программы действий робота?
  4. Подумайте, как можно оптимизировать скетч? Какие одинаковые блоки операторов в программе Вы увидели?

Сумо — одно из самых увлекательных соревнований роботов Лего Ev3 . В данном соревновании робот должен вытолкнуть робота противника за круг при этом самому не выехать за границу круга.

В самом начале соревнования роботы ставятся в центр круга, после страта программы запускаются и роботы должны подождать 3 секунды, после этого роботы должны доехать до границы круга и только потом они имеют возможность атаковать противника. На портале приведены схемы роботов для лего сумо Мощный сумо робот и инструкция по сборке Полноприводный сумо робот лего

Опишем алгоритм и программу Сумо для робота EV3

Робот ждёт 3 секунды, отъезжаем от центра круга до границы, едем вперёд, крутимся, ищем врага, едем до врага, если едем от границы то отъезжаем назад.

Ставим ожидание на 3 секунды.

2 Действие. Отъезжаем назад, до границы.

3 действие. После того как робот отъехал до границы он должен выдвинуться вперед . Движение вперёд.

4 Действие. Ставим бесконечный цикл. Робот будет атаковать врага, пока его не вытолкнет или пока не закончится время соревнования.

в него ставим цикл вращение c ультразвуковым датчиком. (можно использовать и инфракрасный датчик)

5 Действие. Едем вперёд до тех пор, пока датчик цвета не увидит чёрную линию, границу круга.

6 . Действие После того как увидели границу мы отъезжаем назад.

Напишите отъезд назад сами, используя урок 1.Движение и повороты EV3

Вернуться к содержанию Перейти к уроку Движение по черной линии с одним датчиком

Ссылка на основную публикацию
Adblock
detector