Научная статья на тему 'Enchanting: от программирования в Scratch к программированию роботов'

Enchanting: от программирования в Scratch к программированию роботов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1378
393
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
РОБОТОТЕХНИКА / ПРОГРАММИРОВАНИЕ / LEGO MINDSTORMS / SCRATCH / ENCHANTING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Дженжер Вадим Олегович, Денисова Людмила Викторовна

В работе рассматриваются различные среды программирования роботов Lego Mindstorms NXT 2.0. Даётся сравнительный анализ систем программирования. Для детей, ранее изучавших язык программирования Scratch, предлагается использовать среду Enchanting.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Enchanting: от программирования в Scratch к программированию роботов»

Дженжер В.О.1, Денисова Л.В.2

Оренбургский государственный педагогический университет, заведующий кафедрой

информатики и МПИ, vdjenjer@yandex. ru 2Оренбургский государственный педагогический университет, доцент кафедры информатики и МПИ, lv- de nisova@yandex . ru

Enchanting: от программирования в Scratch к программированию роботов

КЛЮЧЕВЫЕ СЛОВА:

Робототехника, программирование, Lego Mindstorms, Scratch, Enchanting.

АННОТАЦИЯ:

В работе рассматриваются различные среды программирования роботов Lego Mindstorms NXT 2.0. Даётся сравнительный анализ систем программирования. Для детей, ранее изучавших язык программирования Scratch, предлагается использовать среду Enchanting.

Введение

В настоящее время средняя школа заметными темпами осваивает довольно новую для себя науку — робототехнику. Во многих школах она ведётся в кружках, в других изучается в рамках информатики и ИКТ, и даже включается в учебный план в качестве отдельного предмета. При изучении робототехники происходит развитие инженерно-конструкторских и программистских навыков, причём программирование ведётся зачастую на очень низком уровне (на языке ассемблера). Это достаточно сложная и непривычная для преподавателя дисциплина, требующая от него не только инженерных и программистских знаний, но и совершенно нового методического опыта.

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

Конструкторы для занятий робототехникой

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

12.Lego Mindstorms NXT 2.0: один из наиболее часто встречающихся в школе наборов. Кроме множества деталей и процессорного блока имеет программную поддержку в виде большого количества сред программирования. Об этом наборе мы подробнее поговорим ниже.

13.Lego Mindstorms RCX: предыдущая версия набора, сегодня встречается гораздо реже.

14.Lego Mindstorms EV3: новая (2013 г.) версия набора. Обладает более мощным процессором и изменениями как в самом наборе, так и в среде программирования.

Существуют также программно-аппаратные платформы, которые могут быть использованы в том числе и в школьной робототехнике:

15.Arduino: аппаратная вычислительная платформа. На её базе можно создавать свои роботы.

16.Raspberry Pi: полноценный компьютер, требующий установки операционной системы, и при этом имеющий размер банковской карты.

Продукция компании Lego выделяется на общем фоне, и в первую очередь своей приспособленностью к школьным реалиям. Серия Mindstorms построена на основе педагогической концепции Lego, которая предполагает простоту и интуитивность, но в то же время позволяет создавать очень сложные объекты из простых элементов. Поэтому в набор входят детали, с большинством из которых дети знакомы с раннего возраста. Проблема подключения регистрирующих и исполнительных устройств (в нашем случае — сенсоров и двигателей) решена при помощи стандартного интерфейса, общего для всех подключаемых систем. Самое главное — не требуется работа паяльником; в противном случае время на создание моделей увеличилось бы многократно и, скорее всего, нельзя было бы вести речи об изучении робототехники в начальной школе.

Второй важной особенностью конструкторов Lego Mindstorms является наличие собственной визуальной среды программирования NXT-G. Простейшие программы для робота можно разработать за несколько минут, и это является несомненным достоинством среды. Программа на NXT-G представляет собой последовательность команд, которая составляется из настраиваемых блоков. Набор таких блоков довольно велик, а при необходимости можно создавать свои собственные блоки (подпрограммы). Язык поддерживает многопоточность, что значительно облегчает разработку. Готовая программа компилируется в байт-код и заносится в память компьютерного блока, где впоследствии и выполняется. Несмотря на свои очевидные достоинства, NXT-G имеет ряд недостатков, на которых мы остановимся чуть ниже.

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

Весь педагогический опыт, накопленный к сегодняшнему моменту (в том числе в России), свидетельствует о том, что, конструкторы Lego Mindstorms хорошо подходят для использования в школе [1,2, 3].

Языки программирования для Lego Mindstorms

