Компоненты, модули, шаблоны и другие Расширения Joomla

Сумо

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

Не смотря на то, что соревновательная дисциплина "Сумо" большинством организаторов соревнований позиционируется как состязание, предназначенное для начинающих робототехников, она пользуется неизменным вниманием не только участников, но и зрителей! Соревнования проводятся на двух видах полей: либо белый круг, ограниченный черной окружностью, либо, наоборот, черный круг, ограниченный белой окружностью. Очень часто макет поля наносится на круглый подиум небольшой высоты. В этом случае побежденный робот принуждается к падению (бывает, что с подиума падают оба участника битвы).

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

 

 

 

Конструкция робота для соревнования "Сумо". 

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

Соревнование "Сумо"

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

Для того, чтобы защитить впереди расположенный датчик от взаимодействия с соперником, соорудим бампер и закрепим его на нашем роботе. Ниже приведены подробные инструкции для сборки, как из домашней, так и из образовательной версии конструктора Lego mindstorms EV3. Можете поэкспериментировать и придумать собственный вариант конструкции.

Lego mindstorms EV3 Home

Инструкция по сборке для домашней версии конструктора

Lego mindstorms EV3 Education

Инструкция по сборке для образовательной версии конструктора

Получившийся элемент закрепим на передней балке нашего робота.

Lego mindstorms EV3 Home

Размещение на домашней версии набора

Lego mindstorms EV3 Education

Размещение на образовательной версии набора

Наш учебный робот готов. Приступим к созданию программы робота-сумоиста. Замечательно, если у вас есть возможность отлаживать программу, используя ещё одного робота! Если же нет, то ничего страшного: можно задействовать в качестве соперника, например, радиоуправляемую модель автомобиля или те же кегли от "Кегельринга".

Создание программы для соревнования "Сумо".

Первая мысль, которая приходит в голову: использовать программу для "Кегельринга", внеся в неё косметические изменения. Действительно, алгоритмы поведения робота в "Кегельринге" и в "Сумо" очень похожи. Они реализуют поиск объекта и выталкивание его за пределы поля. Можно загрузить в робота-сумоиста программу для "Кегельринга", но работать такой сумоист будет не очень эффективно. Тем не менее, знания, полученные на предыдущем уроке, пригодятся нам сейчас.

Настало время загрузить в среду программирования наш проект "lessons-2", создать в нём новую программу "lesson-12" и подключить робота к среде программирования.

Поведенческую модель робота-сумоиста можно условно разделить на две части: поиск соперника и атака соперника. Сначала займемся реализацией первой части - поиска соперника.

Подробно пропишем последовательность действий нашего робота при обнаружении соперника на поле:

  1. вращаться вокруг своей оси, пока впереди расположенный датчик не обнаружит соперника;
  2. остановиться напротив соперника.

Эта последовательность действий полностью повторяет алгоритм поиска роботом кегли в "Кегельринге", но, так как, расстояние между роботами в "Сумо" может превышать расстояние от робота до кегли, то нам необходимо выбрать другое пороговое значение для используемого датчика.

Установим соперников на поле напротив друг друга, как показано на рисунке ниже.

Соревнование "Сумо". Расположение роботов.

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

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

В нашем случае ультразвуковой датчик в режиме "Расстояние в сантиметрах" показывает значение - 56,1 (Рис. 1 поз. 2). За пороговое значение примем число - 57.

Страница аппаратных средств. Ультразвуковой датчик.

Рис. 1

Инфракрасный датчик в режиме "Приближение" показывает значение - 68 (Рис. 2 поз. 2). За пороговое значение примем число - 70.

Страница аппаратных средств. Инфракрасный датчик.

Рис. 2

По аналогии с "Кегельрингом" мы можем запрограммировать нахождение роботом соперника, только, чтобы немного дистанцироваться от предыдущего урока, изменим направление вращения робота на противоположное:

