Перейти к содержимому

Какой блок в среде программирования используется для повторения действий роботом

  • автор:

Какой блок в среде программирования используется для повторения действий роботом

NiNoXT

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

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

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

Эти блоки можно представить в качестве «регулировщиков» программы: они прикажут остановиться и продолжить движение программы, перейти на соседнюю ветку или идти по кругу.

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


Блок «Начало»

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

EV3 поддерживает многозадачность, т.е. программа может содержать больше одной последовательности команд. Причем эти последовательности могут иметь свой собственный блок «Начало» или выходить из одного «Начала»:

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

Общий блок «Начало»
Все такие последовательности будут выполняться одновременно.

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

Блок «Ожидание»

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

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

    Вторая программа представляет из себя начало классического решения в соревновании «Кегельринг»: робот кружится вокруг своей оси до тех пор, пока не увидит перед собой банку:

    Следующая программа включает мотор А, и после того, как он сделает 5 оборотов, выключает его:

    Работа этого блока с bluetooth ничем не отличается от работы с любым сенсором. Например, следующая программа ожидает сообщения «HI» и после этого зажигает подсветку зеленым и проигрывает звуковой файл:

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

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

      Цикл со счетчиком позволяет проиграть ноту 10 раз:

      С режимом логического значения придется использовать еще не изученные блоки опроса датчиков. Данная программа заставляет робота ехать вперед до тех пор, пока он не увидит предмет на расстоянии, меньше 20 см (первый блок цикла) или не наткнется на препятствие датчиком касания (второй блок цикла). Результат логической операции «ИЛИ» дает третий блок цикла:

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

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

      Следующая программа представляет собой реализацию простейшего релейного регулятора для движения по черной линии:

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

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

      Кнопка, переключающая режимы «плоский / подробный», обведена красным.

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

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

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

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

      § 10. Алгоритмическая конструкция повторение

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

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

      Алгоритмическая конструкция повторение (цикл) определяет последовательность действий, выполняемых многократно. Эту последовательность действий называют телом цикла.

      Существует несколько возможностей управлять тем, сколько раз будет повторяться тело цикла.

      Алгоритмическая конструкция цикл с параметром (цикл со счетчиком) — способ организации цикла, при котором количество повторов зависит от начального и конечного значений параметра цикла.

      Таким образом, цикл с параметром организует выполнение команд тела цикла заранее известное число раз (пример 10.1).

      Параметр цикла определяет нумерацию действий в цикле. Параметр цикла может принимать только целые значения. Часто нумерацию начинают с 1 и заканчивают числом N (пример 10.2). В этом случае цикл выполнится N раз. Если нумерация установлена двумя произвольными числами N 1 (начальное значение) и N 2 (конечное значение), то цикл выполнится ( N 2 – N 1 + 1) раз.

      Алгоритмическая конструкция цикла с параметром может изображаться на блок-схеме следующим образом (значение параметра изменяется от 1 до N ):

      В данной конструкции в прямоугольнике(ах) записываются повторяющиеся команды алгоритма (тело цикла), которые выполняются N раз (Да). При этом после каждого выполнения команд тела цикла происходит проверка, который раз выполняется цикл. На блок-схеме переход на проверку условия изображается в виде стрелки, выходящей из тела цикла и возвращающейся к проверке. Как только команды тела цикла выполнятся N раз (Нет), цикл завершается (пример 10.3). Если N  0, то команда тела цикла не выполнится ни разу.

      10.2. Использование команды цикла с параметром для исполнителя Робот

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

      Для записи цикла с параметром используется команда for . Формат записи команды :

      for var i:= N1 to N2 do 1

      Строка for var i:= N1 to N2 do является заголовком цикла . Эту строку можно прочитать следующим образом: «Для переменной i от N 1 до N 2 делай». Если N 2  N 1, то команды тела цикла выполнятся ( N 2 – N 1 + 1) раз, иначе цикл не выполнится ни разу.

      Операторные скобки — пара слов, определяющих в языке программирования блок команд, воспринимаемый как единое целое, как одна команда.

      Слова begin и end; являются операторными скобками в языке Pascal . Если тело цикла состоит из одной команды, операторные скобки можно опустить.

      Пример 10.4. Решим задачу с2 из встроенного задачника.

      Робот должен закрасить клетки поля, перемещаясь вправо. Для закрашивания всех 10 клеток поля нужно в цикле выполнить 10 раз команды:

      Данные команды образуют тело цикла.

      Командами, образующими тело цикла, могут быть любые команды из системы команд исполнителя. Кроме того, в теле цикла может вызываться вспомогательный алгоритм. Использование вспомогательного алгоритма позволит сократить запись тела цикла и сделает программу более понятной.

      Пример 10.5. Решим задачу с7 из встроенного задачника.

      На поле исполнителя Робот присутствуют стены. При обходе стен Робот выполняет следующие команды:

      Чтобы решить задачу, Робот должен повторить эти команды 5 раз. Оформим данные команды как вспомогательный алгоритм kvadrat и вызовем его в цикле.

      В рассмотренном примере тело цикла состоит из одной команды kvadrat , поэтому операторные скобки begin end ; можно не использовать.

      Понятие цикла используется в различных сферах человеческой деятельности.

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

      Цикло м называют тот или иной круг наук: гуманитарный цикл наук, физико-математический цикл.

      Циклом является законченный ряд каких-либо произведений, чего-либо излагаемого, исполняемого: цикл лекций, цикл стихотворений.

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

      Пример 10.1. Приготовление пельменей.

        1. Вскипятить воду.
        2. Для i = 1..10 повторять:
          1. 2.1.
            Достать пельмень из упаковки.
          2. 2.2.
            Бросить пельмень в кипящую воду.

          В данном примере параметр цикла i изменяется от 1 до 10. Действия «достать пельмень из упаковки» и «бросить пельмень в кипящую воду» выполняются 10 раз и составляют тело цикла.

          Блок-схема данного алгоритма будет выглядеть следующим образом:

          Пример 10.2. Вычислим a n (например, 3 5 = 243). Алгоритм возведения числа в степень может быть описан следующим образом:

            1. Ввести значения a и n .
            2. Определить начальное значение результата r = 1.
            3. Для i = 1.. n повторять:
              1. 3.1.Умножить результат на a .

              Пример 10.3. В фольклорных произведениях часто встречается многоголовый Змей Горыныч (количество голов может быть, например, 7). Алгоритм победы над Змеем Горынычем может быть описан следующим образом:

                1. Найти Змея Горыныча.
                2. Для i = 1.. 7 повторять:
                  1. 2.1. Отрубить голову Змею Горынычу.

                  Блок-схема данного алгоритма:

                  Н. М. Кочергин. «Змей Горыныч». 1960-е гг.

                  Пример 10.4. Начальная обстановка:

                  Программа для исполнителя Робот:

                  Программирование модуля EV3

                  Вопрос про программирование модуля EV3 без применения компьютера иногда встает перед многими любителями робототехники. Для этого на микрокомпьютер EV3 уже предустановлено программное обеспечение идентичное ПО установленному на микрокомпьютер.

                  Приложения микрокомпьютера EV3

                  Создать свою программу можно при помощи приложения модуля EV3 находящегося в окне приложений. Это третья вкладка интерфейса микроконтроллера EV3. Приложение называется Brick Program и является четвертым приложением по счету.

                  Дословно это переводится как кирпичная программа и является средой программирования модуля EV3. Зайти в это приложение можно после включения модуля при помощи кнопок управления модулем.

                  Среда программирования микрокомпьютера EV3

                  Если зайти в среду программирования микрокомпьютера EV3, то первое что мы увидим будет блок «Начало» и блок «Цикл». Между этими двумя блоками находится вертикально расположенная прерывистая линия, при помощи которой происходит добавление блоков из палитры блоков.

                  Начало программы

                  В палитре блоков расположены блоки двух типов:

                  • Блоки действия;
                  • Блоки ожидания.

                  Также в палитре блоков находится корзина для удаления ненужного блока из программы.

                  Блоки действия

                  Всего в палитре блоков находятся шесть блоков действия:

                  Блоки действия

                  1. Экран;
                  2. Звук;
                  3. Подсветка кнопок;
                  4. Средний двигатель;
                  5. Большой двигатель;
                  6. Рулевое управление – в этом блоке используется два двигателя.

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

                  Блоки ожидания

                  Имеется одиннадцать блоков ожидания:

                  Блоки ожидания

                  1. Ожидание температуры;
                  2. Ожидание показаний энкодера;
                  3. Ожидание нажатия управляющей кнопки модуля EV3;
                  4. Ожидание времени;
                  5. Ожидание ультразвукового датчика;
                  6. Ожидание инфракрасного датчика;
                  7. Ожидание инфракрасного маяка;
                  8. Ожидание датчика гироскопа;
                  9. Ожидание датчика касания;
                  10. Ожидание датчика освещенности;
                  11. Ожидание датчика цвета.

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

                  Как создать программу на модуле EV3

                  Для того, чтобы на микрокомпьютере EV3 создать программу нужно найти в третьем окне интерфейса модуля приложение Brick Program. Нажав на центральную кнопку блока входим в приложение и видим блок начало и цикл. Между этими двумя блоками можно разместить всего шестнадцать различных блоков ожидания и блоков действия.

                  Среда программирования модуля EV3

                  Поэтому при помощи интерфейса микроконтроллера EV3 можно писать только несложные программы. В блоках программирования есть возможность изменения одного параметра при помощи кнопок «Вверх» и «Вниз». Количество повторений выполнения программы задается в блоке «Цикл» и может принимать значения 1, 2, 3, 4, 5, 10 и бесконечность.

                  Пример простой программы микрокомпьютера EV3

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

                  Блок Рулевое управление

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

                  Для того, чтобы робот ехал вперед пять секунд нужно добавить блок ожидания времени. Устанавливаем прерывистую стрелочку между блоком «Рулевое управление» и блоком «Цикл» и переходим при помощи кнопок управления модулем в палитру блоков ожидания. Находим блок ожидания времени, который выглядит как часы и выбираем. Нажатием средней кнопки подтверждаем выбор.

                  Блок ожидания времени

                  Блок «Ожидание времени» устанавливается после блока «Рулевое управление» перед блоком «Цикл». Повторное нажатие центральной кнопки на блоке «Ожидания времени» позволяет зайти в настройку времени. Стрелочками «Вверх» и «Вниз» выбираем значение пять секунд и нажатием на центральную кнопку подтверждаем выбор. В своей программе между блоками можно передвигаться при помощи кнопок «Влево» и «Вправо».

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

                  Как сохранить программу модуля EV3

                  Для того, чтобы сохранить программу нужно перейти к значку «Сохранить», который находится внизу в левом дальнем конце программы. При нажатии значка откроется окно, где можно дать название программе. Также можно применить название по умолчанию. После этого нужно нажать на кнопку «OK».

                  Сохранить и открыть программу EV3

                  Программа с этим названием будет сохранена в папке BrkProg SAVE. Эта папка расположена во втором окне интерфейса модуля EV3 выбор файла.

                  Как открыть программу модуля EV3

                  Над значком «Сохранить» находится значок «Открыть». Чтобы отрыть любую программу, которая существует в блоке нужно нажать на этот значок. После этого можно кнопками «Вверх» и «Вниз» выбрать программу. Нажатие на центральную кнопку откроет выбранную программу

                  Как удалить блок модуля EV3

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

                  Удаление блока

                  Выделяем значок и нажимаем центральную кнопку. Удаление ненужного блока произведено.

                  Циклы в Scratch

                  Виды циклов в Scratch, создание циклов, пример использования циклов.

                  Виды циклов в Scratch

                  Циклы используются для повторения определенной части программы. Существует 3 вида циклов: повторять всегда, повторить… раз, повторять пока не…

                  Цикл «Повторять всегда»

                  Циклы в Scratch

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

                  Цикл «Повторить… раз»

                  Виды циклов в Scratch

                  Цикл повторить … раз работает до тех пор, пока программа внутри цикла не реализуется столько раз, сколько указано в названии цикла.

                  Цикл «Повторять пока не…»

                  Виды циклов в Scratch

                  Цикл повторять пока не … выполняется до тех пор, пока условие в его заголовке не станет истинным. Когда именно условие станет правдой — неизвестно, поэтому и количество повторов цикла мы не знаем.

                  Данный цикл может повторяться бесконечно, если условие не выполнится. Или наоборот, не выполниться ни разу, если условие сразу истинно.

                  Создание циклов в Scratch

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

                  Создание цикла в Scratch

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

                  Создание цикла в Scratch

                  Пример использования циклов в Scratch

                  Для примера рассмотрим программирование игры Fruit Ninja и цикл повторять пока не

                  В оригинальной игре фрукты пропадали как только касались низа. Мы сделаем нечто подобное, но только с немного другие условием. Пускай игра будет работать, пока спрайт не коснётся стены.

                  1. Добавим команду для движения Идти шагов. Впишем 8, это не слишком много, но и не слишком мало.

                  Пример использования циклов в Scratch

                  1. При помощи логических операторов получаем вот такую команду:

                  Пример использования циклов в Scratch

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

                  Пример использования циклов в Scratch

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

                  Пример использования циклов в Scratch

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

                  Пример использования циклов в Scratch

                  1. Объединяем кусочки и получаем следующий набор блоков:

                  Пример использования циклов в Scratch

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *