Введение в программирование LEGO-роботов на языке NXT-G

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

Показывать лекцию целиком

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    (рис 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!").

    Датчик ультразвука (Ultrasonic Sensor)

    Ультразвуковой сенсор заменяет роботу зрение. Он работает по тому же принципу, что и локатор летучей мыши: измеряет расстояние путём расчёта времени, которое потребовалось звуковой волне для возвращения после отражения от объекта. Как следует из его настроек, датчик способен измерять расстояние от 0 до 255 см с точностью +/- 3 см. Однако на практике минимальное расстояние, на котором ультразвуковой датчик выдаёт осмысленные показания составляет около 5 - 7 см. Кроме того, следует иметь в виду, что по сравнению с датчиками цвета, света, касания и др., это медленный датчик. Во-первых, это объясняется малой скоростью звука по сравнению со скоростью света, а во-вторых, медленным протоколом обмена данными, используемым для этого датчикаБолее подробно прочитать о скорости измерения ультразвукового датчика можно в статье по адресу http://nnxt.blogspot.ru/2010/10/nxt-g-ultrasonic.html.

    (рис 3.6) Настройки блока Wait Ultrasonic Sensor

    Добавьте в конструкцию робота датчик ультразвука, направленный вперёд по ходу движения. Настройки датчика показаны на Рис. 3.6.

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

  • в поле Until также как и для Color Sensor задаётся условие выхода из блока;
  • знак с "<" на ">" или наоборот в ожидаемом событии переключается щелчком по радиокнопке Farther Than (Больше, чем) изображение горы или Nearer Than (Меньше, чем) изображение цветка (установлено по умолчанию). Также можно воспользоваться списком;
  • поле Show задаёт единицы измерения расстояния. По умолчанию расстояние измеряется в дюймах (inches). Не забудьте переключить этот параметр в сантиметры;
  • Задание 3.6. Протестируйте датчик ультразвука, поднося к нему предметы на различном расстоянии и наблюдая результаты:

  • при помощи меню View;
  • в поле обратной связи блока Wait.
  • Задание 3.7. Напишите программу, по которой робот движется в направлении препятствия (стены) и останавливается на расстоянии 30 см от него.

    Датчик касания (Touch Sensor)

    Добавьте в конструкцию робота Five Minute Bot датчик касания - кнопку. Его можно не закреплять, а подключить длинным кабелем и использовать как пульт дистанционного управления.

    В настройках блока Wait Touch в качестве Action доступны варианты:

  • Pressed - датчик нажат;
  • Released - датчик отпущен;
  • Bumped - выполнен щелчок (то есть кнопка нажата и сразу отпущена).
  • Задание 3.8. Напишите игру "Кто точнее", смысл которой состоит в том, чтобы остановить робот точно на заданной линии. После запуска программы робот должен начать движение по направлению к чёрной линии. Как только колёса робота коснутся линии, игрок должен нажать кнопку; при этом робот должен остановиться. Выигрывает тот, у кого расстояние от передних колёс до линии меньше. Настройки блока Move: неограниченное движение, мощность 80 %. Подберите наилучший вариант для решения задачи.

    Задание 3.9. Проведите соревнования по правилам игры "Кто точнее".

    Вернуться к учебному плану