Мы уже отметили, что Lego Mindstorms имеет свою собственную

среду программирования (см., например, [4,5]). Несмотря на свои очевидные достоинства, NXT-G имеет ряд недостатков, на которых мы остановимся подробнее.

Существенным изъяном NXT-G (в первую очередь, с точки зрения удобства обучения детей) является неэкономичность использования экранного пространства. Сложно поверить, что это именно недостаток: он, на первый взгляд, воспринимается просто как особенность языка. Но уже программа из 10-12 блоков с циклом и парой ветвлений не помещается на экране, причём код растёт не сверху вниз, а слева направо; приходится постоянно пользоваться скроллингом, тем более что зуммирование в среде отсутствует. Тот же код, например, на Си-подобном языке NXC уместился бы в 10 строк, коротких и легко видимых на экране. Поэтому более или менее простые программы на NXT-G писать можно, но со сложными (читай — большими по размеру) возникают определённые трудности, связанные с «читабельностью» кода. Частично выходом из положения является создание собственных блоков (подпрограмм), но неопытный программист с большим трудом воспринимает такую «вложенную» логику.

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

В настоящее время для комплектов Mindstorms адаптировано и разработано огромное количество языков и сред программирования. Можно назвать, например, Java, Ada, Perl, Matlab, Lua, Ruby, Python, Haskell, RoboMind и др. Подробнее рассмотрим три из наиболее известных (исключая NXT-G).

