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

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

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

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

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

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

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

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

  6. Определение момента, когда робот достигает границы контура(чёрной линии).

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

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

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

Это так же вносит изменения в подзадачу №2. Для реализации возвращения в центр необходимо учитывать уже пройденное расстояние.

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

nMotorEncoder[motorA]=0;

while (SensorValue[light]>40) { /*Необходимое значение выбирается исходя из освещённости используемого помещения*/

motor[motorA]=50;

motor[motorC]=50;

}

motor[motorA]=0;

motor[motorC]=0;

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

int n = nMotorEncoder[motorA];

nMotorEncoder[motorA]=0;

while(nMotorEncoder[motorA]>-n) {

motor[motorA]=-50;

motor[motorC]=-50;

}

motor[motorA]=0;

motor[motorC]=0;

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

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

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

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

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

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