Программное обеспечение робота Ф-2

Есть два варианта робота:

  • робот, полностью управляемый с персонального компьютера;
  • робот со встроенным компьютером.

Робот, управляемый с персонального компьютера

Робот подключается к компьютеру с помощью кабелей USB и HDMI, а также включается в сеть 220 вольт с помощью блока питания. После подключения HDMI нужно убедиться, что экран робота определился как внешний монитор. Требуется, чтобы рабочий стол был расширен (а не сдублирован) на монитор робота.

Для работы с контроллером робота может потребоваться установить драйвер USB serial port driver:

  • при подключении робота по USB в диспетчере устройств должно появиться “неизвестное устройство”;
  • необходимо скачать архив драйвера USB serial port и распаковать его;
  • неизвестному устройству USB в диспетчере устройств нужно установить драйвер из папки, в которую был распакован архив;
  • иногда требуется повторная установка этого же драйвера и перезагрузка компьютера, чтобы устройство USB было правильно подключено.

Подключённое устройство должно выглядеть в диспетчере устройств в разделе Ports как USB serial port (COM3) (или как COM-порт с другим номером).

Для управления роботом на компьютере запускается программа F2Robot.exe.

Запуск программы RobotSystem.exe

Эта программа принимает пакеты поведения в формате BML от других программных компонентов и выполняет их на роботе. В качестве такого поставщика пакетов поведения может выступать SimpleScenarioSender – система управления роботом с клавиатуры, или ваше собственное программное обеспечение, отправляющее пакеты BML через программный интерфейс.

Робот со встроенным компьютером

Такой робот содержит на задней панели разъём для кабеля локальной сети RJ-45. Перед запуском нужно подключить робота к локальной сети, тогда при запуске робот получит IP-адрес (например, 192.168.1.10). Этот адрес будет показан на экране робота при его загрузке. Далее к роботу можно будет обращаться с других компьютеров сети по этому IP-адресу или по имени робота f2robot-1 (например, из браузера: f2robot-1:5000, f2robot-1.local:5000 или 192.168.1.10:5000). Число в имени робота указывает его номер, это число у разных роботов отличается.

К роботу можно обращаться через ssh из командной строки:

ssh f2robot@f2robot-1.local
ssh f2robot@192.168.1.10

Веб-интерфейс программы F2Robot

С программой F2Robot можно общаться через веб-интерфейс. Для этого нужно запустить браузер и зайти на адрес localhost:5000. На веб-интерфейс робота можно зайти и с другого компьютера, для этого в браузере нужно указать IP-адрес компьютера, на котором работает программа F2Robot, например: 192.168.1.10:5000. Узнать IP-адрес компьютера, на котором работает робот, можно на самом этом компьютере в сетевых настройках или с помощью команды ipconfig /all. IP-адрес компьютера можно также посмотреть в настройках роутера. Для связи между управляющим компьютером и компьютером с программой F2Robot необходимо, чтобы они находились в одной подсети, тогда с управляющего компьютера можно обратиться к компьютеру с программой F2Robot.

Если используется робот со встроенным компьютером, то робот сам при включении получает IP-адрес в сети. Во время включения этот адрес отображается на экране робота. Потом узнать адрес робота можно в настройках роутера: нужно зайти на адрес роутера и посмотреть таблицу IP-адресов всех устройств, подключённых к роутеру.

Экран статуса робота

Первый экран на веб-странице localhost:5000 показывает статус основных компонентов робота: доступность тела робота, звука, экрана и базы жестов. Если какой-то из компонентов недоступен, то на экране статуса появится ошибка.

Экран статуса компонентов робота Ф-2

Компонент звука (SharpAudioVoiceDevice) – это ссылка, которая ведёт на список сохранённых аудиозаписей – кэш. Кэш содержит все высказывания, которые уже воспроизводились на роботе и которые робот запросил на внешнем сервисе text-to-speech. Если роботу повторно пришла инструкция синтезировать высказывание, то робот берёт аудиосигнал из кэша и уже не обращается к внешнему сервису. Это быстрее и не требует доступа в интернет. Список сохранённых аудиозаписей (содержание кэша) можно посмотреть на следующем экране.

Список сохранённых аудиозаписей

