Skip to content

Руководство по программированию ​

Этот документ описывает RobomationLAB — образовательную платформу для программирования роботов, входящую в разработанные компанией Robomation «исполняющий движок и интегрированную среду разработки для сервиса потоковой передачи движений робота».

Подробное описание идёт в следующем порядке:

  • главные особенности RobomationLAB
  • как программируются роботы в RobomationLAB
  • основы синтаксиса программирования роботов в RobomationLAB

Содержание ​

  1. RobomationLAB — образовательная платформа для программирования роботов
    1-1) Программы для программирования роботов
    1-2) Двусторонний перевод блоки ↔ Python в реальном времени
    1-3) Главные особенности программ
    1-4) Управление роботом в реальном времени

  2. Как программируются роботы в RobomationLAB
    2-1) Последовательное и параллельное выполнение
    2-2) Функция setup
    2-3) Функция loop

  3. Основы синтаксиса программирования роботов в RobomationLAB
    3-1) Импорт пакета robomation
    3-2) Создание экземпляра робота
    3-3) Методы управления роботом
    3-4) Чтение датчиков и состояния
    3-5) Обнаружение событий
    3-6) Ожидание завершения действия (wait)
    3-7) Функции-утилиты (Utils)



RobomationLAB — образовательная платформа для программирования роботов ​

RobomationLAB — это платформа, подготовленная для обучения ИИ, робототехнике и программированию,
дающая интегрированную среду разработки в браузере Chrome для обучения программированию роботов в начальной и средней школе.

RobomationLAB предлагает учебные программы для программирования роботов разными способами: блочное программирование, скриптовое программирование и другие.
Он позволяет не только изучить теорию программирования, но и по-настоящему двигать роботами Robomation и управлять ими,
то есть учиться программированию и робототехнике одновременно.


Программы для программирования роботов ​

Block Composer ​

Block Composer — это инструмент, в котором легко и быстро управляют роботами Robomation с помощью блочного программирования и осваивают основы управления роботом.

  • среда разработки, подготовленная под физические вычисления

  • программирование перетаскиванием блоков, простое даже для новичков

  • обучение с базовых понятий, без синтаксических ошибок

  • автоматический перевод в скриптовый код на Python

  • наборы блоков с готовыми функциями для каждого робота и множество примеров для пробы

  • просмотр результата в реальном времени при выполнении кода

  • развитие умения решать задачи и творческих способностей через составление блоков

  • продуманные подсказки благодаря анализу скриптового кода с помощью ИИ


Script Composer ​

Script Composer — это инструмент, в котором легко и быстро управляют роботами Robomation на Python и осваивают основы синтаксиса Python и программирования роботов.

  • редактор Python

  • автодополнение кода и вставка кода для каждого языка

  • множество примеров кода для пробы для каждого робота

  • просмотр результата в реальном времени при выполнении кода

  • продуманные подсказки благодаря анализу скриптового кода с помощью ИИ


Главные особенности программ ​

Программы для программирования роботов в RobomationLAB обладают следующими особенностями.

  1. работают в браузере Chrome, поэтому не зависят от операционной системы
  2. благодаря связи Web Serial управляют оборудованием робота напрямую через USB-адаптер
  3. поддерживают одновременное управление несколькими роботами — без ограничений по виду и числу роботов
  4. при сохранении файла результат преобразуется в текстовый файл JSON

Управление роботом в реальном времени ​

Программы для программирования роботов в RobomationLAB управляют роботом в реальном времени так.

  1. В блочном или скриптовом программировании вы пишете код, который задаёт значения объектов Effector и Command, управляющих роботом, или использует значения Sensor и события Event робота.
  2. Вы запускаете код.
  3. Через связь Web Serial программа получает от робота пакеты с данными Sensor и Event и записывает их в объект Device робота.
  4. Код разбирается в реальном времени: данные в объектах Effector и Command перезаписываются, а значения объектов Sensor и Event считываются.
  5. Программа создаёт пакет с данными объекта Device робота, отправляет его роботу через Web Serial и проверяет, действительно ли робот сработал.
  6. Всё время выполнения кода шаги 3, 4 и 5 повторяются примерно каждые 10-20 мс.

Двусторонний перевод блоки ↔ Python в реальном времени ​

RobomationLAB предлагает одновременно редактор блочного кода и редактор кода Python, и оба синхронизируются в обе стороны в реальном времени.

  • Когда вы добавляете, меняете или удаляете блок в редакторе блочного кода, изменение сразу появляется в коде Python.
  • И наоборот: когда вы меняете код в редакторе Python, изменение сразу появляется в блоках.

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

