Учебный язык в робототехнике

bbd1bc2473fe9d2f371c1de5d3c65fed.png

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

И так, давайте немного познакомимся. Меня зовут Ярослав и я уже 3 года работаю преподавателем для детей. В основном преподаю программирование и робототехнику. Сейчас работаю над своим проектом робота для обучения, и собственно про одну из частей это темы мы сегодня поговорим.

Зачем создавать новый язык? Скажу сразу, ответ на этот вопрос достаточно прост. Моя идея состоит в том, чтобы перенести программирование в веб. Вы подключаетесь к роботу по ip, и получаете веб сайт средой разработки. Таким образом устанавливать себе на устройство ничего не нужно будет. Так же, мне хочется добавить простоты в процесс обучения.

Как устроен данный язык? Тут ничего особенного, пользователь написал код, дальше непосредственно на сайте, код обрабатывается лексером для получения списка токенов. Токены попадают в парсер, который соединяя их, создаёт AST (abstract syntax tree), что будет использовать интерпретатор для выполнения. Помимо этого AST так же применяется для построения блок схемы кода (на данный момент отключено, так как требует доработки). Именно AST будет отправляться на робота и там выполняться. Схему данного языка можно увидеть на рисунке ниже.

Схема работы языка

Схема работы языка

Теперь разберем, что уже работает и что можно использовать. Первое что нужно для написания программы, это конечно редактор код. Он позволяет писать программу, и пока ничего более. В дальнейшем будет добавлена и табуляция, и подсветка синтаксиса. Но на данный момент в альфа версии этого нет. К слову, что нужно будет добавить можете написать в комментарии, будет интересно почитать ваши идеи о идеальном редакторе кода.

Редактор кода

Редактор кода

Далее в том что вы можете увидеть на альфа версии, это простенький симулятор. Робот в этом мире имеет лишь пару моторов и датчик приближения, установленный спереди. Тут тоже не слишком богато, однако в будущем можно будет менять конфигурацию компонентов и редактировать «комнату» (так я назвал окружающую среду для робота). На данный момент в «комнате» всего 2 препятствия.

Симуляция работы робота

Симуляция работы робота

Наконец перейдем к основному и главному, а именно самому языку. Это пока альфа версия и в будущем синтаксис еще будет меняться и дорабатываться.

цел x = 10
цел y = 5
цел z = x + y * 2   // Ожидаемый результат: z = 20
вывод(z)           // Должно вывести: 20

Как можно видеть, переменные объявляются так же, как и в многих других языка. Есть комментарии строковые //. Команда «вывод» выводит данные в консоль. Имена переменных могут иметь как кириллицу, так и латиницу.

если z меньше 15
    вывод("z меньше или равно 15")
иначе
    вывод("z больше 15")
конец условия

Условия в языке так же работают как и везде. Единственное что могло у вас вызвать непонимания или даже негодования, это замена символа »<" на слово "меньше". Такое решение было сделано в целях минимизации необходимости переключения раскладки.

цел счетчик = 0
пока (счетчик меньше 3) 
    вывод("Счетчик: " + счетчик)
    счетчик = счетчик + 1
конец цикла

На данный момент есть только цикл «while», он же цикл «пока». И тут вы можете заметить то, чего в будущих версиях языка уже не будет. Скобки для условия повторения будут убраны. В веб версии прекрасно работают как конечные циклы, так и бесконечные. Они не блокируют визуальное отображение, и если робот вынуждено войдет в бесконечный цикл, ничего страшного не случиться.

ЛевыйМотор(вперед)
ПравыйМотор(вперед)
РоботВперед()
Пауза(2000)          // Робот двигается вперед 2 секунды
РоботСтоп()

ЛевыйМотор(назад)
ПравыйМотор(назад)
РоботНазад()
Пауза(2000)          // Робот двигается назад 2 секунды
РоботСтоп()

РоботРазвернись(влево)
Пауза(1000)          // Робот поворачивается влево на 1 секунду
РоботСтоп()

цел расстояние = РоботДистанция()
вывод("Расстояние до препятствия: " + расстояние)

Это команды для управления роботом. Пока не особо много, и нет команд для управления портами ESP8266 напрямую, однако это позволяет уже делать простенькие программы на данном языке.

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

© Habrahabr.ru