В этой таблице приводится текст высказывания и продолжительность аудиозаписи, доступна кнопка проигрывания аудиозаписи. Если текст в пакете BML в точности совпадает с текстом из первой колонки, то для этого текста будет использована сохранённая аудиозапись.

Перед началом эксперимента с роботом лучше полностью воспроизвести на роботе всё поведение, чтобы робот сохранил в кэш все необходимые высказывания и не тратил время на запрос сервиса text-to-speech во время эксперимента.

Все сохранённые аудиозаписи хранятся в папке \speech\ в директории робота. В файле map.csv указано соответствие высказываний файлам. Если в эксперименте требуется предъявлять испытуемым специальные аудиозаписи (например, высказывания на иностранном языке), то эти аудиозаписи можно сохранить в папку \speech\ и назначить для них строки, по которым эти аудиозаписи будут вызываться на роботе. Для этого нужно отредактировать файл map.csv. Перед редактированием файла map.csv нужно остановить программу F2Robot, а после редактирования – заново её запустить.

Communicator – экран создания BML

На экране Communicator можно создать протокол поведения для робота на языке BML и затем выполнить его на роботе нажатием кнопки Execute.

Экран создания BML для робота Ф-2

В протоколе поведения должен быть указан сценарий. Пакет, содержащий только теги <bml>, считается неполным.

<scenario id="test1">
  <bml>  
    <neck lexeme="frustration3"/>
    <hands lexeme="happy1"/>
    <lids lexeme="lids-110"/>
    <brows lexeme="eyebrows-up2000"/>
    <speech text="Мне тут нравится"/>
    <mouth lexeme="mouth-smile4"/>
  </bml>
  <bml>
    <neck lexeme="referent_left_long3"/>
    <hands lexeme="avtoman2"/>
    <lids lexeme="lids-squint2"/>
    <brows lexeme="eyebrows-down2000-2"/>
    <speech text="Ну почему-то нет солнышка"/>
    <mouth lexeme="lip-bite"/>
  </bml>
</scenario>

Если в протоколе поведения присутствуют несколько сценариев, то их нужно окружить тегом <behavior>:

<behavior>
  <scenario id="test1">
    <bml>  
      <neck lexeme="frustration3"/>
      <hands lexeme="happy1"/>
      <lids lexeme="lids-110"/>
      <brows lexeme="eyebrows-up2000"/>
      <speech text="Мне тут нравится"/>
      <mouth lexeme="mouth-smile4"/>
    </bml>
  </scenario>
  <scenario id="test2">
    <bml>  
      <neck lexeme="referent_left_long3"/>
      <hands lexeme="avtoman2"/>
      <lids lexeme="lids-squint2"/>
      <brows lexeme="eyebrows-down2000-2"/>
      <speech text="Ну почему-то нет солнышка"/>
      <mouth lexeme="lip-bite"/>
    </bml>
  </scenario>
</behavior>

BML-пакеты внутри одного сценария будут выполнены последовательно, а пакеты разных сценариев могут выполниться одновременно, если они относятся к разным исполнительным органам робота. Подробнее о выполнении сценариев BML

Gestures – экран управления жестами

На экране Gestures перечислены все жесты, доступные роботу для выполнения.

Список доступных жестов

В таблице указаны:

  • Name – название жеста
  • Duration – продолжительность жеста в секундах
  • Relative – тип жеста: относительный или абсолютный; относительные жесты выполняются относительно направления на объект и требуют параметра target
  • Stages – ключевые точки, которые присутствуют в жесте и по которым можно проводить синхронизацию в пакете BML
  • Storage – место хранения жеста:
    • File – на диске, в этом случае изменения в жесте сразу доступны при его выполнении
    • Memory – в памяти, при этом доступ к жесту очень быстрый, но чтобы изменения в жесте отразились в поведении робота, нужно перезагрузить программу F2Robot; если вы редактируете жесты и сразу пробуете их на роботе, то нужно установить этот параметр в значение File (см. ниже)
  • Visualization – ссылка на жест в словаре на сайте f2robot.com
  • Action – выполнить жест, скопировать жест как сценарий, как bml или как отдельный тег figure (функции копирования работают только для адреса localhost)

В файле настроек appsettings.json в ключе FileSystemDB можно задать расположение файлов жестов на диске и тип доступа к жестам:

