вторник, 27 августа 2013 г.

Обзор среды программирования EV3. Часть 5.

Программные блоки панели "Действия" были рассмотрены в предыдущих частях обзора, а в данной статье я расскажу о блоках со вкладки "Управление операторами".
Эти блоки можно представить в качестве "регулировщиков" программы: они прикажут остановиться и продолжить движение программы, перейти на соседнюю ветку или идти по кругу.

По сравнению с NXT было добавлено 2 новых блока:
  • Начало - в NXT начало программы было единым и задавалось сразу при открытии программы.
  • Прерывание цикла - в NXT такого блока просто не было. Если требовалось реализовать похожий функционал, то приходилось использовать переменные.

Общий список блоков управления операторами выглядит так:
  • Начало
  • Ожидание
  • Цикл
  • Переключатель
  • Прерывание цикла

Блок "Начало"

Возможно, вы обратили внимание на то, что первый блок всех EV3 программ - блок с зеленой стрелкой. Этот блок - "Начало". Без него не обойдется ни одна программа - именно с него и начинается выполнение команд. Если перед последовательностью блоков не поставить "Начало", то такая программа выполняться не будет.
Например, по программе, представленной ниже, робот будет кружится вокруг оси (будет выполняться верхняя последовательность действий), но не будет проигрывать аудио файлы и зажигать подсветку кнопок (нижняя последовательность без блока "Начало" не активна):
EV3 поддерживает многозадачность, т.е. программа может содержать больше одной последовательности команд. Причем эти последовательности могут иметь свой собственный блок "Начало" или выходить из одного "Начала":


Собственный блок "Начало"

Общий блок "Начало"

Все такие последовательности будут выполняться одновременно.
Замечу, что зеленая стрелка на блоке - это не декоративный элемент. Если блок подключен к компьютеру (неважно как: через usb, wi-fi или bluetooth), то нажатие на стрелку запустит данную последовательность на выполнение.

Блок "Ожидание"

Этот блок тоже является одним из самых используемых. На нем программа "зависает" - последующие блоки программы не выполняются - и ждет определенное количество времени или определенного значения датчика.
У "Ожидание" большое число режимов, которое может испугать:

Но, на самом деле, все довольно просто. Все режимы можно разделить на категории:
  • по времени - блок ждет указанное количество секунд, прежде чем начнет выполнять следующие блоки
  • по показанию датчика:
    • сравнение - блок ожидает конкретное показание датчика, указанное в блоке
    • изменить - блок ожидает, когда показание датчика изменится на указанную величину, по сравнению с начальным значением. Причем, можно выбрать не только размер величины, но и ее направление - убывание значения, его увеличение или в любую сторону.

Рассмотрим примеры программ с каждым режимом блока.
В первой программе изменяется подсветка кнопок. Одну секунду подсветка будет гореть зеленым, затем 1 секунду красным и после этого переключится на стандартный режим - мигающий зеленый:
Вторая программа представляет из себя начало классического решения в соревновании "Кегельринг": робот кружится вокруг своей оси до тех пор, пока не увидит перед собой банку:
Следующая программа включает мотор А, и после того, как он сделает 5 оборотов, выключает его:
Работа этого блока с bluetooth ничем не отличается от работы с любым сенсором. Например, следующая программа ожидает сообщения "HI" и после этого зажигает подсветку зеленым и проигрывает звуковой файл:
Блок "Цикл"

Это особый блок - внутрь его можно вставлять другие блоки. Блоки, находящиеся внутри, будут повторяться. Режимы блока "Цикл" задают способ, который определяет, когда цикл должен завершиться. Большинство этих режимов мы уже знаем по предыдущему блоку ожидания, однако добавилось несколько новых:
  • Неограниченный - такой цикл будет выполняться, пока не будет принудительно завершена программа
  • Подсчет - цикл будет повторяться заданное число раз
  • Логическое значение - цикл будет повторяться, пока заданное значение не будет истиной 
  • Время - цикл будет повторяться заданное время
  • Показание датчика:
    • сравнение - цикл будет повторяться, пока датчик не примет заданное значение
    • изменить - цикл будет повторяться, пока показание датчика не изменится на указанную величину, по сравнению с начальным значением.
