Lego Mindstorms NXT 2.0 — краткое знакомство
Лет эдак в 10-11, после долгих и беззаботных лет игры с контрукторами Lego, я узнал о существовании великолепного набора Mindstorms, который позволял создавать самых настоящих роботов без специализованных знаний электроники, электротехники и даже программирования. Я сразу же заинтересовался данной серией, но тогда моим мечтам обладать Mindstorms по различным (в основном — финансовым) причинам не суждено было сбыться.
Сейчас мне 20 и в честь юбилея друзья (спасибо им!) решили окунуть меня назад в детство и таки дать возможность полепить собственных роботов. Правда, в этот раз всё будет серьёзнее, чем в моих детских мыслях — мы будем действительно программировать Mindstorms под Debian GNU/Linux.
Что же это?
Mindstorms NXT 2.0 — третий продукт в линейке Mindstorms — специальной серии конструкторов Lego, предназначенной для создания программируемых роботов. Конструктор поставляется с набором обычных деталей серии Lego Technic, а также специальных сенсоров (расстояния, освещенности, касания), нескольких двигателей-тахометров и специального блока NXT. Подробнее о ко Mindstorms можно узнать из вот этой статьи.
К слову о NXT — в этой небольшой коробочке припрятаны целых два микроконтроллера — 32-битный ARM7 и 8-битный AVR, 512 Мб RAM, более 256 Кб flash-памяти, монохромный ЖК-дисплей, динамик, USB-порт, а также 7 портов для подключения сенсоров. А, да — еще отсек для 6 батареек или аккумулятора, который продается отдельно на сайте shop.lego.com. Собственно, NXT и является «сердцем» любого создаваемого робота.
Ознакомившись с кратким руководством, включенным в комплект, можно вполне себе создать робота, который выполняет какие-нибудь нехитрые действия вообще без всякого программирования. Например, за буквально 40 минут вместе со сборкой, можно сделать робота, который будет ездить по комнате и старательно избегать препятствия. Это делается прямо на самом устройстве, без подключения к компьютеру, на встроенном монохромном дисплее.
Неплохо, да?
Собственно, данный робот и будет нашей основной тестовой моделью. Но мы попробуем немного усовершенствовать его навыки. И для этого мы напишем небольшой кусочек кода.
А как?
Действительно. Идущее в комплекте ПО работает только в Windows и Mac OS. А у нас, внезапно, Debian Squeeze. К счастью, Mindstorms обладает огромным сообществом фанатов, которые придумали решение данной проблемы — использование альтернативного ПО для программирования роботов, в частности Bricxcc (здесь выложен полнейший мануал по настройке всего и вся).
А теперь немного теории — в программировании Mindstorms, как правило, помимо визуального среды ROBOLAB для Windows и Mac OS используется язык RCX, однако среди фанатов одним из наиболее популярных языков является достаточно простой NXC (Not eXactly C). Простая программа на NXC выглядит примерно так:
- task music()
- int lastTone=5000;
- while ( true )
- int tone= Random (5000)+500;
- int duration= Random (500);
- PlayTone(tone,duration);
- Wait(duration);
- >
- >
- task main()
- start music;
- while ( true )
- /* Determine Next Action */
- unsigned int duration= Random (5000);
- unsigned int motorSpeed= Random (100);
- unsigned int syncMode= Random (3);
- /* Display Next Action */
- ClearScreen();
- NumOut(0,LCD_LINE1,duration);
- NumOut(0,LCD_LINE2,motorSpeed);
- NumOut(0,LCD_LINE3,syncMode);
- /* Perform Next Action */
- switch (syncMode)
- case 0:
- OnFwdReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
- break ;
- case 1:
- OnRevReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
- break ;
- case 2:
- OnFwdSync(OUT_AC,motorSpeed,-100);
- break ;
- case 3:
- OnRevSync(OUT_AC,motorSpeed,-100);
- break ;
- >
- Wait(duration);
- >
- >
Для справки — данная программа заставляет «танцевать» нашего робота под нечто, напоминающее музыку.
Не буду спорить, программа совсем не сложна для понимания, но достаточно громоздка. И её можно заметно упросить, используя вместо написания кода на NXC специальный конвертер PyNXC. Иначе говоря, мы будем писать код на Python’е, а PyNXC будет преобразовывать его в NXC-код и загружать на устройство, избавив нас от необходимости писать громоздкий код на подобии Си.
Пишем программу!
Ну, а теперь, собственно, напишем на Python’е программу для путешествия нашего робота среди прозрачных чашек, но используя более грамотный алгоритм разворота:
- # in cm
- DEFINE NEAR = 7
- def main():
- DefineSensors(None, None, None, EYES)
- while True:
- OnFwd(OUT_BC, 50)
- while SensorVal(4) > NEAR:
- pass
- Off(OUT_BC)
- while SensorVal(4) < NEAR:
- OnFwd(OUT_B, 50)
- Wait(100)
Теперь наш робот научился разворачиваться на месте и, как только мешающий объект пропадет с поля его зрения, продолжать движение вперед.
Как вы уже, наверное, заметили, программировать Mindstorms очень просто. Стоит также сказать, что помимо NXC и Python с использованием PyNXC, можно писать код на Java, Lua, Ruby, Ассемблере, а также, что логично, использовать ассемблерные вставки в других языках.
Благодаря всему этому Mindstorms из детской игрушки превращается в весьма мощную штуку, позволяющую создавать сложные и «умные» механизмы, как например вот эта гитара:
Или этот сортировщик цветных шариков:
- Официальный сайт Lego Mindstorms
- Раздел Mindstorms в официальном интернет-магазине Lego
- NXTprograms.com — ресурс с инструкциями по сборке самых разных моделей
LEGO MINDSTORMS Education EV3 + MicroPython: программируем детский конструктор взрослым языком
Привет, Хабр! Мы уже рассказывали о платформе LEGO MINDSTORMS Education EV3. Основные задачи этой платформы — обучение на практических примерах, развитие навыков STEAM и формирование инженерного мышления. В ней можно проводить лабораторные работы по изучению механики и динамики. Лабораторные стенды из кубиков LEGO и утилиты по регистрации и обработке данных делают опыты еще интереснее и нагляднее и помогают детям лучше понять физику. Например, школьники могут собрать данные о температуре плавления и с помощью приложения систематизировать их и представить в виде графика. Но это только начало: сегодня мы расскажем, как дополнить этот набор средой программирования MicroPython и использовать его для обучения робототехнике.
Учим программированию с помощью EV3
Современные школьники хотят видеть красочный результат. Да, им скучно, если программа выводит в консоль числа, и они хотят рассматривать цветные графики, диаграммы и создавать настоящих роботов, движущихся и выполняющих команды. Обычный код тоже кажется детям слишком сложным, поэтому обучение лучше начинать с чего-нибудь полегче.
Базовая среда программирования EV3 создана на основе графического языка LabVIEW и позволяет задавать алгоритмы для робота визуально: команды представлены в виде блоков, которые можно перетаскивать и соединять.
Такой способ хорошо работает, когда нужно показать, как строятся алгоритмы, но он не подходит для программ с большим количеством блоков. При усложнении сценариев необходимо переходить на программирование с помощью кода, но детям трудно сделать этот шаг.
Здесь есть несколько хитростей, одна из которых — показать, что код выполняет те же задачи, что и блоки. В среде EV3 это можно сделать благодаря интеграции с MicroPython: дети создают одну и ту же программу в базовой среде программирования с помощью блоков и на языке Python в Visual Studio Code от Microsoft. Они видят, что оба способа работают одинаково, но кодом решать сложные задачи удобнее.
Переходим на MicroPython
Среда EV3 построена на базе процессора ARM9, и разработчики специально оставили архитектуру открытой. Это решение позволило накатывать альтернативные прошивки, одной из которых стал образ для работы с MicroPython. Он позволяет использовать Python для программирования EV3, что делает работу с набором еще ближе к задачам из реальной жизни.
Чтобы начать работать, нужно скачать образ EV3 MicroPython на любую microSD-карту, установить ее в микрокомпьютер EV3 и включить его. Затем нужно установить бесплатное расширение для Visual Studio. И можно приступить к работе.
Программируем первого робота на MycroPython
На нашем сайте есть несколько уроков для освоения базовых понятий робототехники. Модели на EV3 знакомят детей с азами, которые используются в самоуправляемых автомобилях, заводских роботах-сборщиках, станках с ЧПУ.
Мы возьмем для примера чертежную машину, которую можно научить рисовать узоры и геометрические фигуры. Данный кейс является упрощенным вариантом взрослых роботов-сварщиков или фрезеровщиков и показывает, как можно использовать EV3 совместно с MicroPython для обучения школьников. А еще чертежная машина может разметить отверстия в печатной плате для папы, но это уже другой уровень, требующий математических расчетов.
Для работы нам понадобятся:
- базовый набор LEGO MINDSTORMS Education EV3;
- большой лист клетчатой бумаги;
- цветные маркеры.
Сначала инициализируем библиотеку модулей EV3:
#!/usr/bin/env pybricks-micropython from pybricks import ev3brick as brick from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor, GyroSensor) from pybricks.parameters import Port, Stop, Direction, Color, ImageFile from pybricks.tools import wait
Настраиваем платформу, которая вращает ручку как мотор в порте B. Задаем передаточное отношение двухступенчатой зубчатой передачи с количеством зубьев 20-12-28 соответственно.
turntable_motor = Motor(Port.B, Direction.CLOCKWISE, [20, 12, 28])
Настраиваем подъемный механизм для ручки как мотор в порте C:
seesaw_motor = Motor(Port.C)
Настраиваем гироскоп, измеряющий угол наклона ручки, в порте 2:
gyro_sensor = GyroSensor(Port.S2)
Настраиваем цветовой датчик в порте 3. Датчик используется, чтобы определять белую бумагу под чертежной машиной:
color_sensor = ColorSensor(Port.S3)
Настраиваем датчик касания в порте 4. Робот начинает рисовать, когда датчик нажат:
touch_sensor = TouchSensor(Port.S4)
Определяем функции, которые поднимают и опускают ручку:
def pen_holder_raise(): seesaw_motor.run_target(50, 25, Stop.HOLD) wait(1000) def pen_holder_lower(): seesaw_motor.run_target(50, 0, Stop.HOLD) wait(1000)
Определяем функцию для поворота ручки на заданный угол или до определенного угла:
def pen_holder_turn_to(target_angle): if target_angle > gyro_sensor.angle():
Если целевой угол больше, чем текущий угол гироскопического датчика, продолжаем движение по часовой стрелке с положительной скоростью:
turntable_motor.run(70) while gyro_sensor.angle() < target_angle: pass elif target_angle < gyro_sensor.angle():
Если целевой угол меньше, чем текущий гироскопического датчика, то двигаемся против часовой стрелки:
turntable_motor.run(-70) while gyro_sensor.angle() > target_angle: pass
Останавливаем вращающуюся платформу, когда целевой угол будет достигнут:
turntable_motor.stop(Stop.BRAKE)
Устанавливаем начальное положение ручки в верхнем положении:
pen_holder_raise()
Теперь идет основная часть программы — бесконечный цикл. Сначала EV3 ожидает, когда датчик цвета обнаружит белую бумагу или синюю стартовую клетку, а датчик касания будет нажат. Затем он рисует узор, возвращается в исходное положение и повторяет все заново.
Когда устройство не готово, светодиоды на контроллере принимают красный цвет, и на ЖК-экране отображается изображение «палец вниз»:
while True: brick.light(Color.RED) brick.display.image(ImageFile.THUMBS_DOWN)
Дожидаемся, когда датчик цвета считает синий или белый цвет, устанавливаем цвет светодиодов зеленым, отображаем на ЖК-экране изображение «палец вверх» и сообщаем, что устройство готово к работе:
while color_sensor.color() not in (Color.BLUE, Color.WHITE): wait(10) brick.light(Color.GREEN) brick.display.image(ImageFile.THUMBS_UP)
Дожидаемся нажатия датчика касания, присваиваем гироскопическому датчику значение угла 0 и начинаем рисовать:
while not touch_sensor.pressed(): wait(10) gyro_sensor.reset_angle(0) pen_holder_turn_to(15) pen_holder_lower() pen_holder_turn_to(30) pen_holder_raise() pen_holder_turn_to(45) pen_holder_lower() pen_holder_turn_to(60)
Поднимаем держатель ручки и возвращаем его в исходное положение:
pen_holder_raise() pen_holder_turn_to(0)
Вот такая несложная программа у нас получилась. И теперь запускаем ее и смотрим на робота-чертежника в деле.
Что дают такие примеры
EV3 — это инструмент для профориентации в рамках профессий STEM и точка входа в инженерные специальности. Так как на нем можно решать практические задачи, дети получают опыт технических разработок и создания промышленных роботов, учатся моделировать реальные ситуации, понимать программы и анализировать алгоритмы, осваивают базовые конструкции программирования.
Поддержка MicroPython делает платформу EV3 подходящей для обучения в старших классах. Ученики могут попробовать себя в роли программистов на одном из самых популярных современных языков, познакомиться с профессиями, связанными с программированием и инженерным проектированием. Наборы EV3 показывают, что писать код — это не страшно, готовят к серьезным инженерным задачам и помогают сделать первый шаг к освоению технических специальностей. А для тех, кто работает в школе и связан с образованием, у нас подготовлены программы занятий и учебные материалы. В них детально расписано, какие навыки формируются при выполнении тех или иных задач, и как полученные навыки соотносятся со стандартами обучения.
- lego
- lego mindstorms
- ev3
- конструктор
- детское программирование
- Блог компании LEGO Education
- Python
- Программирование
- Учебный процесс в IT
- Робототехника
Среда программирования EV3
Среда программирования Lego Mindstorms EV3 была разработана компанией National Instruments. В ее основе лежит мощная среда инженерного программирования LabVIEW.
Программирование является визуальным и осуществляется перетаскиванием пиктограмм (иконок) в рабочее окно.
Графический интерфейс языка программирования EV3 поддерживает большинство структур программирования и дает возможность создавать сложные алгоритмические конструкции.
Обзор среды программирования EV3
Двойным нажатием левой кнопки мыши на иконку LEGO MINDSTORMS Education EV3 запускаем среду программирования EV3. У меня установлено программное обеспечение для педагога т.к. оно дает больше возможностей.
После того, как среда программирования запустится сразу появляется окно — «Что нового в этой версии». Можно прочитать и лучше в левом нижнем углу поставить галочку у надписи «Do not show again for this version».
Теперь каждый раз при запуске ПО это окно не будет появляться. Запустив приложение, мы попадаем в основное окно под названием «Лобби». В окно «Лобби» легко перейти если нажать кнопку «Лобби» в верхнем левом углу.
Внешний вид кнопки похож на панель управления микрокомпьютера EV3. Также в левой верхней части находятся кнопки меню:
- Файл
- Редактировать
- Инструменты
- Справка
В правой верхней части окна «Лобби» можно увидеть логотип «LabVIEW» и значки:
- Свернуть
- Свернуть в окно
- Закрыть
Также слева в образовательной версии расположены динамические ярлыки, которые открывают доступ к инструкциям, мультимедийным справочным материалам и т.д.
На данный момент в установленной версии есть семь ярлыков из которых четыре активированы и три являются неактивными.
Активные ярлыки:
- Начало работы
- Новый проект
- Руководство (самоучитель)
- Инструкции по сборке
Неактивные ярлыки:
- Конструкторские проекты
- Космическое задание
- Окружающий мир
Для того, чтобы эти ярлыки стали активными нужно с официального сайта дополнительно загрузить и установить необходимые учебные материалы. Учебные материалы можно скачать бесплатно.
Также в левом нижнем углу находится кнопка «Просмотр», позволяющая переходить в основное меню и кнопка «Поиск», помогающая по заданным критериям осуществлять поиск проектов.
Динамические ярлыки
- Начало работы содержит рекомендации по сортировке деталей, их маркировки, начале работы с микроконтроллером EV3. Также в этом разделе есть примеры создания первых простейших программ и схема сборки приводной платформы. Для преподавателей в этом разделе создан PDF файл с советами как эффективно преподавать изучаемый материал.
- Новый проект позволяет создать новую программу или новый эксперимент.
- Руководства (самоучитель) является подборкой учебных материалов для знакомства пользователей с обучающими программами.
- Инструкции по сборке содержат конструкторские идеи с пошаговыми инструкциями для создания роботов. Модели для базового набора помогают собрать четыре базовых модели с использованием основного набора.
- Для обладателей основного и ресурсного набора есть инструкции для сборки и программирования еще шести моделей роботов. Перечень деталей Lego содержит два PDF файла с перечнем деталей наборов 45544 и 45560. Это основной и ресурсный набор Lego EV3.
В одной из следующих статей я расскажу о создании нового проекта.
Среда программирования Lego Mindstorms EV3. Lobby
При подготовке материала использовались источники:
https://habr.com/ru/articles/116408/
https://habr.com/ru/companies/legoeducation/articles/474562/
https://legoteacher.ru/osnovy-robototehniki/sreda-programmirovaniya-ev3/