Ультразвуковой датчик

  1. Для того, чтобы заставить робота вращаться вокруг своей оси, воспользуемся программным блоком "Независимое управление моторами" "Зеленой палитры", Режим работы блока установим "Включить", значение мощности для порта "B" установим равным -30, значение мощности для порта "C" установим равным 30 (Рис. 3 поз.1).
  2. Для поиска соперника используем программный блок "Ожидание" "Оранжевой палитры" в режиме "Ультразвуковой датчик - Сравнение - Расстояние в сантиметрах" с пороговым значением срабатывания датчика, равным 57 (Рис. 3 поз. 2).
  3. После того, как робот окажется напротив соперника, используя программный блок "Независимое управление моторами" "Зеленой палитры" выключим моторы (Рис. 3 поз. 3).

Ультразвуковой датчик. Поиск соперника.

Рис. 3

Инфракрасный датчик

  1. Для того, чтобы заставить робота вращаться вокруг своей оси, воспользуемся программным блоком "Независимое управление моторами" "Зеленой палитры", Режим работы блока установим "Включить", значение мощности для порта "B" установим равным -30, значение мощности для порта "C" установим равным 30 (Рис. 4 поз.1).
  2. Для поиска соперника воспользуемся программным блоком "Ожидание" "Оранжевой палитры" в режиме "Инфракрасный датчик - Сравнение - Приближение", с пороговым значением  срабатывания датчика, равным 70 (Рис. 4 поз. 2).
  3. После того, как робот окажется напротив соперника, используя программный блок "Независимое управление моторами" "Зеленой палитры" выключим моторы (Рис. 4 поз. 3).

Инфракрасный датчик. Поиск соперника.

Рис. 4

На этапе отладки этого алгоритма вам придется, подбирая значения "Мощность" моторов "B" и "C" а также пороговое значение датчика, добиться от вашего робота точного обнаружения и остановки строго напротив соперника. Только после этого можно будет переходить к программной реализации алгоритма атаки.

Если поиск соперника в "Сумо" очень похож на поиск кегли в "Кегельринге", то выталкивание соперника имеет важное отличие! Начиная атаку, первое, что необходимо сделать, это прямолинейно устремиться на максимальной мощности моторов в сторону обнаруженного соперника, проверяя датчиком цвета обнаружение границы ринга. Но ведь наш соперник тоже может двигаться! Поэтому вполне возможна ситуация, когда соперник выйдет в сторону из-под направления нашей атаки. В этом случае, наш робот, промахнувшись, будет двигаться в сторону границы ринга, теряя соперника и драгоценное время.

"Сумо" атака соперника

Следовательно, нам необходимо во время прямолинейного движения вперед анализировать оба датчика и прекращать атаку в случае, если робот потеряет соперника ИЛИ робот достигнет границы ринга. Поэтому нам необходимо отказаться от использования программного блока "Ожидание" "Оранжевой палитры" и самостоятельно в цикле получать и обрабатывать показания двух датчиков.

Приступим к поэтапной реализации алгоритма атаки соперника: для этого создадим в проекте временную программу "lesson-12-1" и начнем её наполнение программными блоками.

  1. Возьмем программный блок "Цикл" "Оранжевой палитры".
  2. Внутрь блока "Цикл" поместим программный блок "Независимое управление моторами" "Зеленой палитры". Режим работы блока установим в значение "Включить" (Рис. 5 поз. 1), мощности моторов "B" и "C" установим в максимальное значение - 100 (Рис. 5 поз. 2).

Алгоритм "Атака соперника". Этап 1 - 2.

Рис. 5

  1. Следом за блоком "Независимое управление моторами" поместим программный блок "Датчик цвета" "Желтой палитры". Режим работы блока установим в значение "Сравнение - Яркость отраженного света" (Рис. 6)

 Алгоритм "Атака соперника". Этап 3.

Рис. 6