Над блоком написано имя цикла - 01, 02, .... Это имя может использоваться в блоке прерывания цикла, который будет описан позднее.
Рассмотрим примеры. По этой программе робот будет ехать прямо и поворачивать, до тех пор, пока программу не остановят (используется бесконечный цикл):
Следующая программа использует датчик касания. Пока он не нажат, робот вращает средним мотором сначала по часовой, потом против часовой стрелки. После нажатия на датчик мотор останавливается:
Цикл со счетчиком позволяет проиграть ноту 10 раз:
С режимом логического значения придется использовать еще не изученные блоки опроса датчиков. Данная программа заставляет робота ехать вперед до тех пор, пока он не увидит предмет на расстоянии, меньше 20 см (первый блок цикла) или не наткнется на препятствие датчиком касания (второй блок цикла). Результат логической операции "ИЛИ" дает третий блок цикла:

Блок "Переключатель"

Аналогичный блок есть и в NXT, он позволяет в зависимости от значения переменной или показания датчика выполнять разные последовательности действий.
После выполнения данной последовательности действий, программа выполняет блоки, идущие за "Переключателем".
Режим данного блока определяет, значение какого датчика или переменной будет использоваться. Используются все те же режимы, что и блок "Цикл": можно использовать любой датчик (цвета, гироскопический, инфракрасный, ультразвуковой, вращения мотора и другие), числовое или текстовое значение, сообщение bluetooth.
Например, по данной программе робот сначала будет вращаться вокруг своей оси 5 оборотов мотора, а затем, в зависимости от показаний датчика гироскопа, ехать вперед или назад. Если угол, определяемый гироскопом, будет меньше 90 градусов, тогда робот поедет вперед. Если же угол меньше 90 градусов - тогда робот поедет назад.

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


В этой программе робот определяет красный, синий, зеленый и отсутствие цвета. Он будет называть цвета, а также для красного и зеленых цветов включать подсветку кнопок, а по синему цвету поедет вперед. Можно добавить оставшиеся цвета, которые может определить датчик - черный, желтый, белый, коричневый - с помощью маленькой кнопки "+", расположенной у верхнего варианта (она обведена красным).
При большом количестве вариантов (как в примере выше) блок "Переключатель" становится довольно громоздким и работать с ним не удобно. В этом случае блок можно переключить в "плоский режим":
Кнопка, переключающая режимы "плоский / подробный", обведена красным.

Блок "Прерывание цикла"

Этот блок новый, в NXT подобного блока не было. Он позволяет выходить из цикла - оставшиеся блоки цикла выполняться не будут, и программа перейдет к блокам после цикла. В "шапке" блока задается имя цикла, который должен быть завершен.
Например, цикл в программе должен повториться 5 раз, но если расстояние до предмета станет больше 50 сантиметров, то произойдет досрочный выход из цикла и робот проиграет звуковой тон:
Особенностью данного блока является то, что он не обязательно должен находится внутри прерываемого цикла. Например, следующая программа выводит число повторений цикла до тех пор, пока яркость отраженного света больше 50. Но если в процессе выполнения программы будет нажат датчик касания, то цикл прекратится и программа остановится:

Все статьи обзора:
Часть 1 - Установка среды программирования, ее основной интерфейс. Лобби
Часть 2 - Понятие проекта. Его создание, основные элементы.
Часть 3 - Программирование робота. Управление моторами.
Часть 4 - Программирование робота. Экран, звук, индикатор состояния модуля. Редактор изображений и редактор звуков.
Часть 5 - Программирование робота. Управление операторами: блоки Начало, Ожидание, Цикл, Переключатель, Прерывание цикла.

Автор обзора благодарит официального дистрибьютора Lego Education в России - компанию "Стандарт" за предоставленный набор Lego Mindstorms EV3.

5 комментариев:

  1. Большое спасибо!

    ОтветитьУдалить
  2. Вопрос такой: я создал Мой Блок в среде разработки для EV3, а вот как его сохранить в файле с расширением .ev3b не знаю, или он сохраняется только с данным проектом, в котором создавался?

    ОтветитьУдалить
  3. огромное спасибо за предоставленный и толково написаный материал

    ОтветитьУдалить
  4. Спасибо за предоставленный материал. Очень выручаете начинающих робототехников)))

    ОтветитьУдалить

Related Posts Plugin for WordPress, Blogger...