Программируемый робот Lego Mindstorms EV3 — Джиробой


Петр Легенченко провел со своим племянником десять часов в сборке программируемого робота Lego Mindstorms EV3 и понял, почему этот конструктор не продается в обычных магазинах.

«Понимаете, — объяснял мне представитель команды LEGO EDUCATION в России, — эти наборы не продаются в обычных магазинах. Мы не хотим, чтобы покупатели обманывались в ожиданиях. Многие воспринимают наши конструкторы как покупку времени. Вы приобретаете набор, даете ребенку и получаете час или два свободы, чтобы ногти покрасить или машину помыть. Но с этими программируемыми роботами Mindstorms EV3 так не получится, они слишком сложные, и вам придется разбираться вместе».




У моего племянника Феди небольшая комната: кровать, письменный стол, комод. Все это уложено, как плиткой, книгами (сейчас он читает Воннегута), а сверху равномерно приправлено деталями лего, кое-где в лего-ковре потерпели крушение лего-космические корабли. Из-под всего этого торчит монитор компьютера: на экране выстроилась внушительная армия в средневековых доспехах. Словом, картина довольно типичная. — Будем собирать мотоцикл, — говорит Федя. — Почему мотоцикл? — Мотоцикл — это клево.

Вообще-то, из этой серии конструкторов можно собрать все, на что хватит фантазии и деталей (хотя дополнительные элементы всегда можно взять из любого другого конструктора). Но есть базовый набор роботов, к которым прилагаются программное обеспечение и подробная инструкция. Я немного сомневаюсь в своих способностях с ходу собрать что-то без пошагового руководства, но решаю довериться Федору. В конце концов, у нас, мальчиков, должна быть врожденная техническая интуиция. Сердце конструктора — небольшая коробочка размером с две сигаретные пачки, которая официально называется «кирпич» (brick). В ней находится мини-процессор, сравнимый по мощности, как уверял меня представитель Lego Education, с процессором смартфона — в это сложно поверить, но, в конце концов, мы пока не планируем строить ничего сложного. Кирпич имеет набор входных и выходных слотов: через входные процессор может получать сигнал с датчиков (датчика движения, датчика расстояния, датчика цвета, датчика прикосновения и гироскопа), на выходные подается команда для двигателей — скорость, мощность, направление вращения, количество оборотов. В зависимости от поступающих сигналов двигатели управляются составленной вами и содержащейся в памяти кирпича программой.

Немного потыкав в кнопки кирпича (маленький монохромный дисплей не слишком информативен), мы устанавливаем на лэптоп приложение с обучающими роликами, пошаговыми инструкциями по сборке и программированию роботов и саму среду программирования. Среда эта на первый взгляд устроена достаточно интуитивно — операторы выглядят как разноцветные картинки, внутри которых можно указать параметры: например, количество повторений цикла или скорость вращения двигателя. Их можно соединить между собой линиями, составляя, по сути, блок-схему. Готовая блок-схема нажатием одной кнопки отправляется через USB-провод в кирпич, который может ее автономно выполнять.

Я лезу в раздел с базовой инструкцией по программированию и описанием операторов. Федя смотрит на меня с удивлением и, кажется, легкой иронией во взгляде, после чего отбирает лэптоп. — Будем программировать сразу.

Я не возражаю. Во-первых, инструкции — это и правда как-то не по-пацански (врожденная техническая интуиция!), во-вторых, мой юный друг имеет богатый опыт обращения с лего. Федор быстро двигает мышкой по экрану разноцветные операторы, соединяя их в причудливую сеть. В слоты кирпича вставлены двигатели и датчики, кнопка загрузки нажата и... ничего не происходит. — Ага, — говорит Федя с тем же достойным подражания спокойствием. — Федя, а ты понимаешь, почему ничего не заработало? — Ну-у... Конечно, понимаю. — Федя, а что вот этот оператор делает? — Ну-у, вроде двигатель вращает. А, нет, это он сигнал с датчика получает. Или погоди, не-е, это цикл!

