Робот
Устройство и подключение
Управляющее ПО
Язык BML
Словарь жестов
SSSender
API робота
Когнитивный компонент
Обработка текста
Парсер
Массивы текстов
База разборов

Simple Scenario Sender

Программа Simple Scenario Sender позволяет управлять роботом Ф-2 с клавиатуры. Для робота можно создать несколько пакетов поведения (сценариев) и привязать каждый сценарий к отдельной клавише. Тогда при нажатии клавиши робот будет выполнять связанный с ней сценарий поведения. Это позволяет проводить с роботом эксперименты типа Wizard-of-Oz, где экспериментатор управляет роботом из соседней комнаты.

Окно программы Simple Scenario Sender состоит из списка клавиш и сценариев. Сценарий можно отправить на выполнение нажатием клавиши на клавиатуре или нажатием мышкой на соответствующую кнопку на экране.

Интерфейс Simple Scenario Sender

Программа Simple Scenario Sender настраивается тремя файлами:

  • appsettings.json – общая конфигурация
  • key_binding.json – настройка клавиш (имя файла можно менять)
  • reactions.xml – описание пакетов поведения (имя файла можно менять)

Файл appsettings.json – хранит ссылки на файлы настройки клавиш и описания пакетов поведения, а также содержит адрес робота:

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "RobotAddress": "http://localhost:5000/activation",
    "KeyBindingPath": "key_binding.json",
    "ReactionsPath": "reactions.xml"
}

Ключ RobotAddress указывает на адрес робота. Если робот подключён к тому компьютеру, на котором запущена программа Simple Scenario Sender, то достаточно использовать адрес localhost. Но в эксперименте может потребоваться управлять роботом, расположенным в соседней комнате. Для этого нужно узнать IP-адрес робота или того компьютера, к которому подключён робот, и указать этот IP-адрес в ключе RobotAddress вместо localhost, например:

    "RobotAddress": "http://192.168.1.10:5000/activation"

Ключ ReactionsPath указывает на файл reactions.xml. Для некоторых экспериментов может потребоваться изменить название этого файла. Например, можно создать файл реакций reactions-polite.xml для вежливого робота и reactions-rude.xml для строгого робота, меняя эти файлы в эксперименте. В этом случае используемый файл реакций достаточно указать в ключе ReactionsPath. Ключ KeyBindingPath указывает на файл key_binding.json. Этот файл тоже можно переименовать и указать новое название в ключе KeyBindingPath. Если какой-то из этих файлов находится в другой папке, то при указании пути к нему косые черты должны быть продублированы, например:

    "KeyBindingPath": "C:\\SimpleScenarioSender\\key_binding.json"

Если реакции в файле reactions.xml были изменены или если были изменены ссылки на файлы в appsettings.json, то в программе достаточно нажать кнопку Обновить. Перезапускать приложение не требуется.

Файл key_binding.json хранит соответствия между клавишами и сценариями поведения из файла reactions.xml, например:

{
  "Bindings": [
    {
      "Key": "D1",
      "Modifier": "None",
      "Reaction": "greeting"
    },
    {
      "Key": "X",
      "Modifier": "Alt",
      "Reaction": "choose_random"
    }
  ]
}

В этом примере клавиша 1 на основной клавиатуре запускает сценарий greeting, а клавиши Alt-X запускают сценарий choose_random.

Названия клавиш нужно приводить в соответствии с указателем клавиш Avalonia. Например, цифровые клавиши имеют названия D1, D2, D3 и т. д. (но на цифровом блоке клавиши другие: NumPad1, NumPad2 и т. д.) Использовать цифровые клавиши удобно, потому что они не меняются при переключении языка. Клавиши могут иметь модификаторы, например: Alt, Control или Shift. При простом нажатии клавиши нужно указывать "Modifier": "None".

Файл reactions.xml хранит описание сценариев поведения, которые вызываются по нажатию клавиши. В следующем файле описаны сценарии greeting и choose_random:

<behavior>
  <scenario name="greeting">
    <bml>
      <speech text="Здорово, что ты пришёл"/>
      <figure lexeme="happy2"/>
    </bml>
  </scenario>
  <scenario name="choose_random" run="random">
    <bml>
      <speech text="Пойдём, погуляем"/>
      <figure lexeme="referent_right_long2"/>
    </bml>
    <bml>
      <speech text="Наверно, стоит сходить в магазин"/>
      <figure lexeme="referent_left_long2"/>
    </bml>
    <bml>
      <speech text="Давай останемся дома и посмотрим кино"/>
      <figure lexeme="referent_right_short1"/>
    </bml>
  </scenario>
</behavior>

Если в сценарии указать параметр run="random", то из сценария будет выбираться один случайный пакет BML. Если этот парамер не указывать, то при вызове сценария будут выполняться все пакеты bml в том порядке, как они указаны в сценарии.

Сохранение логов

Программа Simple Scenario Sender сохраняет логи в папку /logs. В логах отражается отправка на робота определённого сценария и bml-пакета из этого сценария. Если сценарий имеет параметр run="random", то bml-пакет для этого сценария будет выбираться случайным образом. То, какой именно bml-пакет был выбран для сценария, отражается в логах. Например:

2024-03-14 15:14:01.8191|INFO|Sended test2-simple-scenario-sender - <scenario id="test2-simple-scenario-sender">|  <bml>|    <speech text="привет" />|  </bml>|</scenario>
2024-03-14 15:14:13.1101|INFO|Sended test2-simple-scenario-sender - <scenario id="test2-simple-scenario-sender">|  <bml>|    <speech text="Вот мы и в школе" />|    <figure lexeme="neutral" />|  </bml>|</scenario>
2024-03-14 15:14:15.6392|INFO|Sended test2-simple-scenario-sender - <scenario id="test2-simple-scenario-sender">|  <bml>|    <speech text="Вот мы и в универе" />|    <figure lexeme="neutral" />|  </bml>|</scenario>
2024-03-14 15:14:17.8498|INFO|Sended test2-simple-scenario-sender - <scenario id="test2-simple-scenario-sender">|  <bml>|    <speech text="Вот мы и в универе" />|    <figure lexeme="neutral" />|  </bml>|</scenario>
2024-03-14 15:14:19.5081|INFO|Sended test2-simple-scenario-sender - <scenario id="test2-simple-scenario-sender">|  <bml>|    <speech text="Вот мы и в школе" />|    <figure lexeme="neutral" />|  </bml>|</scenario>

Логи можно использовать для анализа экспериментальных данных. Например, если один сценарий отвечает на правильное действие пользователя, а другой отвечает на ошибку пользователя, то по логам можно подсчитать, сколько раз пользователь ответил правильно, а сколько раз – ошибся. Также можно оценивать интервалы времени, например, какое время занял ответ пользователя (хотя это время также будет включать время реакции экспериментатора на ответ пользователя).