Робот Ф-2 - Редактор жестов

Редактор позволяет создавать новые жесты для робота. Жесты сохраняются в файлы формата JSON, например, жест neutral хранится в файле neutral.json. Новые жесты можно сделать, если не хватает жестов из стандартного словаря. После создания жесты можно добавить в робота и использовать их в своих скриптах поведения на языке BML.

Запуск программы

При запуске редактора жестов нужно выбрать папку, откуда будут взяты лицо и параметры робота. Для этого нужно нажать кнопку 1. После выбора паки активируется кнопка 4. С её нажатием будет выполнен переход к основному интерфейсу.

Выбор файлов для лица робота

Если жесты и конфигурация лица робота находятся в разных папках, на исходном экране нужно нажать кнопку 4 Extra Settings. В этом случае можно отдельно выбрать путь к каждому из ресурсов:

Отдельная настройка

Выбор папки, откуда будут взяты лицо и параметры робота.

Выбор description.json

Выбор папки нужно подтвердить нажатием кнопки 1 Select. Конфигурация лица будет взята из вложенной папки RobotGestures/faces/main-face.txt

Интерфейс редактора

Стартовое меню редактора

  1. Трёхмерная модель робота
  2. Приводы рук и шеи с указанием текущих координат. Для каждого привода указываются кнопка сброса координаты, величина приращения, кнопки увеличения и уменьшения, текущая координата
  3. Управление лицом, бровями и глазами
  4. Меню приложения

Модель робота можно вращать, зажимая левую кнопку мыши. Поставить модель ровно можно кнопкой R (Reset).

Можно вращать, зажимая ЛКМ на роботе

Для редактирования мимики можно переключиться в режим лица крупным планом. Для этого нужно нажать кнопку H (Head). Для выхода из этого режима нужно повторно нажать H.

Режим головы

Меню приложения

Меню приложения

Раздел Gesture (1) позволяет создавать новый жест, открывать и закрывать жесты. Раздел ShapeSetting (2) позволяет выбрать источник ресурсов - лица робота (как при запуске программы). Меню Help (3) выводит подсказку назначения клавиш. 4 – Кнопка закрытия редактора.

Меню взаимодействия с жестами

Меню взаимодействия с жестами

  1. Кнопка создания нового жеста 1.1. Создание абсолютного жеста 1.2. Создание относительного жеста
  2. Кнопка открытия жеста из файла - при этом открывается диалог выбора файла
  3. Кнопка сохранить жест как (если нужно переименовать уже сохраненный жест)
  4. Кнопка сохранить жест (сохраняет поверх старого файла)
  5. Кнопка закрытия режима создания жеста

Абсолютный жест задаётся в координатах робота. Эти координаты не зависят от окружающих объектов.

Относительный жест задаётся в координатах относительно направления на некоторый объект. Относительный жест должен обязательно вызываться в отношении некоторого референта (target), например, так:

<scenario>
  <bml>
    <figure lexeme="agree1_rel" target="#front"/>
  </bml>
</scenario>

В данном примере используется референт #front, который автоматически всегда задан.

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

В жесте нельзя использовать абсолютные и относительные элементы. Например, нельзя, чтобы робот соединял руки (абсолютный жест) и смотрел на собеседника (относительный жест). Если требуется создать такое поведение, то нужно комбинировать абсолютный и относительный жест в одном пакете BML.

Открытие файла

При открытии файла нужно выбрать требуемый файл через диалог:

Меню открытия жеста из файла

Кнопка открытия меню настройки файлов для лица робота

Кнопка открытия меню настройки файлов для лица робота

Меню настройки файлов для лица робота

Меню помощи

Кнопка открытия меню помощи

В меню помощи кратко представлены основные команды для управления редактором. Меню помощи можно вызвать по кнопке F1.

Меню помощи

Редактирование жеста

Жест представляет собой множество точек, расставленных на шкале времени (2). Каждая точка хранит координату или состояние элемента робота в конкретный момент времени. Движение робота – это переход между двумя ключевыми точками. Название жеста отображается в заголовке окна (1).

Режим создания

Общий принцип создания жеста робота состоит в следующем: на шкале времени мы можем указать, что в определённый момент времени робот должен стоять в определённой позе. Для этого на шкале времени будет поставлена ключевая точка. Точка указывает, что в данный момент времени определённый привод должен быть повёрнут на некоторый угол или что на лице в этот момент должен отображаться некоторый элемент мимики. Ключевая точка может относится только к одному элементу робота, например, указывать только координату правой руки. Между соседними ключевыми точками тело робота будет перемещаться с постоянной скоростью. Скорость движения элемента робота отображается в редакторе цветом. Жест задаёт множество перемещений робота между ключевыми точками.

Если выбрана конкретная точка, то в меню подсвечиваются установленные для неё координаты или параметры. Для удаления точки нужно удалить все её параметры нажатием кнопки “крестик”. Это можно сделать, если время шкалы времени совпадает с временем точки.

Меню управления телом робота

В этом меню в текущей точке времени можно редактировать положение каждого привода робота:

  • Шея: NeckLR/NeckUD
  • Правая рука: RShoulder/RHand
  • Левая рука: LShoulder/LHand

Если положение какого-то привода было изменено, на шкале времени будет автоматически поставлена ключевая точка. Удалить ключевую точку можно или кнопкой сброса координаты или кнопкой Delete на клавиатуре.