В этом режиме программный блок "Датчик цвета" "Желтой палитры" визуально очень похож на программный блок "Ожидание" "Оранжевой палитры" в режиме "Датчик цвета - Сравнение - Яркость отраженного света". Но, в отличие от блока "Ожидание", этот программный блок не ждет выполнения условия, указанного параметрами "Тип сравнения" (Рис. 7 поз. 1) и "Пороговое значение" (Рис. 7 поз. 2), а сразу выдает логическое значение ("Истина" или "Ложь") в выходном параметре "Результат сравнения" (Рис. 7 поз. 3) и измеренное значение - в выходном параметре "Освещение" (Рис. 7 поз. 4).

Параметры "Тип сравнения" и "Пороговое значение" на Рис. 7 поз. 1, 2 установим таким образом, чтобы выходной параметр "Результат сравнения" (Рис. 7 поз. 3) выдавал логическое значение "Истина" при пересечении датчиком цвета черной границы ринга.

Алгоритм "Атака соперника". Этап 3.

Рис. 7

  1. В случае использования ультразвукового датчика за блоком "Датчик цвета" установим программный блок "Ультразвуковой датчик" "Желтой палитры". Режим работы блока установим в значение "Сравнение - Расстояние в сантиметрах" (Рис. 8 поз. 1). Параметр "Тип сравнения" (Рис. 8 поз. 2), параметр "Пороговое значение" (Рис. 8 поз. 3) установим таким образом, чтобы выходной параметр "Результат сравнения" (Рис. 8 поз. 4) выдавал логическое значение "Истина" в случае потери из виду роботом соперника.

Алгоритм "Атака соперника". Этап 3.

Рис. 8

В случае использования инфракрасного датчика за блоком "Датчик цвета" установим программный блок "Инфракрасный датчик" "Желтой палитры". Режим работы блока установим в значение "Сравнение - Приближение" (Рис. 9 поз. 1). Параметр "Тип сравнения" (Рис. 9 поз. 2), параметр "Пороговое значение" (Рис. 9 поз. 3) установим таким образом, чтобы выходной параметр "Результат сравнения" (Рис. 9 поз. 4) выдавал логическое значение "Истина" в случае потери из виду роботом соперника.

Алгоритм "Атака соперника". Этап 4.Рис. 9

Давайте ещё раз проанализируем промежуточный код нашего алгоритма атаки: мы включили моторы на максимальную мощность и движемся вперед, постоянно в цикле опрашивая датчики. Если наш робот пересечет черную линию границы ринга, то значение выходного параметра "Результат сравнения" "Датчика цвета" примет значение "Истина". Если наш робот потеряет соперника, то значение выходного параметра "Результат сравнения" датчика, следящего за соперником, также примет значение "Истина". В любом из этих случаев нам следует прекратить атаку, завершив наш цикл. В этом нам поможет программный блок "Логические операции" "Красной палитры". Познакомимся с этим блоком подробнее: программный блок "Логические операции" предназначен для выполнения операций над логическими данными (Рис. 10).

Программный блок "Логические операции"

Рис. 10

Выбранный режим программного блока "Логические операции" "Красной палитры" определяет одну из четырех операций над логическими данными: "И (AND)", "ИЛИ (OR)", "Исключающее ИЛИ" и "Исключение (NOT)". Два входных параметра "a" и "b" (для операции "Исключение (NOT)" - один входной параметр "a") передают в программный блок входные значения, а результирующее значение выдается выходным параметром "Результат". Если вы ранее не сталкивались с логическими операциями, то можете ознакомиться с базовыми знаниями в прилагаемой справке под спойлером.

 

Логические операции

 

  1. За программным блоком "Ультразвуковой датчик" или "Инфракрасный датчик" поместим программный блок "Логические операции" "Красной палитры"
  • Выходной параметр "Результат сравнения" программного блока "Датчик цвета" (Рис. 11, 12 поз. 1) соединим с входным параметром "a" программного блока "Логические операции" (Рис. 11, 12 поз. 4).
  • Выходной параметр "Результат сравнения" программного блока "Ультразвуковой (инфракрасный) датчик" (Рис. 11, 12 поз. 2) соединим с входным параметром "b" программного блока "Логические операции" (Рис. 11, 12 поз. 5).
  • Режим работы программного блока "Логические операции" установим в "ИЛИ (OR)" (Рис. 11, 12 поз. 3). В этом случае результат выполнения логической операции будет принимать значение "Истина", только если будет выполнено одно из условий: датчик цвета пересёк черную линию, робот потерял соперника. 
  • Установив режим программного блока "Цикл" в значение "Логическое значение" (Рис. 11, 12 поз. 7), выходной параметр "Результат" программного блока "Логические операции" (Рис. 11, 12 поз. 6) соединим с входным параметром "Пока не будет истина" программного блока "Цикл" (Рис. 11, 12 поз. 8). Данные настройки завершат выполнение цикла при "Истинном" результате выполнения логической операции.

