Соревновония Lego роботов 1.Соревновония Lego роботов 2.

Первая программа

Аватар пользователя Овсянников Алексей Юрьевич

 

 

Здравствуйте, друзья!

Наконец-то я продолжаю уроки по среде программирования QReal:Robots. Такой длительный перерыв был связан сперва с подготовкой ко всероссийскому фестивалю «РобоМИР 2013», а потом с моей простудой. Только сейчас у меня нормализовался голос и я смог записать этот урок.

За то время, пока я не выпускал уроки, разработчики «выкатили» целых две основные версии программы: 2.1.0 и 2.2.0, анонсировав в них много интересных и полезных «вкусностей»: и переход на новый инструментарий, и обновленную документацию и примеры, и улучшения интерфейса по многим параметрам, и добавление горячих клавиш, и, конечно же, исправление ошибок. На мой взгляд – самое время попробовать все эти штучки.

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

Итак, запускаем новую версию QRea:Robots. Начинаем знакомство с интерфейсом программы. Первым делом она спрашивает нас, хотим ли мы открыть существующий проект программы для робота, или создать новый. Если во вкладке «недавние проекты» нужного нам нет (например, мы хотим редактировать программу с флешки), то можем воспользоваться кнопкой «открыть проект». Назначение кнопки «Выйти из QReal» мне непонятна – видимо она для тех, кто испугался с первого взгляда и решил не продолжать работу. Внешний вид этого диалога как раз активно обсуждается в сети с разработчиками и, видимо, в ближайших версиях будет изменен.

Выбираем «новый проект на базе диаграммы» -> «диаграмма поведения робота» -> «выбрать» - создаем новый проект. Кстати, подобный подход нам как бы намекает, что разработчики предполагают в дальнейшем создавать программы не только на базе диаграмм, но и как-то иначе.

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

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

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

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

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

QReal:Robots – графическая среда программирования (ну, на данный момент пока графическая, хотя в дальнейшем может появиться возможность создания текстовых программ). Это значит, что алгоритм действий робота как конструктор «собирается» из отдельных блоков, отвечающих за определенные действия. Доступные блоки располагаются на этой панели (справа, внизу).

Первым делом в программу необходимо добавить блок «начало» (зеленый светофор) - начало программы. Отсюда начнется выполнение программы. У этого блока всего одно свойство «имя», и мы можем его изменить. Например, запишем в него «старт».

Идем дальше. Заставим робота издать какой-нибудь звук. Для этого можно использовать два блока: «гудок» или «играть звук». По-моему личному мнению блок «гудок» избыточен (то есть лишний), так как в блоке «играть звук» его настройки полностью дублируются и дополняются другими. Давайте сразу будем использовать полные возможности и оставим блок «играть звук». Для выделения блоков используется левая кнопка мыши, для удаления – клавиша «Delete» на клавиатуре. Переместим блок «играть звук» (движение мышью с нажатой левой кнопкой) на одну высоту с блоком «начало» - среда QReal:Robots помогает нам и дорисовывает направляющие.

Изучим свойства блока «играть звук»:

  • уже известное нам «имя» (строка) - просто имя самого блока;
  • «длительность» (число) звучания в милисекундах;
  • «частота» (число) звучания – тон сигнала в Герцах. При должной сноровке можно попытаться воспроизвести какую-нибудь мелодию. Например, зададим 392 Гц – частота ноты «Соль» первой октавы;
  • «громкость» (число) звучания в процентах. По-умолчанию установлено значение 50, то есть половина возможной громкости;
  • «ждать завершения» (логика) – указывает, ждать ли завершения звучания или переходить к следующему действию пока еще идет звук.

 

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

Так же можно навести курсор мыши на какой-либо блок, зажать правую кнопку мыши и перемещать курсор к другому блоку. При этом курсор будет оставлять след – рисовать линию. При отпускании правой кнопки над блоком среда сама нарисует линию связи. Если кнопку отпустить не над блоком, то линия-след удалится. По-моему, это более удобный способ создания связей. Но Вы выберете для себя сами.

Так как у нас мобильный робот, то нам интереснее всего запустить его куда-нибудь ехать. Для этого используются блоки «моторы вперед» и «моторы назад». Опять же блок «моторы назад» несколько избыточный, так как если задать в блоке «моторы вперед» отрицательную мощность, то моторы начнут вращаться в обратном направлении. В этом блоке мы задаем, какие двигатели необходимо запустить (английскими буквами, через запятую) и с какой мощностью. Тут же можем указать предел вращения (в градусах). Я этого делать не буду, а создам еще один блок – «таймер» - ожидание времени. Задержка в нем задается в милисекундах (одна секунда равна тысяче милисекунд).

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

Программа написана, хотелось бы ее посмотреть в действии. Заходим в меню «Настройки» -> «Настройки» -> «Роботы» и убеждаемся, что тип модели робота установлен как «двухмерная модель». Закрываем меню, переходим в окно двухмерной модели (кнопка на панели инструментов). Здесь можно ничего не добавлять и просто нажать «запуск» - модель робота издаст звук и поедет в обратном направлении. При этом, во время выполнения программы на модели, в основном окне QReal:Robots исполняемые блоки будут подсвечиваться.

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

До новых встреч!