Опубликован: 10.09.2014 | Уровень: для всех | Доступ: платный | ВУЗ: Оренбургский государственный педагогический университет
Лекция 3:

Состояния и события. Сенсоры

< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Аннотация: Цель: изучить средства для получения роботом информации из окружающего мира.

Поведение робота - это череда сменяющих друг друга состояний (состояние движения, состояние поиска и т. п.). Смена состояний происходит в зависимости от внешних событий. Робот регистрирует события при помощи различных датчиков. Всё поведение робота можно схематично изобразить в виде диаграммы переходов между состояниями.

Пример 3.1. Диаграмма переходов "Состояние 1 → Событие → Состояние 2" соответствующая движению робота до чёрной линии (Рис. 3.1):

Диаграмма переходов: движение робота до чёрной линии

увеличить изображение
Рис. 3.1. Диаграмма переходов: движение робота до чёрной линии
  1. Робот находится в состоянии движения.
  2. Датчик света регистрирует понижение яркости до некоторого порогового значения - это новое событие, которое можно назвать "робот доехал до чёрной линии".
  3. В результате регистрации события робот меняет своё состояние на бездействие (остановка).

Таким образом, можно сказать, что робот должен всё время ждать возникновения событий. Для этого в среде NXT-G имеется специальный блок Wait (Ждать):

Варианты блока Wait в общей палитре

Рис. 3.2. Варианты блока Wait в общей палитре

Источниками событий могут являться:

  • различные датчики (сенсоры): цвета, освещённости, касания, и пр.;
  • таймер;
  • кнопки NXT-блока;
  • сообщения от других роботов, переданные по Bluetooth соединению.

Далее в этой теме мы рассмотрим работу с некоторыми наиболее часто используемыми датчиками.

Датчик цвета (Color Sensor)

Датчик цвета (RGB-датчик) совмещает три функции:

  1. Позволяет роботу различать цвета.
  2. Позволяет роботу различать уровень освещённости путём измерения яркости отражённого света.
  3. Цветовая подсветка.

Работа в режиме определения цвета

Пример 3.2. Ожидание события от датчика цвета.

Робот движется по тестовому полю вперёд до тех пор, пока не зарегистрирует синий цвет.

Пример программы "Движение до синего"

увеличить изображение
Рис. 3.3. Пример программы "Движение до синего"

Ранее в теме "Программирование моторов: команда Move" мы отметили, что параметр Unlimited (ограничения нет) в настройках блока Move позволяет роботу двигаться без каких-либо ограничений до наступления очередного события. После этого можно изменить состояние робота. Изменение состояния не происходит автоматически: его надо запрограммировать! В нашем примере после наступления события (регистрация датчиком синего цвета) запрограммирована остановка моторов B и C.

Обратите внимание:

  • поле Until надо читать по-русски [антил], а переводить следующим образом: "до тех пор пока не станет...";
  • в поле Until возможен один из двух вариантов:
    • Inside Range (Внутри диапазона) - ожидается событие "попадание регистрируемого цвета внутрь указанного диапазона цветов";
    • Outside Range (Вне диапазона) - ожидается событие "попадание регистрируемого цвета во вне указанного диапазона цветов";
  • цвет в поле Until задаётся при помощи двух слайдеров.

Задание 3.1. Протестируйте датчик цвета:

  • Добавьте в конструкцию робота Five Minute Bot датчик цвета, расположенный впереди и направленный вниз, на высоте примерно 1 - 1,5 см от поверхности пола (стола).
  • Добавьте на поле программы блок Wait Color Sensor и протестируйте его на предметах различных цветов:
    1. Подключите блок NXT к компьютеру через USB-соединение.
    2. Выделите блок Wait и нажмите на кнопку Download and run selected контроллера NXT (Рис. 3.4).
    3. Не отсоединяя USB-шнур, подносите предметы различной окраски к датчику на расстояние примерно 1 см.
    4. Следите за результатом в поле обратной связи панели настроек датчика (левый нижний угол панели настроек).
    5. Проведите те же тесты при помощи меню View NXT. Совпадают ли результаты тестов?
Компиляция и выполнение выделенного фрагмента

Рис. 3.4. Компиляция и выполнение выделенного фрагмента

Задание 3.2. Напишите программу для движения робота по тестовой полосе1Тестовая полоса - это таблица разных цветов, идущая по краю тестового поля. Содержит чёрный, синий, зелёный, красный, жёлтый цвета и их градации. до обнаружения красного (синего, зелёного и др.) цвета. После того, как заданный цвет обнаружен, робот должен произнести этот цвет.

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

Работа в режиме измерения освещённости

Датчик цвета из нашего набора может работать в двух режимах: собственно датчик цвета, и датчик света, измеряющий освещённость. Переключите в настройках блока Wait Color Sensor датчик цвета в режим датчика освещённости. Для этого в поле Action выберите Light Sensor (Рис. 3.5). Обратите внимание, что внешний вид блока Wait изменился.

Настройки блока Wait Color Sensor в режиме измерения освещённости

Рис. 3.5. Настройки блока Wait Color Sensor в режиме измерения освещённости

Чтобы лучше представить себе, что "видит" датчик освещённости, вообразите, что он перемещается над чёрно-белой фотографией. Результатом измерения будет яркость в диапазоне от 0 (чёрный цвет) до 100 (белый цвет), хотя крайних значений на практике зафиксировать не удаётся.

Обратите внимание:

  • уровень освещённости в поле Until задаётся при помощи слайдера или вводом числового значения;
  • знак в ожидаемом событии переключается щелчком по яркому или тёмному "солнышку" (по умолчанию стоит знак ">");
  • поле Until читается: "до тех пор пока освещённость не станет...". Так, на Рис. 3.5 ожидается событие "уровень освещённости > 50", что означает выполнение действия, предшествующего блоку Wait до тех пор, пока освещённость не станет > 50;
  • поле Function позволяет использовать датчик цвета в качестве лампы красного, зелёного или синего света (включённый флажок Light). Измеряя интенсивность отражённого от поверхности света можно оценить её яркость: от светлой поверхности отразится больше света, чем от тёмной. Вообще говоря, если замеры освещённости происходят при хорошем дневном свете, то подсветку можно выключить (снять флажок Light). Однако производитель рекомендует в режиме измерения освещённости использовать красную подсветку. Также при выключенном свете можно измерять общую освещённость в окружающем пространстве.

Задание 3.4. Протестируйте работу датчика цвета в режиме измерения освещённости на предметах различных цветов так же, как делали в предыдущем задании:

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

Задание 3.5. Используя RGB-датчик в режиме измерения освещённости, напишите программу для движения робота по белому полю до обнаружения чёрного цвета. Для этого в поле Until укажите необходимый порог чёрного цвета. После остановки робот должен вывести на экран соответствующую информацию (например, "Black color found!").

< Лекция 2 || Лекция 3: 12 || Лекция 4 >