АрдуЛисп: революционное решение в области образовательной робототехники

в 6:16, , рубрики: osdlab, pinlab, Лисп, Лисп-машина, Образовательная робототехника, соревновательное программирование

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

Интерфейс программы АрдуЛисп

Интерфейс программы АрдуЛисп

Все известные решения в области образовательной робототехники в мировой практике имеют возрастной порог:

  • либо 7+ – для быстрого вхождения, в котором используется блочный визуальный язык программирования от компании GoogleBlockly (Блокли). Так Blockly является основой оболочки Scratch (Скретч).

  • либо 14+ – использование скриптовых языков программирования: С++,Java, Python, Lua.

Однако, если ученик сначала осваивает блочный язык программирования, результатом которого является формирование алгоритмического стиля мышления, то это может произойти достаточно быстро, например к возрасту 11-12 лет, то возрастной порог всё ещё не позволяет перейти к полноценному изучению скриптовых языков программирования с высоким порогом вхождения 14+.

Компания Лего, в своё время озадачилась этой проблемой. Так появились конструкторы Lego Spike, которые можно программировать как на Scratch так и на microPython. Однако microPython имеет также порог вхождения 14+. Об этом свидетельствуют производители отечественной IoT платы от компании PinLab на базе микроконтроллера ESP8266.

Всё же, наибольший интерес представляет образовательная робототехника на основе Ардуино, поскольку тут можно достичь знаний языка программирования С++ и возможности работать над проектами любой сложности. Но это базовое решение требует высокого порога вхождения, не менее 14+.

Для снижения порога вхождения в программирования платформы Ардуино на С++ существует отечественное решение - Ardublock, среда в которой можно составить программу в виде блоков и автоматически получить её аналог на языке С++. Это довольно хорошее решение, но оно обладает некоторыми недостатками, к сожалению, в большинстве случаев связанными непосредственно с политикой автора. Но здесь мы на этом останавливаться не будем...

Языки программирования Python, Java, Lua могут также использоваться в Ардуино-проектах, превращая плату в интерпретатор этих языков, что можно расценивать как модельное преимущество, в отличии от компилируемого С++. Недостатком использования этих языков программирования является то, что им требуется более мощный микроконтроллер, например, ESP или STM. Кроме того, эти решения требуют всё-равно возрастного порога 14+.

Язык программирования ЛИСП, «открытый» Джоном Маккарти в 50-х годах прошлого века, способен решить проблему 11+. Следует отметить, что Джоном Маккарти является автором понятия AI (Искусственный Интеллект). То есть его язык программирования изначально создавался для реализации AI подхода в ЛИСП-машинах. Сейчас это совсем не очевидно. Но с другой стороны можно точно сказать, что из любой Ардуино-совместимой платы, в современных условиях, можно сделать интерпретатор языка ЛИСП, т.е. ЛИСП-машину. Для этого нужно обратить своё внимание на проект - uLisp.

LISP, в отличие от других интерпретируемых языков - Python, Java, Lua, в версиях для микроконтроллеров, имеет свои преимущества.

Во-первых, как уже было отмечено, ЛИСП-машину можно собрать из любой платы Ардуино на базе микроконтроллеров AVR, даже на Arduino Nano! Конечно, здесь оптимальным решением будет использование Arduino Mega, но всё же!

Во-вторых, при использовании Arduino UNO, Nano или Mega, мы можем позволить себе задействовать симулятор электрических схем - SimulIDE в качестве среды для экспериментов. Для этого потребовалось добавить в SimulIDE плагин UDP-serial и коррекцию работы с UTF-8.

Работа ЛИСП программы в SimulIDE
Работа ЛИСП программы в SimulIDE

В-третьих, язык программирования uLisp достаточно простой в сравнении с microPython и другими интерпретаторами. Здесь нет пересечения множества парадигм, что оптимально для начинающих программистов. С другой стороны, изначально ЛИСП считается языком функционального программирования, однако при реализации uLisp на Blockly практически 100% всего императивного функционала в нём беспроблемно реализуется.

Перечислим преимущества оболочки АрдуЛисп в сравнении с Ardublock:

  • Не нужно компилировать программу. Программы uLisp запускаются в режиме интерпретатора.

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

  • Возможность использовать имена переменных и функций на кириллице.

  • Возможность выполнять программу непосредственно в симуляторе - SimulIDE через плагин UDP-serial.

Выбор порта для работы с АрдуЛисп и SimulIDE, либо платой Arduino

Выбор порта для работы с АрдуЛисп и SimulIDE, либо платой Arduino
  • Более продуманный функционал для обучения непосредственно программированию, в том числе и для решения олимпиадных задач. Например, грамотное наследования от класса библиотеки Adafruit GFX позволяет использовать единый минимальный набор визуальных блоков Blockly для работы с различными устройствами вывода графической информации.

  • Возможность создавать модули для более удобной работы над большими проектами.

  • Запуск оболочки из ОС Linux, кроме web-версии и версии Wndows. Для обмена данными с COM-портом в АрдуЛисп реализована оболочка на базе Qt (WebEngine) и как альтернатива – flask web-server на базе - Python.

  • Свободно распространяемый продукт с открытым исходным кодом (скачать с gitverse.ru)

    Проект светильника, выполненный с учеником 4-го класса с использованием АрдуЛисп, Arduino Mega и WS2812

    Проект светильника, выполненный с учеником 4-го класса с использованием АрдуЛисп, Arduino Mega и WS2812

Из сравнительных недостатков, которые ограничивают использование оболочки АрдуЛисп прямо сейчас — это недостаток обучающих материалов, которыми изобилует Ardublock. Поэтому в настоящий момент идёт работа над насыщением электронного учебника АрдуЛисп с примерами проектов под платы IoT Pinlab и Arduino Mega в SimulIDE.

Решение олимпиадной задачи для Ардуино учеником 5-го класса, с использованием АрдуЛисп и IoT PinLab

Решение олимпиадной задачи для Ардуино учеником 5-го класса, с использованием АрдуЛисп и IoT PinLab

Постскриптум

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

Автор: osdlab

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js