Диссертация (1148272), страница 30
Текст из файла (страница 30)
Требуется наличие встроенных средств отладки, поскольку школьникамважно не столько сделать работающую программу, сколько разобратьсяв том, как она работает. Ошибки могут иметь большую педагогическуюценность, и среда должна иметь возможность демонстрировать ошибки(и ход выполнения программы вообще) школьникам. Весьма желательнавозможность исполнения программы на модели робота на компьютере.4. Требуется наличие возможности порождения текстового представленияпрограммы. Школьники старших классов, серьёзно занимающиеся программированием, должны видеть связь между диаграммами и кодом натекстовых языках, иметь возможность редактировать текстовую программув той же среде, в которой они привыкли работать.1555. Среда должна быть русскоязычной, поскольку основная группа её пользователей ещё не владеет в должной степени иностранными языками.Как видно из приведённого выше обзора, ни одна из существующих средпрограммирования роботов указанным требованиям не удовлетворяет.
Наиболееактивно в школах используется среда Robolab, но, поскольку он недёшев, средишкольных учителей есть желание заменить её на более современный (и повозможности бесплатный) аналог. Поэтому существует реальная потребность всоздании новой такой среды, что и было сделано на базе метатехнологии QReal.A.1.5. Визуальный язык QReal:RobotsВ качестве модели вычислений для визуального языка в силу наличия требования близости к «традиционным» языкам программирования была выбрана модельвычислений, ориентированная на поток исполнения. Блок языка представляетсобой элементарную команду роботу, связи между блоками указывают последовательность, в которой выполняются блоки, это делает программы больше похожими на блок-схемы, чем программы на существующих средах программированияроботов.
Пример программы приведён на рисунке A.1. Двухмоторная тележка сдатчиком касания под управлением этой программы будет двигаться до срабатывания датчика касания, после чего подаст звуковой сигнал и будет некотороевремя двигаться в обратном направлении, после чего повторит действия сначала.Все блоки языка разбиты на смысловые группы, которые могут быть отдельносвёрнуты или развёрнуты в палитре. Описание для каждого блока приведенониже.1. Группа «Алгоритмы» предназначена для блоков, определяющих последовательность выполнения команд программы.(a) «Диаграмма поведения робота» — блок, на который добавляются всеостальные блоки программы. Обычно непосредственно в рабочей области не рисуется, но при создании новой диаграммы перетаскиваетсяиз палитры в обозреватель модели.(b) «Линия соединения» — единственная связь, присутствующая в языке,задаёт последовательность исполнения блоков.
Имеет метку, которая156Рис. A.1: Пример программы QReal:Robots.позволяет определять, когда управление надо передать по линии соединения в случае условного оператора или цикла — например, метка«больше 0» говорит, что управление по данной связи будет переданотолько тогда, когда выражение в условном операторе, подключённом кэтой связи, будет иметь значение, большее 0. По умолчанию связи непомечены ничем.(c) «Условие» — условный оператор.
Параметризуется арифметическимвыражением и должен иметь две исходящие связи, одна из которыхвыбирается для передачи управления в зависимости от значения выражения и метки связи.(d) «Цикл» — оператор цикла, параметризуется арифметическим выражением, значение которого будет количеством итераций, которые надовыполнить, и должен иметь две исходящие связи. Пока блок посещёнменьшее количество раз, чем желаемое количество итераций, управление передаётся по связи, помеченной как «итерация», как толькожелаемое количество итераций достигнуто, счётчик сбрасывается иуправление передаётся по непомеченной связи.2.
Группа «Действия» содержит блоки, реализующие элементарные командыроботу.157(a) «Гудок» — проигрывает звук фиксированной частоты и фиксированной длительности с заданной громкостью.(b) «Играть звук» аналогичен блоку «Гудок», но позволяет настраиватьчастоту и длительность звука.(c) «Моторы вперёд» — включает моторы по заданным портам с заданноймощностью (в процентах от максимальной).(d) «Моторы назад» — аналогичен блоку «Моторы вперёд», но включаетмоторы в противоположном направлении.(e) «Моторы стоп» — отключить моторы на заданных портах.(f) «Параллельные задачи» — разветвляет исполнение программы на дваили более параллельно исполняемых потока.(g) «Функция» — позволяет вычислить произвольное выражение, записанное в текстовой форме как параметр блока.
Выражения вQReal:Robots могут использоваться везде, где могут использоватьсячисловые значения, блок «Функция» введён для удобства как выделенное место для вычислений.3. Группа «Инициализация» содержит блоки, обозначающие начало и конецпрограммы, и позволяющие задать начальное состояние различных подсистем робота.(a) «Блок инициализации» обозначает место, с которого начинается исполнение программы, и позволяет задать, какие датчики подключенык портам управляющего блока робота.(b) «Конец» — завершает работу программы и отключает моторы идатчики робота.(c) «Начало» — аналогичен блоку инициализации, но не позволяет задатьконфигурацию датчиков. В случае его использования конфигурациядатчиков берётся из настроек, либо вычисляется по использованиюблоков работы с датчиками в программе.
Используется в программах,не использующих датчики, либо использующих один—два датчика, нетребующих сложного конфигурирования.158(d) «Сбросить показания энкодера» — обнуляет показания датчиков оборотов моторов по выбранным портам.4. Группа «Ожидания» содержит блоки, останавливающие выполнение программы (или одного из параллельных потоков) до наступления некоторогособытия.(a) «Ждать интенсивность цвета» продолжает выполнение, когда датчикцвета по данному порту вернёт требуемое значение.(b) «Ждать свет» аналогичен блоку «Ждать интенсивность цвета», ноработает с датчиком света. Поясним, что набор Mindstorms NXTраспространяется с датчиком цвета, который способен различать шестьцветов (красный, зелёный, синий, жёлтый, чёрный, белый), и измерятьинтенсивность света в одном из трёх режимов подсветки (красным,зелёным или синим цветом), или без подсветки (в пассивном режиме).Кроме этого, набор может использовать датчик света, распространявшийся в более ранних версиях конструктора.
Этот датчик можеттолько измерять интенсивность света с красной подсветкой или безподсветки, распознавать цвета не может. Кроме того, есть ещё датчикцвета стороннего производителя3 , аналогичный по характеристикамдатчику цвета из Mindstorms NXT, но способный распознавать большецветов, QReal:Robots его на данным момент не поддерживает.(c) «Ждать сенсор касания» продолжает выполнение, когда срабатываетдатчик касания.(d) «Ждать сонар» продолжает выполнение, когда ультразвуковой датчикрасстояния возвращает значение в требуемых границах.(e) «Ждать цвет» продолжает выполнение, когда сенсор цвета возвращаетзаданный цвет. Заметим, что в режиме распознавания цвета датчикцвета не может измерять интенсивность, поэтому данный блок неможет быть использован вместе с блоком «Ждать интенсивностьцвета» для датчика на том же порту.3компанииHiTechnic,документациянадатчикнаходитсяпоbin/commerce.cgi?preadd=action&key=NCO1038 (дата обращения: 17.02.2014)URLhttp://www.hitechnic.com/cgi-159(f) «Ждать энкодер» продолжает выполнение, когда датчик оборотовмотора на заданном порту вернёт заданное значение.(g) «Таймер» продолжает выполнение программы по истечении заданноговременного интервала (в миллисекундах).5.
Группа «Сегвей» содержит блоки, предназначенные специально для балансировки робота-сегвея с использованием средств операционной системы nxtOSEK и библиотеки NXTway-GS [12]. Они были добавлены впалитру как демонстрация возможностей по использованию специфическихфункций операционной системы и сторонних библиотек, написанных натекстовых языках, а также как зрелищная демонстрация возможностейсреды (балансирующий на двух колёсах робот привлекал внимание дажесерьёзно увлекающихся робототехникой школьников, многие из которыхзатем интересовались средой, в которой он был запрограммирован).(a) «Балансировка» — вызов функции balance_control библиотекиNXTway-GS. Блок принимает текущие показания датчиков оборотовмоторов и другие параметры, связанные с текущим положениемробота, получает данные с гироскопа, и записывает в переданныепеременные мощности моторов, которые надо выставить, чтобы роботсохранял вертикальное положение.(b) «Инициализация балансировки» — блок, вызывающий функциюbalance_init библиотеки NXTway-GS.
Она должна вызываться в началеработы программы, когда сегвей зафиксирован в вертикальном положении, и инициализирует внутренние переменные программы балансировки, в частности, показания гироскопа в вертикальном положении.Язык позволяет везде, где могут быть использованы численные значения,использовать и математические выражения. Выражения могут состоять из чисел,арифметических операций, переменных, специальных переменных, содержащихтекущие значения сенсоров (называемых сенсорными переменными), тригонометрических функций. Все выражения (и все переменные) всегда имеютвещественный тип, переменные не объявляются, а начинают существовать вместе первого использования.
Зависимости между блоками по данным никак не160визуализируются, если один блок использует переменную, которой присваиваетсязначение в другом блоке, то корректная последовательность исполнения этихблоков — ответственность программиста.Пример программы, использующей математические выражения, приведён нарисунке A.2. Эта программа решает задачу движения робота по чёрной линии,нарисованной на полу — самую популярную задачу на различных соревнованияхпо робототехнике. Приведённое решение использует робот с двумя датчикамицвета и двумя моторами, независимо приводящими в движение колёса по бокамробота. Вычисляется разность между показаниями сенсоров, которые должнынаходиться по разные стороны от линии. Если, например, левый сенсор видитбелую область, а правый — чёрную, робот съезжает с линии влево, и ему надодовернуть вправо, чтобы остаться на линии. Умноженная на некий подбираемыйэмпирически коэффициент эта разность становится управляющим воздействиемна моторы, которое прибавляется к мощности одного мотора и вычитается измощности другого, тем самым обеспечивая доворот робота.Рис.