На часах тем временем уже полдесятого вечера. Пора, пожалуй, перехватить инициативу, думаю я, забираю у Федора компьютер и снова погружаюсь в изучение инструкций. Минут через десять я примерно представляю, каким оператором запускать двигатель, каким — получать сигнал от датчика прикосновения.

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

Я вытаскиваю мышкой на рабочий стол нужные операторы, тяну между ними соединительные линии, которые никак не хотят пристыковываться в правильные места. Скрючившись на кое-как расчищенном квадратном полуметре пола, я начинаю потихоньку сатанеть. — Ладно уж, дай я, — приходит на помощь Федор.

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

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

Особого восторга никто из нас не испытывает — мы оба, судя по всему, рассчитывали за 1S минут сконструировать катающийся по потолку мотоцикл. В действительности же за три часа мы не освоили и десятой части программных возможностей Lego EV3, хотя базовые принципы, в общем-то, нам теперь ясны.

Мне пора домой, и мы договариваемся в следующий раз встретиться пораньше.

Через несколько дней я отправляюсь к Федору с утра с призывом все-таки собрать какого-нибудь робота, пусть и по инструкции. Основной базовый робот конструктора Lego EV3 называется Gyroboy (Джиробой). Я уже видел его в собранном виде в офисе Lego Education и в роликах на YouTube. Джиробой, надо сказать, поразил мое искушенное воображение: на ногах у него два колеса, причем расположены они не последовательно, как у мечты Феди, мотоцикла, а параллельно, как у двухколесной хозяйственной тележки. И Джиробой с помощью гироскопа умеет на них балансировать, не падает, даже если его немного подтолкнуть. Более того, робот может ездить и разворачиваться в зависимости от воздействия на датчики: если показать ему зеленую пластину, он движется вперед, если красную — останавливается, желтую или синюю — поворачивает влево или вправо. Джиробой с помощью датчика расстояния умеет видеть преграды и останавливаться, не достигая их. Словом, в нем воплощены почти все основные возможности конструктора. — Давай собирать Джиробоя, — решаю я.

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

Я решаю не полагаться на наши врожденные технические таланты, а действовать строго по инструкции. Нам нужно собрать «железо», самого Джиробоя, а дальше просто загрузить в его память уже готовую программу, управляющую всеми датчиками. Задача, кажется, вполне решаемая. — Знаешь, Федя, я лего не очень-то умею собирать. Давай ты будешь соединять детали по инструкции, а я тебе буду нужные подавать. — Хорошо, я вот как раз искать нужные детальки в куче не очень люблю.

Мы открываем инструкцию, в ней около 120 шагов. Мне сложно оценить, много это или мало, но Федя уверяет, что давеча собирал космический корабль в тысячу этапов. В общем, Джиробой это вроде как раз плюнуть. Расчищаем немного открытого пространства на полу и приступаем. Детали расфасованы в отдельные пакеты, сначала я пытаюсь сохранить порядок и ищу нужные планочки, шестеренки и соединительные штырьки в мешочках. Занимает это каждый раз примерно минуту. Вскоре Федя решительно ссыпает все компоненты в кучу. — Так проще, вот увидишь.

Он прав, детали в куче я нахожу намного быстрее, хотя и не так быстро, как Федя успевает присоединять их к постепенно вырисовывающемуся остову Джиробоя. У нас вырабатывается жаргон: — Дай две черные собачки, две палки на 6 и слоника. — Собачки двойные или четверные?

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

