Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Забалуева Разработка программы кегельринг.rtf
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
752.82 Кб
Скачать
  1. Средний уровень сложности

Для того, чтобы рассмотреть более сложную задачу, возьмём в качестве ориентира варианты задач с соревнований – «Кегельринг Квадро»

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

Для решения задач среднего уровня сложности необходимо решить подзадачи:

  1. Определение, наличия кегли на указанной позиции.

  2. Выталкивание кегли за границу контура.

  3. Подсчёт вытолкнутых кеглей для остановки после выполнения задачи.

  4. Выбор стратегии обхода.

  5. Определение цвета кегли перед её выталкиванием

Первые четыре подзадачи уже были рассмотрены при решении задачи предыдущего уровня сложности.

Рассмотрим подробнее новую подзадачу, вставшую перед нами: Для того, чтобы определить цвет кегли перед её выталкиванием, необходимо использовать датчик цвета. Так как датчик работает только на расстоянии 1-2 см, то необходимо вначале приблизиться к кегле (расстояние до неё нам уже известно, благодаря датчику расстояния). После определения цвета требуется либо вытолкнуть её, проехав оставшееся расстояние до края поля, либо вернуться на исходную позицию.

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

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

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

/*Подъезжаем к кегле:*/

int n; /*Переменная, которая хранит ту часть расстояния, которая была пройдена до кегли.*/

nMotorEncoder[motorA]=0;

while(SensorValue[sonar]>=12) {

motor[motorA]=50;

motor[motorC]=50;

}

motor[motorA]=0;

motor[motorC]=0;

n=nMotorEncoder[motorA]; /*Сохраняем пройденное расстояние*/

/*Проверка цвета. Если цвет совпал с заданным – выталкиваем кеглю*/

nMotorEncoder[motorC]=0;

if (SensorValue[color]==0) {

while(nMotorEncoder[motorC]<1100-n){ /*Расстояние, которое необходимо пройти для выталкивания уменьшилось. */

motor[motorA]=50;

motor[motorC]=50;

}

motor[motorA]=0;

motor[motorC]=0;

}

/*Возвращение на исходную позицию*/

while(nMotorEncoder[motorC]>-n) {

motor[motorA]=-50;

motor[motorC]=-50;

}

motor[motorA]=0;

motor[motorC]=0;

Возможные формулировки задач среднего уровня сложности(для примера):

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

  2. Контур представляет из себя эллипс, необходимо за минимальное время вытолкнуть из круга все зелёные кегли, количество которых известно, а расположение – задано.

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

Рекомендации:

Приведённый выше код не является единственным вариантом решения подзадачи.

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