Алгоритм "Атака соперника". Этап 5.Рис. 11

Алгоритм "Атака соперника". Этап 5. (Нажмите для увеличения)

Рис. 12

Давайте протестируем получившийся алгоритм атаки! Для этого поместим нашего робота внутрь ринга, напротив установим неподвижного соперника и запустим программу атаки на выполнение. Наш робот должен уверенно вытолкать соперника за пределы ринга и остановиться над черной границей поля. Получилось? Значит наш сумоист верно контролирует границу ринга.

Проведем второй эксперимент: снова установим напротив робота неподвижного соперника и запустим программу атаки. Когда наш робот устремится к сопернику и приблизится достаточно близко, резко уберём соперника в сторону. Наш робот должен, потеряв соперника, остановиться.

Подведем итог: мы реализовали алгоритм поиска соперника и успешно его протестировали, также прошел проверку алгоритм атаки.

Законченная программа сумоиста должна в бесконечном цикле выполнять последовательно поиск соперника, а затем - атаку соперника. Можно было бы уже объединить обе части нашей программы, если бы не одно маленькое дополнение. Если наш робот остановился над границей ринга, то перед тем, как начать поиск, роботу следует, отъехав немного назад, вернуться внутрь ринга. Дополним нашу программу атаки следующим кодом: за пределами цикла атаки, воспользуемся программным блоком "Переключатель" "Оранжевой палитры". Режим работы блока "Переключатель" установим в "Датчик цвета - Сравнение - Яркость отраженного света". Параметры "Тип сравнения" и "Пороговое значение" установим аналогично ранее используемым в программном блоке "Датчик цвета" "Желтой палитры". Следовательно, если наш робот остановился над черной линией, то выполнение будет передано верхнему контейнеру программного блока "Переключатель". Именно в верхний контейнер поместим программный блок "Рулевое управление" "Зеленой палитры", с настройками параметров, заставляющими робота отъехать назад на один оборот моторов. В нижний контейнер программного блока "Переключатель" поместим программный блок, выключающий моторы (Рис. 13). Повторно протестировав алгоритм атаки, убедимся, что после того, как робот-сумоист вытолкал соперника за пределы ринга, он вернулся немного назад.

Отъезд

Рис. 13

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

 

Программа робота-сумоиста

 

Программа робота-сумоиста

 

Заключение:

Программа, которую мы разобрали с вами на этом уроке, реализует только один прямой силовой алгоритм поведения робота-сумоиста. Она подразумевает, что в прямом силовом противостоянии робот должен непременно одолеть своего соперника. Но наш учебный робот, конечно же, совсем не похож на мускулистого борца-сумо. Для того, чтобы уверенно выступить в этом состязании, необходимо уделить самое пристальное внимание в первую очередь конструкции робота, создать прочную, защищенную платформу, с помощью дополнительных ведущих колес или гусениц повысить сцепление с поверхностью ринга. На популярном видеохостинге Youtube.com по запросу "сумо lego роботов" можно найти множество видеороликов с реальных соревнований роботов, из которых вы непременно почерпнёте для себя интересные идеи для реализации в собственных конструкциях.

