# Графический интерфейс

## RoboGUI

С помощью приложения с графическим интерфейсом вы можете использовать все функции робота и просматривать его параметры в реальном времени.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FAFXi4sfkCcvmRuG5NvTO%2FScreenshot%20from%202024-09-27%2016-51-39.png?alt=media&#x26;token=2679f0ba-d947-4879-acda-9589f7edb348" alt=""><figcaption><p>Главное окно программы RoboGUI</p></figcaption></figure>

### Запуск

Приложение должно быть установлено на вашем компьютере и настроено сетевое соединение с роботом. Процесс установки описывается в разделе [Установка ПО](https://voltbro.gitbook.io/robot-sobaka-mors/nastroika-i-obsluzhivanie/ustanovka-po), настройка сетевого подключения доступна в разделах [Подключение к роботу по сети](https://voltbro.gitbook.io/robot-sobaka-mors/nastroika-i-obsluzhivanie/podklyuchenie-k-robotu-po-seti) и [Подключение к ROS на роботе](https://voltbro.gitbook.io/robot-sobaka-mors/nastroika-i-obsluzhivanie/podklyuchenie-k-ros-na-robote).&#x20;

Убедитесь, что робот готов к работе. Запуск приложения производится командой:

```
roslaunch robogui robogui_start.launch
```

### Использование приложения

Интерфейс программы делится на две составляющие. Слева находятся элементы управления роботом, справа - элементы наблюдения за состоянием робота.

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

Переключение режимов построено таким образом, что когда робот лежит вы можете перейти только в режим Joints, когда робот стоит - во все остальный.

Для управления роботом, максимальный приоритет отдается джойстику. Перед тем, как управлять роботом с помощью RoboGUI, убедитесь, что джойстик в данный момент выключен.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2Fpy0MP2uV3qXNf6NuA5hB%2FScreenshot%20from%202024-09-27%2016-51-56.png?alt=media&#x26;token=e11815b0-1125-4bd5-bb30-51d642168bb7" alt="" width="375"><figcaption></figcaption></figure>

#### Режим Walking

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FQE1WvYSXoZbXAh2If0Dn%2FScreenshot%20from%202024-09-27%2016-53-34.png?alt=media&#x26;token=7f8272a8-fcdc-4b80-b00c-7696ab6ce481" alt="" width="363"><figcaption></figcaption></figure>

В этом режиме вы можете управлять ходьбой робота. Для начала работы расположите робота на полу, либо на подставке и нажмите кнопку Stand up. После того, как робот встанет, вам откроется доступ к элементам управления.&#x20;

Ползунки X\_vel, Y\_vel, Z\_vel меняют желаемую скорость передвижения робота вдоль соответствующих осей.

Ползунок Stride height позволяет задавать желаемую высоту шага.&#x20;

Кнопка Stop Walking ставит все ползунки в нулевое положение и полностью останавливает робота.&#x20;

По нажатии на кнопку Lay Down робот ляжет на землю, управление будет выключено.

{% hint style="info" %}
Программа управления локомоцией блокирует смену высоты шага, когда робот уже идет. Для корректной работы, сначала задайте высоту шага, а только потом желаемую скорость.
{% endhint %}

{% hint style="info" %}
Приложение RoboGUI только отправляет команды в ros-топики. Правильность выполнения команд зависит исключительно от управляющей программы робота.
{% endhint %}

#### Режим Legs

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

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

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FMRTzqy84oWaV0FBk0kvU%2FScreenshot%20from%202024-09-27%2016-54-05.png?alt=media&#x26;token=cb2750ab-bef0-441d-a6b0-8b5abd8ab60a" alt="" width="361"><figcaption></figcaption></figure>

Для изменения желаемой координаты ступни, вам нужно переместить соответствующий ползунок. Каждый ползунок имеет собственное имя формата <нога> <ось>. Об обозначение каждой ноги и координатной оси, рассказывается в разделе [Обозначения](https://voltbro.gitbook.io/robot-sobaka-mors/oboznacheniya).&#x20;

Чтобы задать изначальные положения ног, нажмите кнопку Set to Zero

{% hint style="warning" %}
Данная функция служит для отладки, поэтому аккуратно перемещайте ползунки. Не дайте стопе уйти в недостижимую область.
{% endhint %}

#### Режим Body

В этом режиме вы можете управлять положением и ориентацией корпуса робота относительно его ступней.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2Fjr5SQeeHoQx3Oot6k8fs%2FScreenshot%20from%202024-09-27%2016-54-18.png?alt=media&#x26;token=0d174041-61e3-4dd2-bec7-88e976f3cd6b" alt="" width="359"><figcaption></figcaption></figure>

Ползунки X pos, Y pos, Z pos отвечают за линейное перемещение вдоль осей X, Y, Z соответственно.

Ползунки X ang, Y, ang, Z ang отвечают за угловое перемещение вокруг осей X, Y, Z соответственно.&#x20;

{% hint style="warning" %}
Данная функция служит для отладки, поэтому аккуратно перемещайте ползунки. Не дайте стопе уйти в недостижимую область.
{% endhint %}

#### Режим Joints

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2Fs4J8xGcHfQOujX6gXBnP%2FScreenshot%20from%202024-09-27%2016-54-51.png?alt=media&#x26;token=22f71948-80d4-4071-9760-c51e031e0e48" alt="" width="364"><figcaption></figcaption></figure>

Этот режим используется, когда возникает необходимость протестировать каждый привод робота по отдельности.&#x20;

Каждый ползунок имеет обозначение <номер привода> <задающий параметр>. О нумерации каждого привода вы можете ознакомиться в разделе [Обозначения](https://voltbro.gitbook.io/robot-sobaka-mors/oboznacheniya). Задающие параметры могут быть следующего вида:

* pos - угловое положение привода с учетом передаточного отношения между выходным валом двигателя и сочленением робота
* vel - угловая скорость
* torq - момент, развиваемый в сочленении
* kp - пропорциональный коэффициент регулятора
* kd - дифференциальный коэффициент регулятора

Мы советуем постепенно увеличивать коэффициенты kp и kd во избежании резкого перемещения привода, которое может повлечь за собой переход привода в неустойчивую область, большие скачки тока и поломке механической части. При этом, сначала лучше изменять значение kd и только потом - kp.

{% hint style="info" %}
Рекомендуемые значения: kp = 5, kd = 0.3&#x20;
{% endhint %}

Если вы хотите менять kp и kd сразу на всех приводах одновременно, то для этого используйте чекбокс Same KpKd.

Внизу находится кнопка Set to Zero. По нажатии на неё все поля мнгновенно обнуляются.

#### Режим Cute Actions

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FHM6lbjstBBUUEikPMxj5%2FScreenshot%20from%202024-09-27%2016-54-32.png?alt=media&#x26;token=47de04e2-2f86-4c9f-a893-344b75d87258" alt="" width="359"><figcaption></figcaption></figure>

Этот режим предназначен для совершения роботом разовых команд. К ним можно отнести команды сидеть, дать лапу, кувырок и т.п. Обратите внимание, что команды Stand Up и Lay Down повторяют действия кнопок с такими же именами в режиме Walking. Перед выполнением команды Side Roll убедитесь что слева от робота есть 2 метра свободного пространства.

#### Состояние робота

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FHxernonXaRQb1IC08G52%2Frobogui_robotstate.png?alt=media&#x26;token=35608cf9-7bce-4473-8971-cc802519a8d9" alt="" width="375"><figcaption></figcaption></figure>

В правой части главного окна находятся элементы для отслеживания текущего состояния робота. Список доступные переменных располагается в дереве Signals, отсортированных по их принадлежности:

* Desired Values - команды, поступающие на робота из верхнего уровня;
* Joint States - текущие состояния приводов робота, такие как угловое положение, скорость и момент;
* Body States - угловое положение и линейные ускорения тела робота;
* Commands to HL from LL - команды, поступающие из контроллера локомоции на аппаратную платформу;
* &#x20;Foot Positions - текущее положение ступней робота относительно тела робота.

Для того, чтобы начать отслеживать нужный вам сигнал, перетащите его мышкой из поля Signals в поле Chosen Signals.

Если вы хотите удалить сигнал из поля Chosen Signals, выберите его и нажмите клавишу Del.

Каждый раз, при выключении, программа сохраняет текущие выбранные сигналы, и затем загружает их при новом включении. Вы также можете сохранять в любом месте список выбранных сигналов при помощи кнопки Save, и потом загружать их, нажав кнопку Load.

#### Управляющее устройство

В правой нижней части окна отображается информация об устройстве, с помощью которого происходит управление роботом. При включении джойстика, управление автоматически переходит под его контроль и поле Control Device отобразит статус Radiolink. Когда вы отключите джойстик, то управление снова вернется под управлени компьютером, о чем скажет данное поле.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FTojclkXyNlyPlus9C8sb%2Frobogui_controldevice.png?alt=media&#x26;token=0c080e1f-62f3-4905-aa8f-6b3805d8f872" alt="" width="234"><figcaption></figcaption></figure>

{% hint style="info" %}
Если вы пытаетесь управлять роботом, используя RoboGUI, но робот не реагирует, то проверьте, не включен ли джойстик в данный момент.
{% endhint %}

## PlotJuggler

Программа [PlotJuggler](https://plotjuggler.io/) может использоваться для удобного отображения состояния робота в виде графиков, обновляемых в реальном времени. Это стороннее приложение с открытым [исходным кодом](https://github.com/facontidavide/PlotJuggler), часто используемое в робототехнике благодаря своей совместимости с ROS.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2F9zqYFGvyEYjRgnaZCI7s%2Fplotjuggler_0.png?alt=media&#x26;token=f46a9932-66c9-4c6e-9449-440d671e58c5" alt=""><figcaption></figcaption></figure>

### Установка

Для установки введите в терминале

```
sudo apt install ros-noetic-plotjuggler-ros
```

Чтобы  запустить, используйте команду

```
rosrun plotjuggler plotjuggler
```

### Использование

Основы работы с Plotjuggler рассказываются в [инструкции разработчика](https://facontidavide.github.io/PlotJuggler/index.html). О дополнительных возможностях вы можете узнать из презентаций [1](https://slides.com/davidefaconti/introduction-to-plotjuggler), [2](https://slides.com/davidefaconti/plotjuggler-data) и [3](https://slides.com/davidefaconti/plotjuggler-transforms).

Для того, чтобы отобразить данные робота, в выпадающем списке панели Streaming выберите пункт ROS Topic Subscriber, и далее нажмите кнопку Start.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2F4s7Na03DYT8XKbV9ae6N%2Fplotjuggler_1.png?alt=media&#x26;token=0b48c0f3-993e-4f0a-be65-c29b149dea3a" alt="" width="154"><figcaption></figcaption></figure>

В открывшемся окне Select ROS messages выберите топик /robot\_state и нажмите кнопку ОК.

<figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FuI9UG68XNvTkZ0RQA7UX%2Fplojuggler_2.png?alt=media&#x26;token=600b8c4a-c210-429e-97ed-743a50d53dc4" alt="" width="375"><figcaption></figcaption></figure>

После загрузки всех необходимых сигналов, они отобразятся в списке Timeseries List. Для их отображения, вам нужно будет перетащить мышкой нужные вам сигналы в область графика.