Инструкция Lego Mindstorms EV3 для неискушенного взрослого больше всего напоминает инструкцию по сборке мебели из ИКЕА. Как и с ИКЕА, чем сложнее уже готовая конструкция, тем менее наглядно выглядит следующий шаг: места присоединения очередных деталей указаны стрелочками, ведущими куда-то вглубь полусобранного Джиробоя; мне приходится наклоняться к экрану лэптопа почти в упор, чтобы выяснить, на сколько именно дырочек должна торчать очередная планка. Ракурс, в котором конструкция изображена на картинке, постоянно оказывается не тем, в котором я вижу ее у себя в руках. Порой мне не хватает пространственного воображения (а я считал его неплохим — все-таки математик по образованию), чтобы понять, как две собранные отдельно части соединяются между собой. Федя в таких случаях приходит на помощь, у него все получается без труда, но сменить меня он не торопится, возможно, это тот самый детский садизм. Теперь уже он находит детали намного быстрее. Когда спустя два часа, шаге на 90-м, я вижу в инструкции надпись: «...а теперь зеркально-симметрично повторите предыдущие 15 действий», решаю, что пришло время для второго перекура.

Наконец, последняя деталь встает на место. Правда, Джиробой получился какой-то немного корявый, как не совсем аккуратно сложенная поделка оригами. Одна рука торчит вверх, другая опустилась слишком низко. Подозреваю, могла быть ошибочка на 95-м шаге сборки. Но после четырехчасовой работы хочется поскорее испытать робота в деле. Зову Федю, устанавливаю робота на стартовой станине (чтобы не падал — у него же всего два колеса), подсоединяю к компьютеру, загружаю готовую программу. Осталось нажать на кнопку «Старт».

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

Ракетный комплекс «Булава». Спутник «Глонасс-М». «Фобос-Грунт». Джиробой. — Ага, — подводит итог Федор.

Да, ошибка была на 95-м шаге. Кроме того, я перепутал местами пару проводов. Это все выяснилось уже на другой день: после катастрофы мы были слишком опустошены, чтобы заниматься поисками ее причины. Я забрал робота домой и на следующий день за пару часов устранил все неполадки. Джиробой заработал, совсем как в видеороликах. Теперь он уверенно держится на двух колесах и даже может заехать на небольшой уклон и при этом не упасть. Мы с Федей довольны и планируем теперь строить мотоцикл. Я возьму на себя сборку, а Федя будет писать программу.

Вдохновленный успехом, я кое-что вспомнил. 1986 год. Мы, несколько соседей-мальчиков, забросив велосипеды на балконах и солдатиков в ящиках, собираемся на лестничной площадке и часами боремся с программируемым микрокалькулятором МК-61. Мы вводим в его крохотную память код игры, а на экране то и дело вспыхивает страшное слово ERROR, после которого последовательность команд надо вводить заново и, раз за разом вглядываясь в горящие зеленым цветом цифры, пытаться посадить умозрительный космический корабль на не менее умозрительную Луну. Игра называлась «Посадка на Луну».

А через пару лет у Юры из 132-й квартиры появилась приставка «Денди». Потом Илье из 134-й купили компьютер ZX-Spectrum и тысячу кассет с играми. Диме из 131-й досталась мечта каждого мальчишки начала 1990-х — приставка SEGA. Я держался дольше всех: на принесенной папой с работы советской персоналке «Искра» осваивал Turbo Pascal, пытаясь запрограммировать хотя бы простенькую графическую игру — «ходилку». Но за стеной мои друзья рубились в черепашек-ниндзя, и это было слишком большим искушением, слишком доступным удовольствием, чтобы, отказавшись от него, корпеть за монохромным монитором.

Наше с Федей желание собрать мотоцикл — это на самом деле небольшая победа программируемых роботов над тем, как устроен современный мир — сделанный в Китае, в котором все либо работает, либо летит в урну и в котором плоская упаковка со шкафом ИКЕА вызывает легкое отвращение. А еще я убедился, что Lego EV3 — это не покупка свободного от общения с ребенком времени, а инвестиция в будущее. Моему будущему сыну не придется мучиться с программируемым калькулятором МК-61. Но вот столкновение с Джиробоем или одним из его потомков я ему гарантирую.