Главная же цель этого урока - на практическом примере показать вам метод непрерывной обработки показаний от пары датчиков. Можно ли усовершенствовать нашу программу? Безусловно! Например, используя программный блок "Случайное значение" "Красной палитры", изменить алгоритм поиска соперника таким образом, чтобы задавать случайное вращение робота влево или вправо, тем самым, дезориентируя соперника. Попробуйте самостоятельно встроить в нашу программу этот дополнительный код. Подумайте так же над тем, какие изменения нужно внести в прорамму, в случае проведения соревнования на черном ринге с белой границей. Возможно, что у вас появятся собственные идеи улучшения: поделитесь ими в комментариях к уроку!

Кегельринг

 

Правила соревнования. Подготовка поля для проведения соревнований. 

Основные правила "Кегельринга" довольно просты: необходимо собрать и запрограммировать робота, который выталкивает кегли за пределы ринга. Кеглями, как правило, выступают жестяные банки емкостью 0,33 л, а роль ринга выполняет белое поле, ограниченное черной окружностью с шириной линии 50 мм. С одним из вариантов регламента проведения соревнования можете ознакомиться под спойлером ниже:

 

Регламент соревнований роботов "Кегельринг" по версии сайта myROBOT.ru 

 

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

Жестяные банки лучше всего обклеить по периметру самоклеящейся бумагой (нам понадобятся 2 - 4 банки белого цвета и столько же - черного).

Реквизит для урока готов!

Конструирование робота для конкретного вида соревнования.

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

Наступает важный этап моделирования робота - перед нами стоят две взаимосвязанных задачи:

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

Рассмотрим следующую поведенческую модель:

  1. Робот, находясь в центре поля, начинает вращаться по часовой стрелке, пока не заметит кеглю.Робот вращается по часовой стрелке
  2. Двигаясь в направлении кегли, робот выталкивает её за пределы окружности.Робот выталкивает кеглю
  3. Заметив черную границу поля, робот возвращается назад, в место старта.Робот возвращается назад

Следовательно, наш робот должен:

  1. уметь вращаться на месте вокруг своей оси;
  2. уметь двигаться прямолинейно;
  3. уметь обнаруживать предмет, удаленный на некоторое расстояние;
  4. уметь обнаруживать границу поля.

Данные требования диктуют нам условия конструкции робота:

  1. для реализации первых двух условий применим уже известную нам подвижную платформу, использующую два больших мотора и вращающуюся опору (робот-тележка);
  2. для обнаружения кегли воспользуемся одним из имеющихся в наличии датчиков: инфракрасным или ультразвуковым;
  3. границу поля нам поможет обнаружить датчик цвета.

 

Lego mindstorms EV3 Home

small robot 31313

Lego mindstorms EV3 Education

small robot 45544

Вы можете воспользоваться предложенной инструкцией или собрать собственного робота, отвечающего определенным нами требованиям к его конструкции. В процессе сборки конструкции не забудьте подключить моторы и датчики к модулю EV3: левый мотор  - к порту "B", правый мотор - к порту "C", ультразвуковой или инфракрасный датчик - к порту "2", датчик цвета - к порту "3".

После сборки робота приступим к созданию программы.

Создание программы для соревнования "Кегельринг".

Подробно пропишем последовательность действий нашего робота для обнаружения одной кегли на поле:

  1. вращаться вокруг своей оси по часовой стрелке, пока впереди расположенный датчик не обнаружит кеглю;
  2. остановиться напротив кегли;
  3. двигаться вперед, пока датчик цвета не обнаружит черную границу поля;
  4. остановиться;
  5. двигаться назад в центр поля.

Приступим к реализации и отладке п. 1, 2 - научим нашего робота обнаруживать кеглю и останавливаться точно напротив. Сначала нам необходимо выбрать пороговое значение для обнаружения кегли напротив нашего робота. Для этого загрузим среду программирования, создадим новый проект - "lessons-2", новую программу в проекте назовем "lesson-11". Подключим робота к среде программирования, затем установим его точно в центр поля, поставим напротив робота кеглю.

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

В нашем случае ультразвуковой датчик в режиме "Расстояние в сантиметрах" показывает значение - 25,9 (Рис. 1 поз. 2).

Страница аппаратных средств. Ультразвуковой датчик.

Рис. 1