{
  "FileSystemDB": {
    "RobotGesturesPath": "C:\\RobotGestures",
    "Mode": "ReadAll"
  }
}
  • RobotGesturesPath – указывает на корневую директорию репозитория жестов
  • Mode – указывает варианты получения жестов из файлов:
    • LoadOnStart – все жесты вычитываются при запуске программы и затем хранятся в памяти, это соответствует значению Storage:Memory в таблице жестов
    • ReadAll – жест каждый раз вычитывается с диска перед выполнением на роботе, это соответствует значению Storage:File в таблице жестов; этот режим удобен, если вы редактируете жесты и после сохранения сразу же запускаете их на роботе

Inactive – неактивное поведение

Экран Inactive управляет неактивным поведением робота, то есть теми движениями, которые робот воспроизводит, если ему нечего больше делать. Модуль неактивного поведения постоянно передаёт эти пакеты на робота, чтобы “анимировать” его в ситуации бездействия. Пакеты, переданные другими модулями, получают приоритет и подавляют выполнение пакетов неактивного поведения. В зависимости от ситуации и условий эксперимента от робота может потребоваться более активное или более сдержанное неактивное поведение. Различные сценарии неактивного поведения описываются в файле inactive.sbml в репозитории жестов робота.

Переключатель Enabled включает или выключает неактивное поведение на роботе. Для сохранения нужно нажать кнопку Save. Пункт Scenario Name позволяет выбрать сценарий неактивного поведения из описанных в файле inactive.sbml.

Пакеты неактивного поведения периодически добавляются в очередь на исполнение. При этом робот проверяет, чтобы в очереди (при возможности) не было повторяющихся пакетов.

  • Scenario Name – название сценария в файле inactive.sbml, из которого будут браться пакеты для неактивного поведения; по умолчанию будет использоваться сценарий inactive
  • Interval – интервал времени (мс), когда робот проверяет, сколько пакетов неактивного поведения находится в очереди
  • Threshold – требуемое число пакетов в очереди (при возможности – уникальных); если во время очередной проверки число пакетов в очереди меньше, то робот добавит в очередь ещё один пакет неактивного поведения

Основные параметры неактивного поведения можно задавать в файле настроек appsettings.json. В ключе Inactive указывается, будет ли робот при запуске демонстрировать неактивное поведение (Enabled: true/false), а также указывается сценарий, из которого будут использоваться пакеты BML для неактивного поведения (SelectedScenario).

{
  "Inactive": {
    "Enabled": true,
    "SelectedScenario": "inactive-level0"
  }
}

– в данном примере робот сразу запустит неактивное поведение и будет использовать пакеты из сценария inactive-level0

Referents – окружающие референты

Экран Referents показывает референтов, присутствующих в окружении робота. Этот экран используется, если робот запускается вместе с системой технического зрения, распознающей объекты вокруг робота. Референты нужны для выполнения относительных жестов. Такие жесты направлены на заданный референт, поэтому отсутствие референта при выполнении относительного жеста вызовет ошибку.

Composer – активные сценарии

Экран Composer показывает активные сценарии и теги bml, выполняемые на роботе в конкретный момент. В разделе Other Scenarios приведены сценарии, ожидающие своей очереди. Данные на этом экране быстро меняются, чтобы их остановить, нужно нажать кнопку Pause.

Экран активных сценариев робота Ф-2

  • в этом примере робот выполняет шеей жест breath23 из сценария language-learning-experiment, а глазами выполняет жест avtoman2 из сценария inactive; остальные элементы поведения этих двух сценариев уже помечены как выполненные.

Logs – экран логов и ошибок

На экране Logs перечислены сообщения об исполнении действий на роботе. Галочки у отдельных типов сообщений позволяют включать в список сообщения только заданных типов. Чтобы показывать только возникающие ошибки (Error, Crit), нужно снять галочки с остальных пунктов (Info, Warn и т. д.). Кнопка Details выводит подробное описание для каждой ошибки. На данном экране выводятся только последние 1000 ошибок робота. Детальный лог ошибок за всё время выполнения сохраняется в файл notifications.log в рабочей папке программы f2robot.

Экран логов и ошибок робота Ф-2