Примечание: перевод Python → блоки работает только для кода, который можно выразить блоками.
(При неверном синтаксисе или коде, который нельзя превратить в блоки, переход может не получиться.
Подробнее — в документе Правила программирования.)




Как программируются роботы в RobomationLAB ​

Последовательное и параллельное выполнение ​

Роботов программируют двумя способами: последовательно и параллельно.
Последовательное выполнение — это когда следующее действие начинается после завершения предыдущего; оно подходит для простого поведения.
Если, например, робот должен проехать вперёд, а потом остановиться и зажечь светодиод, нужно последовательное выполнение, чтобы расположить код каждого действия по порядку и выполнить его во времени.

Параллельное выполнение — это когда несколько действий происходят одновременно; оно нужно при программировании более сложного и продвинутого поведения.
Если, например, вы хотите запрограммировать ходьбу двуногого робота, нужно параллельное программирование, ведь ходьба требует одновременного движения стоп и ног робота.

Программы для программирования роботов в RobomationLAB опираются на структуру setup / loop, похожую на среду разработки оборудования в Arduino,
и поддерживают одновременно последовательное и параллельное выполнение.

block-structure

При первом входе в Block Composer в рабочей области видны два пустых блока функций:
блок «функция setup» соответствует функции setup, а блок «функция loop» — функции loop.

Блоки в реальном времени переводятся в код Python,
а код имеет следующую основную структуру.

python
# основная структура кода Python
from robomation import *

# поместите сюда код настройки, выполняемый один раз:
def setup():
    pass

# поместите сюда управляющий код, выполняемый циклически:
def loop():
    pass

Чтобы управлять роботом, разместите в самом верху кода from robomation import * и объявите используемого робота как экземпляр. (например, hamster_s = HamsterS(0))


Функция setup ​

Функция setup выполняется только один раз — в момент запуска кода.
В функции setup обычно пишут код, который задаёт начальные значения переменных или настраивает режим и функции робота.
Например, при управлении роботом на колёсах в функции setup можно задать начальную скорость колёс.

Если в функции нужно выждать время, функция Utils.wait(...) позволяет писать код, который выполняется по порядку во времени, будто синхронно.
Utils.wait(...) ждёт заданное время (в секундах), а затем выполняет дальнейший код, то есть просыпается после назначенного времени или завершения действия и выполняет код дальше.
В связке с функцией loop, работающей параллельно, это даёт не только простое последовательное выполнение, но и по-настоящему мощное программирование роботов.

Ниже пример кода, в котором робот HamsterS секунду едет вперёд, а потом секунду назад.
Запрограммировать это в параллельно работающей функции loop значило бы смешать вычисления времени с управляющим кодом, отчего код стал бы очень запутанным.
Вместо этого достаточно в функции setup использовать функцию задержки Utils.wait и написать код, который выполняется по порядку во времени, будто синхронно.
( Функцию Utils.wait мы ещё раз опишем дальше, в части Функции-утилиты (Utils). )

Пример кода (Python)

python
from robomation import *

hamster_s = HamsterS(0)

# поместите сюда код настройки, выполняемый один раз:
def setup():
    # движение вперёд со скоростью обоих колёс 50
    hamster_s.set_wheel_speed('both', 50)
    Utils.wait(1)   # ждать секунду
    # движение назад со скоростью обоих колёс -50
    hamster_s.set_wheel_speed('both', -50)
    Utils.wait(1)   # ждать секунду
    hamster_s.stop()

# поместите сюда управляющий код, выполняемый циклически:
def loop():
    pass

( Синтаксис экземпляров и методов робота мы ещё раз опишем дальше, в части Основы синтаксиса программирования роботов в RobomationLAB. )


Функция loop ​

Функция loop поддерживает параллельное выполнение и повторяется примерно каждые 10 мс всё время работы кода.
В функции loop обычно пишут код, который циклически задаёт значения переменных или обнаруживает и обрабатывает события робота.

Ниже пример кода, в котором скорость колёс и цвет светодиодов робота HamsterS меняются со временем.
( Переменную, объявленную вне функций setup и loop, внутри функции нужно объявить словом global, чтобы её можно было изменить. )

python
from robomation import *

hamster_s = HamsterS(0)
frame = 0

# поместите сюда код настройки, выполняемый один раз:
def setup():
    global frame
    frame = 0