Инфракрасный датчик в режиме "Приближение" показывает значение - 48 (Рис. 2 поз. 2)

Страница аппаратных средств. Инфракрасный датчик.

Рис. 2

 

Как определить показания датчика, используя дисплей модуля EV3

 

Теперь мы можем запрограммировать нахождение роботом кегли:

Ультразвуковой датчик

  1. Для того, чтобы заставить робота вращаться вокруг своей оси, воспользуемся программным блоком "Независимое управление моторами" "Зеленой палитры", Режим работы блока установим "Включить", значение мощности для порта "B" установим равным 30, значение мощности для порта "C" установим равным -30 (Рис. 5 поз.1),
  2. Для поиска кегли используем программный блок "Ожидание" "Оранжевой палитры" в режиме "Ультразвуковой датчик - Сравнение - Расстояние в сантиметрах". Для гарантированного нахождения увеличим пороговое значение срабатывания датчика до 35 (Рис. 5 поз. 2)
  3. После того, как робот окажется напротив кегли, используя программный блок "Независимое управление моторами" "Зеленой палитры" выключим моторы (Рис. 5 поз. 3).

 Поиск кегли роботом с ультразвуковым датчиком

Рис. 5

Инфракрасный датчик

  1. Для того, чтобы заставить робота вращаться вокруг своей оси, воспользуемся программным блоком "Независимое управление моторами" "Зеленой палитры", Режим работы блока установим "Включить", значение мощности для порта "B" установим равным 30, значение мощности для порта "C" установим равным -30 (Рис. 6 поз.1),
  2. Для поиска кегли воспользуемся программным блоком "Ожидание" "Оранжевой палитры" в режиме "Инфракрасный датчик - Сравнение - Приближение". Для гарантированного нахождения увеличим пороговое значение срабатывания датчика до 55 (Рис. 6 поз. 2)
  3. После того, как робот окажется напротив кегли, используя программный блок "Независимое управление моторами" "Зеленой палитры" выключим моторы (Рис. 6 поз. 3).

Поиск кегли роботом с инфракрасным датчиком

Рис. 6

Загрузим получившуюся программу в робота и запустим её на выполнение. Раз за разом, выполняя программу, мы можем заметить, что наш робот останавливается не совсем точно напротив банки. Связано это с тем, что датчик может обнаруживать предмет не только строго напротив себя, а и на некотором отклонении от направления взгляда датчика. В этом случае можно, либо после остановки робота немного довернуть его на необходимый угол, используя дополнительный блок "Независимое управление моторами", либо постепенно увеличивать скорость вращения, подбирая параметр мощность (Рис. 5, 6 поз. 1), пока робот не станет останавливаться точно напротив кегли. Например, нам потребовалось увеличить мощность до 50 единиц для робота, собранного из образовательной версии набора, и до 40 единиц для робота, собранного из домашней версии набора.

Переходим к реализации п. 3, 4 нашей последовательности действий.

Установим робота таким образом, чтобы датчик цвета находился точно над черной границей поля и измерим его значение в режиме "Яркость отраженного света" любым удобным вам способом, рассмотренным выше. В нашем случае получилось значение, равное 7. В качестве порогового значение примем число 10

Добавим к нашей программе обнаружения кегли следующие программные блоки:

  1. Для того, чтобы заставить робота двигаться прямолинейно, воспользуемся программным блоком "Рулевое управление" "Зеленой палитры". Режим работы блока установим "Включить", параметр "Рулевое управление " = 0, параметр "Мощность" = 50(Рис. 7 поз. 1)
  2. Для поиска датчиком цвета черной границы воспользуемся программным блоком "Ожидание" "Оранжевой палитры" в режиме "Датчик цвета - Сравнение - Яркость отраженного сигнала", параметр "Тип сравнения" = 4, параметр "Пороговое значение" = 10(Рис. 7 поз. 2)
  3. После того, как робот пересечет черную линию, используя программный блок "Рулевое управление""Зеленой палитры" выключим моторы (Рис. 7 поз. 3).

Движение робота вперед до черной линии

Рис. 7

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

