Simple Scenario Sender
Программа Simple Scenario Sender позволяет управлять роботом Ф-2 с клавиатуры. Для робота можно создать несколько пакетов поведения (сценариев) и привязать каждый сценарий к отдельной клавише. Тогда при нажатии клавиши робот будет выполнять связанный с ней сценарий поведения. Это позволяет проводить с роботом эксперименты типа Wizard-of-Oz, где экспериментатор управляет роботом из соседней комнаты.
Окно программы 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>
Логи можно использовать для анализа экспериментальных данных. Например, если один сценарий отвечает на правильное действие пользователя, а другой отвечает на ошибку пользователя, то по логам можно подсчитать, сколько раз пользователь ответил правильно, а сколько раз – ошибся. Также можно оценивать интервалы времени, например, какое время занял ответ пользователя (хотя это время также будет включать время реакции экспериментатора на ответ пользователя).