# поместите сюда управляющий код, выполняемый циклически:
def loop():
    global frame
    frame += 1  # при каждом вызове функции loop значение переменной frame растёт на 1

    # новое значение frame задаёт скорость обоих колёс и значения RGB обоих светодиодов
    hamster_s.set_wheel_speed('both', frame % 100)
    hamster_s.set_led_color('left', frame % 256, 0, 0)
    hamster_s.set_led_color('right', 0, 0, frame % 256)

( Синтаксис экземпляров и методов робота мы ещё раз опишем дальше, в части Основы синтаксиса программирования роботов в RobomationLAB. )

Ниже пример кода, в котором лёгкое постукивание по корпусу робота HamsterS (событие Tap) зажигает светодиоды красным.

python
from robomation import *

hamster_s = HamsterS(0)

# поместите сюда код настройки, выполняемый один раз:
def setup():
    pass

# поместите сюда управляющий код, выполняемый циклически:
def loop():
    # в момент постукивания обнаруживается событие
    if hamster_s.tap():               # при обнаружении события True
        hamster_s.set_led_color('both', 'red')   # зажечь оба светодиода красным
    else:
        hamster_s.turn_off('both')               # погасить оба светодиода

( Синтаксис обнаружения событий (tap()) и остальное мы ещё раз опишем дальше, в части Основы синтаксиса программирования роботов в RobomationLAB. )



Основы синтаксиса программирования роботов в RobomationLAB ​

Когда вы пишете код в программах для программирования роботов в RobomationLAB, нужно придерживаться следующих основ синтаксиса.
Роботом управляют через пакет Python robomation:
сначала создают экземпляр робота, а затем вызывают его методы.

Импорт пакета robomation ​

Чтобы пользоваться классами (роботами) и утилитами (Utils), нужными для управления роботом, разместите в самом верху кода эту одну строку.

python
from robomation import *

Создание экземпляра робота ​

Объявите используемого робота как экземпляр.
Название класса означает вид робота, а число в скобках — индекс экземпляра (начиная с 0).

python
hamster_s = HamsterS(0)   # один робот HamsterS

Названия классов и имена переменных по умолчанию для отдельных роботов такие.

РоботНазвание классаИмя переменной по умолчанию
HamsterSHamsterShamster_s
HamsterHamsterhamster
PiobotPiopio
TurtleTurtleturtle
BeagleBeaglebeagle
RaccoonBotRaccoonBotraccoon
Cheese StickCheeseStickcheesestick

Используя несколько роботов одного вида, увеличивайте индексы: 0, 1, 2 …

python
hamster_s = HamsterS(0)
hamster_s_1 = HamsterS(1)

Методы управления роботом ​

Роботом управляют, вызывая методы экземпляра.
Методы выполняют действия робота: задают скорость колёс, едут, управляют светодиодами, звуком и так далее.

python
hamster_s.set_wheel_speed('both', 50)    # установка скорости обоих колёс
hamster_s.move_distance(10, 'cm')        # движение на 10 см вперёд
hamster_s.set_led_color('both', 'red')   # оба светодиода красным

Список методов и параметров, доступных для данного робота, смотрите в его документе (например, «HamsterS»).


Чтение датчиков и состояния ​

Значения датчиков и состояние робота тоже читают через методы, которые возвращают это значение.

python
left = hamster_s.floor('left')        # чтение левого датчика поверхности
dist = hamster_s.proximity('right')   # чтение правого датчика приближения

Обнаружение событий ​

События, вызванные изменением состояния или окружения, обнаруживаются так,
что соответствующий метод события возвращает True в момент его наступления.

python
if hamster_s.tap():        # True в момент наступления события постукивания (Tap)
    hamster_s.set_led_color('both', 'red')

Ожидание завершения действия (wait) ​

У методов, выполнение которых занимает время — движение, поворот, воспроизведение звука, — есть параметр wait.

  • wait=True (по умолчанию): ждёт завершения действия, а затем выполняет дальнейший код.
  • wait=False: начинает действие и сразу выполняет дальнейший код.
python
hamster_s.move_distance(10, 'cm', wait=True)    # ждёт, пока движение закончится
hamster_s.move_distance(10, 'cm', wait=False)   # начинает движение и сразу выполняет дальнейший код

Функции-утилиты (Utils) ​

Общие функции, не зависящие от вида робота, — ожидание времени, воспроизведение звука, запись в журнал, цвета — вызываются через методы класса Utils.

python
Utils.wait(1)                 # ждать секунду
Utils.speak('Здравствуйте')   # воспроизведение речи (TTS)
Utils.log(0, '', '')          # запись в журнал консоли