Меню контроля тела робота

  1. Кнопка сброса координаты
  2. Поле величины приращения в радианах
  3. Кнопка убавления угла на величину, указанную в поле 2
  4. Кнопка увеличения угла на величину, указанную в поле 2
  5. Текущая координата в радианах, можно редактировать с клавиатуры

Если для некоторой координаты задан слишком большой угол, цифры в поле 5 будут подсвечены красным. Например, если для шеи (NeckLR) задать угол 6,3 радиан, голова будет направлена вперёд (как если бы она имела координату 0), но в координатах робота она будет перекручена на целый оборот. Такой жест может даже правдоподобно выполняться в редакторе, поскольку редактор не прокручивает голову на указанный угол, а переходит от одной координаты к другой по кратчайшей траектории. При этом на роботе жест с превышением допустимых координат работать не будет. Превышение координат нужно контролировать на этапе разработки жеста.

Кликая мышью в поле 5, можно автоматически создавать ключевую точку:

  • Shift-клик: создаётся ключевая точка с текущей координатой (с той координатой, в которой привод находился в этой точке времени)
  • Ctrl-клик: копируется координата предыдущей ключевой точки - при этом движение между двумя ключевыми точками будет отсутствовать

Меню контроля лица

В меня контроля лица можно управлять формой элементов лица (закладка 1 Shape), положением бровей (закладка 2 Brows) и положением глаз (закладка 3 Eyes)

Меню контроля лица

Формы элементов лица можно выбирать из выпадающего списка

Выбор формы

Если в жесте не переопределены какие-то элементы лица, при выполнении на роботе эти элементы могут остаться от предыдущего жеста. Например, если предыдущий жест закрыл глаза, а текущий жест не устанавливает никакой элемент в поле Lids, то глаза при выполнении жеста останутся закрытыми.

Меню управления бровями

Для каждой брови можно задать её смещение на лице по горизонтали или по вертикали в условных единицах, а также поворот брови на некоторой угол относительно внутреннего конца брови (точка брови, наиболее близкая к носу).

Меню управления бровями

  1. Поле величины приращения в условных единицах
  2. Кнопка движения брови влево
  3. Кнопка движения брови вправо
  4. Кнопка движения брови вверх
  5. Кнопка движения брови вниз
  6. Кнопка поворота брови против часовой стрелки
  7. Кнопка поворота брови по часовой стрелке
  8. Текущая координата брови
  9. Кнопка включения режима симметрии (брови будут двигаться зеркально)
  10. Кнопка сброса позиции брови

Меню управления глазами

Каждый глаз считается шаром. Глаз поворачивается по вертикали и горизонтали на угол в радианах. Зрачок проецируется на лице в точку, являющуюся проекцией центра зрачка на плоское лицо при данном повороте глаза. При этом само изображение зрачка на лице не деформируется: зрачок остаётся круглым в проекции на лицо.

Меню управления бровями

  1. Поле величины приращения в радианах
  2. Кнопка поворота глаза влево
  3. Кнопка поворота глаза вправо
  4. Кнопка поворота глаза вверх
  5. Кнопка поворота глаза вниз
  6. Кнопка сброса вращения глаза
  7. Текущая координата глаза
  8. Кнопка включения режима синхронизации глаз (глаза будут двигаться одинаково)

Шкала времени

Шкала времени

  1. Названия треков
  2. Поле точек
  3. Меню управления шкалой времени

Кнопки управления шкалой времени

Кнопки управления шкалой времени

  1. Текущее время
  2. Промотать шкалу времени к началу жеста (к точке start)
  3. Запустить проигрывание жеста. Проигрывание начинается с текущего времени или с 0, если курсор стоит в конце жеста
  4. Промотать шкалу времени к концу жеста (к точке end)
  5. Добавить 1000 мс (1 секунду) к шкале времени

Поле точек

Таймлайн точек жеста

  1. Точка начала жеста
  2. Точка окончания жеста
  3. Указатель текущего времени (можно двигать колесиком мыши или перетаскивать мышкой)
  4. Точки жеста. Они создаются автоматически, если какой-то из параметров движения робота был изменён. Точку можно выбрать нажатием мыши. Несколько точек можно выбрать, если зажать shift.
  5. Шкала времени. Один интервал соответствует 40мс, то есть одному кадру в кино.

Перемещение точек

Комбинациями клавиш Shift-влево, Shift-вправо точку можно двигать по шкале времени

Shift

Комбинациями клавиш Ctrl-влево, Ctrl-вправо можно двигать по шкале времени стек точек, то есть все точки, находящиеся в одной координате времени

Ctrl

Комбинациями клавиш Alt-влево, Alt-вправо позволяет двигать все точки справа от выбранной точки. Это удобно, если требуется расширить или сузить жест.

Alt

Фазы жеста

Жесту может быть приписано несколько фазовых точек. По этим точкам может проводиться синхронизация нескольких жестов в пакете BML. Это точки:

  • start – начало жеста (обязательная точка)
  • ready – ожидание
  • stroke_start – начало замаха
  • stroke – пик жеста
  • stroke_end – конец замаха
  • relax – отдых
  • end – окончание жеста (обязательная точка)

Самая левая точка жеста автоматически создает фазовую точку start:

Start

Самая правая точка жеста автоматически создает фазовую точку end:

End

Между точками состояния start и end можно поставить другие фазовые точки жеста:

Stages

Каждый жест должен обладать хотя бы двумя точками в разных координатах времени. То есть жест должен иметь протяжённость во времени. Нельзя сохранить жест, который имеет только одну точку. Жест должен обязательно содержать точки start и end.