Бесплатная среда Robolab (http://www.legoengineering.com/) в чём-то похожа на NXT-G. Она также построена на базе LabVIEW, алгоритм записывается в виде блоков. Однако Robolab более гибок, в нём можно использовать, например, текстовое описание функций. В [2] эта среда используется как основное средство программирования.

Бесплатная среда Bricx Command Center с языком программирования

NXC (http: //bricxcc.sourceforge.net/). Си-подобный язык, позволяющий создавать программы компактные и быстрые. В прошлом году автор языка выпустил второе издание руководства для программиста [6].

Платная (и довольно дорогая) среда RobotC (http: //www. robotc . net/). Хорошая среда разработки, комплект виртуальных миров для программирования виртуального же робота. Сам язык довольно сильно похож на NXC. Развивающийся и хорошо поддерживаемый проект.

Отдельно следует отметить относительно новую отечественную разработку QReal:Robots. Это бесплатная среда визуального программирования, созданная для использования в общеобразовательном учреждении взамен NXT-G и Robolab и (по заверениям авторов) учитывающая пожелания школьных учителей. Среда полностью русскоязычна, имеет виртуальную двумерную модель робота, способную выполнять те же программы, что и реальный Lego-робот. Кроме того, имеется возможность генерации графической программы в текстовый язык «русский Си». Достаточно беглое знакомство с QReal:Robots не позволяет сделать каких-либо серьёзных выводов, но создаёт впечатление, что это очень перспективная разработка, заслуживающая внимания отечественного образования.

Мы имеем некоторый опыт перехода к изучению программирования роботов после освоения младшими школьниками языка программирования Scratch (scratch.mit.edu). Хочется остановиться на этом более подробно.

Enchanting как базовая среда для программирования робота Lego Mindstorms NXT 2.0

В течение нескольких лет мы ведём кружки по программированию в среде Scotch [7]. Эта среда очень привлекательна как для младших школьников, так и для 5-8-классников (и, как показывает практика, — даже для студентов) благодаря интуитивно понятному графическому интерфейсу и возможности достаточно легко и быстро создавать свои творческие проекты различного жанра (от компьютерных игр до математических моделей). Программы здесь создаются из разноцветных блоков-команд. Scratch поддерживает технологию объектно-ориентированного программирования (в новой версии неявно введено понятие класса) и многопоточности. К сожалению в российском школьном образовании эта среда пока не нашла себе достойного места. Однако есть учителя-энтузиасты, которые занимаются с детьми Scratch во внеурочное время.

Параллельно Scratch мы ведём занятия в робототехническом кружке для школьников 5-8 классов по программированию робота Lego Mindstorms. Школьники 5-6 классов программируют на NXT-G, а 7-8 классы изучают NXC. Ребята, уже владеющие каким-либо языком программирования, справляются с поставленными задачами намного легче, чем те, кто изучает программирование сразу на роботах. Однако определённые трудности возникают и у тех, и у других. Связано это, как

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

Поэтому мы решили в качестве эксперимента ввести робототехнику у младших школьников, изучающих Scratch. Мы понимали, что NXT-G с ними изучать можно, но это будет сложно из-за отсутствия русифицированной версии (такая версия имеется для набора Lego for education, но лицензия на неё слишком дорогая). Кроме того, NXT-G — это новый для детей инструмент, требующий отдельного изучения и отвлекающий силы от собственно робототехники.

В качестве идеального нам представляется вариант изучения программирования роботов при помощи самого Scratch. Это, в принципе, возможно, поскольку среда имеет набор команд для программирования робота Lego WeDo (блоки становятся доступны через меню Редактировать \ Показать блоки мотора). Однако при таком подходе необходимы дополнительные финансовые затраты на покупку отнюдь не дешёвого конструктора Lego WeDo (по сравнению с Lego Mindstorms, который имеет намного больше деталей и в придачу собственный процессорный блок). Да и количество команд языка, и возможности этого робота сильно ограничены.

Несколько лет назад на основе Scratch19 была создана среда для программирования робота Lego Mindstorms — Enchanting (на момент написания статьи версия 0.2.4.1: http://enchanting.robotclub.ab.ca). Она не русифицирована, но является надстройкой по отношению к Scratch, поэтому все исходные команды Scratch по-прежнему доступны на родном языке. Для работы с Enchanting требуется перепрошить системный блок Lego, поместив на него систему leJOS, основанную на Java (http://www.lejos.org/).

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

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

19 В действительности, на основе Scratch разработана среда Snap/ (бывшая BYOB (Build Your Own Blocks): http://byob.berkeley.edu/), в которой добавлена возможность создания собственных блоков. А уже на основе BYOB построена среда Enchanting.

снять и сбросить показания сенсора вращения, остановить двигатели.

Необычные средства, по сравнению с другими средами программирования, предоставляет новое меню Driving. Здесь вначале нужно сконфигурировать не только двигатели, но и параметры колёсной базы: требуется задать диаметр и ширину колёс ведущей пары. После этого программист может дать роботу команду, например, повернуть на 45 2М (не вал двигателя, а весь робот!), проехать 10 см, повернуть по дуге с радиусом 50 см, установить скорость движения в 20 см/с, установить ускорение движения в 15 см/с2 и пр. Для первоначального ознакомления с программированием роботов такой подход оправдан и во многом более понятен, так как похож на использование исполнителя типа черепашки Logo или кота в Scratch. Разумеется, можно и не использовать возможности меню Driving и программировать аналогичные блоки самому.

Несмотря на то, что проект не добрался даже до первой версии, программировать в нём удобно. Однако есть некоторые не вполне очевидные моменты, которые могут поначалу испортить впечатление от знакомства с Enchanting.

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

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

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

Среди других особенностей языка можно назвать отсутствие работы с файлами, поддержку Bluetooth-связи между роботами и ряд других. Мы надеемся, что эти возможности появятся в новых версиях Enchanting, поскольку автор активно занимается развитием своего проекта.

Выводы

Распространённость набора Lego Mindstorms NXT 2.0 говорит о его популярности в образовательной робототехнике. Большое количество языков, разработанных для него, позволяет каждому пользователю выбрать для себя наиболее подходящий. Это позволяет совершить переход к программированию роботов Lego практически безболезненно. После изучения языка программирования Scratch удобно начать программирование робота при помощи среды Enchanting, обладающей интересными возможностями и предоставляющей ученикам знакомый и удобный интерфейс.

Литература

1. Копосов Д.Г. Первый шаг в робототехнику: практикум для 5-6 классов / Д.Г.Копосов. - М.: БИНОМ. Лаборатория знаний, 2012. — 286 с.

2. Филиппов С.А. Робототехника для детей и родителей. — СПб.: Наука, 2013. — 319 с.

3. Блог А. Колотова «NiNoNXT». URL: http ://nnxt. blogspot. ru Режим доступа: 21.07.2013 г.

4. Kelly J. F. LEGO MINDSTORMS NXT-G Programming Guide, Second Edition, Apress, 2010, 317 p.

5. Griffin T. The Art of Lego Mindstorms NXT-G Programming, No Starch Press, 2010, 261 p.

6. Hansen J. C. Lego NXT Power Programming: Robotics in C. Second edition, Variant Press, 2012, 543 p.

7. Дженжер В. О. Проектная деятельность школьника в среде программирования Scratch: методическое пособие / В.О. Дженжер, В.Г.Рындак, Л.В. Денисова; Мин-во образования и науки РФ — Оренбург: Оренб. гос. ин-т. Менеджмента, 2009. — 117 с. URL: sites.google.com/site/orenscratch/nasi-razrabotki

i Надоели баннеры? Вы всегда можете отключить рекламу.