Руководство по программированию
Этот документ описывает RobomationLAB — образовательную платформу для программирования роботов, входящую в разработанные компанией Robomation «исполняющий движок и интегрированную среду разработки для сервиса потоковой передачи движений робота».
Подробное описание идёт в следующем порядке:
- главные особенности RobomationLAB
- как программируются роботы в RobomationLAB
- основы синтаксиса программирования роботов в RobomationLAB
Содержание
RobomationLAB — образовательная платформа для программирования роботов
1-1) Программы для программирования роботов
1-2) Двусторонний перевод блоки ↔ Python в реальном времени
1-3) Главные особенности программ
1-4) Управление роботом в реальном времениКак программируются роботы в RobomationLAB
2-1) Последовательное и параллельное выполнение
2-2) Функция setup
2-3) Функция loopОсновы синтаксиса программирования роботов в 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 обладают следующими особенностями.
- работают в браузере Chrome, поэтому не зависят от операционной системы
- благодаря связи Web Serial управляют оборудованием робота напрямую через USB-адаптер
- поддерживают одновременное управление несколькими роботами — без ограничений по виду и числу роботов
- при сохранении файла результат преобразуется в текстовый файл JSON
Управление роботом в реальном времени
Программы для программирования роботов в RobomationLAB управляют роботом в реальном времени так.
- В блочном или скриптовом программировании вы пишете код, который задаёт значения объектов Effector и Command, управляющих роботом, или использует значения Sensor и события Event робота.
- Вы запускаете код.
- Через связь Web Serial программа получает от робота пакеты с данными Sensor и Event и записывает их в объект Device робота.
- Код разбирается в реальном времени: данные в объектах Effector и Command перезаписываются, а значения объектов Sensor и Event считываются.
- Программа создаёт пакет с данными объекта Device робота, отправляет его роботу через Web Serial и проверяет, действительно ли робот сработал.
- Всё время выполнения кода шаги 3, 4 и 5 повторяются примерно каждые 10-20 мс.
Двусторонний перевод блоки ↔ Python в реальном времени
RobomationLAB предлагает одновременно редактор блочного кода и редактор кода Python, и оба синхронизируются в обе стороны в реальном времени.
- Когда вы добавляете, меняете или удаляете блок в редакторе блочного кода, изменение сразу появляется в коде Python.
- И наоборот: когда вы меняете код в редакторе Python, изменение сразу появляется в блоках.
Поскольку блоки и код Python соответствуют друг другу один к одному и переводятся в обе стороны,
можно быстро собрать из блоков всю структуру, а потом доработать детали на Python или учить синтаксис Python, сравнивая его с блоками —
то есть работать, свободно переходя между блочным и скриптовым программированием.
Примечание: перевод Python → блоки работает только для кода, который можно выразить блоками.
(При неверном синтаксисе или коде, который нельзя превратить в блоки, переход может не получиться.
Подробнее — в документе Правила программирования.)
Как программируются роботы в RobomationLAB
Последовательное и параллельное выполнение
Роботов программируют двумя способами: последовательно и параллельно.
Последовательное выполнение — это когда следующее действие начинается после завершения предыдущего; оно подходит для простого поведения.
Если, например, робот должен проехать вперёд, а потом остановиться и зажечь светодиод, нужно последовательное выполнение, чтобы расположить код каждого действия по порядку и выполнить его во времени.
Параллельное выполнение — это когда несколько действий происходят одновременно; оно нужно при программировании более сложного и продвинутого поведения.
Если, например, вы хотите запрограммировать ходьбу двуногого робота, нужно параллельное программирование, ведь ходьба требует одновременного движения стоп и ног робота.
Программы для программирования роботов в RobomationLAB опираются на структуру setup / loop, похожую на среду разработки оборудования в Arduino,
и поддерживают одновременно последовательное и параллельное выполнение.

При первом входе в Block Composer в рабочей области видны два пустых блока функций:
блок «функция setup» соответствует функции setup, а блок «функция loop» — функции loop.
Блоки в реальном времени переводятся в код 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)
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, чтобы её можно было изменить. )
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) зажигает светодиоды красным.
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), нужными для управления роботом, разместите в самом верху кода эту одну строку.
from robomation import *Создание экземпляра робота
Объявите используемого робота как экземпляр.
Название класса означает вид робота, а число в скобках — индекс экземпляра (начиная с 0).
hamster_s = HamsterS(0) # один робот HamsterSНазвания классов и имена переменных по умолчанию для отдельных роботов такие.
| Робот | Название класса | Имя переменной по умолчанию |
|---|---|---|
| HamsterS | HamsterS | hamster_s |
| Hamster | Hamster | hamster |
| Piobot | Pio | pio |
| Turtle | Turtle | turtle |
| Beagle | Beagle | beagle |
| RaccoonBot | RaccoonBot | raccoon |
| Cheese Stick | CheeseStick | cheesestick |
Используя несколько роботов одного вида, увеличивайте индексы: 0, 1, 2 …
hamster_s = HamsterS(0)
hamster_s_1 = HamsterS(1)Методы управления роботом
Роботом управляют, вызывая методы экземпляра.
Методы выполняют действия робота: задают скорость колёс, едут, управляют светодиодами, звуком и так далее.
hamster_s.set_wheel_speed('both', 50) # установка скорости обоих колёс
hamster_s.move_distance(10, 'cm') # движение на 10 см вперёд
hamster_s.set_led_color('both', 'red') # оба светодиода краснымСписок методов и параметров, доступных для данного робота, смотрите в его документе (например, «HamsterS»).
Чтение датчиков и состояния
Значения датчиков и состояние робота тоже читают через методы, которые возвращают это значение.
left = hamster_s.floor('left') # чтение левого датчика поверхности
dist = hamster_s.proximity('right') # чтение правого датчика приближенияОбнаружение событий
События, вызванные изменением состояния или окружения, обнаруживаются так,
что соответствующий метод события возвращает True в момент его наступления.
if hamster_s.tap(): # True в момент наступления события постукивания (Tap)
hamster_s.set_led_color('both', 'red')Ожидание завершения действия (wait)
У методов, выполнение которых занимает время — движение, поворот, воспроизведение звука, — есть параметр wait.
wait=True(по умолчанию): ждёт завершения действия, а затем выполняет дальнейший код.wait=False: начинает действие и сразу выполняет дальнейший код.
hamster_s.move_distance(10, 'cm', wait=True) # ждёт, пока движение закончится
hamster_s.move_distance(10, 'cm', wait=False) # начинает движение и сразу выполняет дальнейший кодФункции-утилиты (Utils)
Общие функции, не зависящие от вида робота, — ожидание времени, воспроизведение звука, запись в журнал, цвета — вызываются через методы класса Utils.
Utils.wait(1) # ждать секунду
Utils.speak('Здравствуйте') # воспроизведение речи (TTS)
Utils.log(0, '', '') # запись в журнал консоли