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

Управляющее программное обеспечение

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

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

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

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

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

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

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

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

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

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

CommunicationClient – редактор поведения

Программный компонент CommunicationClient позволяет создавать последовательно пакетов BML и отправлять их на исполнение на робота. В файле конфигурации appsettings.json нужно указать адрес робота. Вот так будет выглядеть файл конфигурации, если RobotSystem.exe и CommunicationClient работают на одном компьютере:

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "RobotFullControlAddress": "ws://localhost:5000/fullcontrol"
}

Если используется робот со встроенным компьютером, то вместо localhost нужно указать IP-адрес робота (например, 192.168.1.10) или сетевое имя робота f2robot. Если роботом с другого компьютера локальной сети управляет программа RobotSystem.exe, то нужно указать IP-адрес или имя компьютера, где работает RobotSystem.exe.

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

В программе CommunicationClient можно создавать BML и отправлять их на исполнение на робота кнопкой Send to robot. Результат работы будет отображаться справа в окне логов.

В нижней части окна показано, что CommunicationClient подключился к программному модулю управления роботом: горит надпись Robot is connected. Эта надпись означает связь с RobotSystem.exe или с внутренним программным обеспечением робота; если эта надпись горит, но робот не работает, то ошибки нужно искать в выводе программы RobotSystem.exe. Например, если к роботу не подключено питание, то CommunicationClient связывается с RobotSystem.exe (отображатеся надпись Robot is connected), но RobotSystem.exe не имеет возможности управлять роботом. Если CommunicationClient по какой-то причине потерял связь с программой робота, можно попытаться восстановить соединение кнопкой Reconnect. Например, связь может прерваться, если перезагрузить робота или программу RobotSystem.exe.

На исполнение можно отправить сценарий, который содержит один или несколько пакетов 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

InactiveProvider – генератор поведения при бездействии

Программный компонент InactiveProvider выбирает пакеты поведения, описывающие небольшие движения робота и изменения направления взгляда. Он постоянно передаёт эти пакеты поведения на робота, чтобы “анимировать” робота в ситуации бездействия. Пакеты, переданные другими программными компонентами, получают приоритет и подавляют выполнение пакетов от InactiveProvider. В файле конфигурации InactiveProvider нужно указать адрес робота (или адрес компьютера с RobotSystem), например:

{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "Interval": 1000,
    "Threshold": 3,
    "Reactions": "C:\\Robot\\gestures\\reactions.sbml",
    "RobotFullControlAddress": "ws://localhost:5000/scenario"
}

Также в ключе Reactions нужно указать файл с описанием поведения, из которого будут извлекаться пакеты поведения для состояния бездействия. InactiveProvider будет брать пакеты из сценария с именем inactive, например:

<behavior>
  <scenario name="inactive">
    <bml id="1"> 
      <head lexeme="eyes_up_right3"/>
      <pupils lexeme="eyes_up_right3"/>
      <body lexeme="breath23"/>
    </bml>
    <bml id="10"> 
      <head lexeme="relax1"/>
      <pupils lexeme="relax1"/>
      <body lexeme="breath23"/>
    </bml>
  </scenario>
</behavior>