Квант
ROB-26405Первая мысль, которая приходит в голову: использовать программу для "Кегельринга", внеся в неё косметические изменения. Действительно, алгоритмы поведения робота в "Кегельринге" и в "Сумо"очень похожи. Они реализуют поиск объекта и выталкивание его за пределы поля. Можно загрузить в робота-сумоиста программу для "Кегельринга", но работать такой сумоист будет не очень эффективно. Тем не менее, знания, полученные на предыдущем уроке, пригодятся нам сейчас.
Настало время загрузить в среду программирования наш проект "lessons-2", создать в нём новую программу "lesson-12" и подключить робота к среде программирования.
Поведенческую модель робота-сумоиста можно условно разделить на две части: поиск соперника и атака соперника. Сначала займемся реализацией первой части - поиска соперника.
Подробно пропишем последовательность действий нашего робота при обнаружении соперника на поле:
- вращаться вокруг своей оси, пока впереди расположенный датчик не обнаружит соперника;
- остановиться напротив соперника.
Эта последовательность действий полностью повторяет алгоритм поиска роботом кегли в "Кегельринге", но, так как, расстояние между роботами в "Сумо" может превышать расстояние от робота до кегли, то нам необходимо выбрать другое пороговое значение для используемого датчика.
Установим соперников на поле напротив друг друга, как показано на рисунке ниже. На этапе отладки этого алгоритма вам придется, подбирая значения "Мощность" моторов "B" и "C" а также пороговое значение датчика, добиться от вашего робота точного обнаружения и остановки строго напротив соперника. Только после этого можно будет переходить к программной реализации алгоритма атаки.
Если поиск соперника в "Сумо" очень похож на поиск кегли в "Кегельринге", то выталкивание соперника имеет важное отличие! Начиная атаку, первое, что необходимо сделать, это прямолинейно устремиться на максимальной мощности моторов в сторону обнаруженного соперника, проверяя датчиком цвета обнаружение границы ринга. Но ведь наш соперник тоже может двигаться! Поэтому вполне возможна ситуация, когда соперник выйдет в сторону из-под направления нашей атаки. В этом случае, наш робот, промахнувшись, будет двигаться в сторону границы ринга, теряя соперника и драгоценное время. Следовательно, нам необходимо во время прямолинейного движения вперед анализировать оба датчика и прекращать атаку в случае, если робот потеряет соперника ИЛИ робот достигнет границы ринга. Поэтому нам необходимо отказаться от использования программного блока "Ожидание" "Оранжевой палитры" и самостоятельно в цикле получать и обрабатывать показания двух датчиков.
Приступим к поэтапной реализации алгоритма атаки соперника: для этого создадим в проекте временную программу "lesson-12-1" и начнем её наполнение программными блоками.
- Возьмем программный блок "Цикл" "Оранжевой палитры".
- Внутрь блока "Цикл" поместим программный блок "Независимое управление моторами" "Зеленой палитры". Режим работы блока установим в значение "Включить" (Рис. 5 поз. 1), мощности моторов "B" и "C" установим в максимальное значение - 100 (Рис. 5 поз. 2).
В этом режиме программный блок "Датчик цвета" "Желтой палитры" визуально очень похож на программный блок "Ожидание" "Оранжевой палитры" в режиме "Датчик цвета - Сравнение - Яркость отраженного света". Но, в отличие от блока "Ожидание", этот программный блок не ждет выполнения условия, указанного параметрами "Тип сравнения" (Рис. 7 поз. 1) и "Пороговое значение" (Рис. 7 поз. 2), а сразу выдает логическое значение ("Истина" или "Ложь") в выходном параметре "Результат сравнения" (Рис. 7 поз. 3) и измеренное значение - в выходном параметре "Освещение" (Рис. 7 поз. 4).
Параметры "Тип сравнения" и "Пороговое значение" на Рис. 7 поз. 1, 2 установим таким образом, чтобы выходной параметр "Результат сравнения" (Рис. 7 поз. 3) выдавал логическое значение "Истина" при пересечении датчиком цвета черной границы ринга.