Lego mindstorms EV3 Home

small robot 31313

Lego mindstorms EV3 Education

small robot 45544

 Теперь наш робот просто отлично справляется со своей работой! Осталось только научить его возвращаться в центр круга...

"Страница аппаратных средств" среды программирования позволяет нам наблюдать не только текущие показания датчиков, но и накопленные показания датчика вращения мотора (Рис. 8 поз. 1). Нажав, на значок мотора, мы можем установить предпочтительный нам вывод информации о вращении мотора в "Оборотах" или "Градусах" (Рис. 8 поз. 2).

Страница аппаратных средств. Датчик вращения мотора.

Рис. 8

Программный блок "Вращение мотора" "Желтой палитры" позволяет получать и обрабатывать это значение в программе. Режим "Сброс" программного блока "Вращение мотора" устанавливает нулевое значение датчика и отсчет оборотов начинается сначала. (Рис. 9)

Программный блок "Вращение мотора"

Рис. 9

Воспользуемся этой возможностью: если мы сбросим показание одного из датчиков моторов в 0 (в данном случае можно обнулить значение любого из моторов "B" и "C", ведь робот поедет прямо, а значит оба колеса провернутся на одинаковое значение), то после остановки робота над черной линией, можно будет получить значение датчика в "Градусах" или "Оборотах" и, подав его на вход соответствующего параметра блока "Рулевое управление", заставить робота проехать точно такое же расстояние. А для того, чтобы робот двигался назад, необходимо изменить значение параметра "Мощность" на отрицательное значение.

Внесем необходимые изменения в нашу программу:

  1. Перед началом движения вперед сбросим в 0 показания датчика вращения мотора, подключенного к порту "B" (Рис. 10 поз. 1).
  2. После остановки на черной границе поля считаем расстояние, пройденное мотором "B" в градусах (Рис. 10 поз. 1).
  3. Полученное значение подадим в параметр "Градусы" программного блока "Рулевое управление", значение параметра "Мощность" = -50 (Рис. 10 поз. 1)!

Движение вперед. Возвращение в центр поля.

Рис. 10

Загрузим получившуюся программу в робота и убедимся, что робот нашел кеглю, вытолкал её за пределы поля и вернулся в центр поля!

Для того, чтобы заставить нашего робота выталкивать требуемое количество кеглей, все наши программные блоки поместим внутрь программного блока "Цикл" "Оранжевой палитры". Режим программного блока "Цикл" установим в значение "Подсчет", параметр "Подсчет" установим равным количеству кеглей (Рис. 11, 12 поз. 1) Для удобства отображения на экране нам пришлось оформить программу в две строки - вы же вполне можете сложить её в одну строку. 

Программа для робота small-robot 31313

Рис. 11

Программа для робота small-robot 45544

Рис. 12

Программа готова!

Соревнование "Кегельринг" с дополнительм условием

На сайте myROBOT.ru опубликованы еще два регламента проведения соревнования "Кегельринг": "Кегельринг-КВАДРО" и "Кегельринг-МАКРО". Основное условие - необходимо выталкивать за пределы поля белые кегли, оставляя на месте черные. 

Как научить робота на расстоянии определять цвет кегли? Можно впереди, по ходу движения робота расположить еще один датчик цвета и, приблизившись к кегле на расстояние 1 - 2 см, определить её цвет, теряя при этом драгоценное время, отведенное на выполнение задания. Проведем эксперимент: установим робота с инфракрасным датчиком в центр поля, напротив поместим белую кеглю и зафиксируем показания датчика. В нашем случае это значение равно 49. Теперь напротив робота установим черную кеглю - показание датчика изменилось и теперь, не смотря на одинаковое расстояние, составляет 64. Следовательно, для успешного обнаружения белых кеглей и игнорирования черных, необходимо выбрать в качестве порогового - значение, находящееся между этими числами. Число 55 полностью удовлетворяет этому условию. Нам даже не придется переделывать основной алгоритм программы! Попробуйте и убедитесь в этом сами!

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

Заключение:

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