# joy\_converter

Данный пакет осуществляет перевод данных джойстика, поступающих с пакета Joy, в управляющие команды для МОРСа (в частности, cmd\_commutator).

По умолчанию joy\_converter шлёт данные в семейство топиков /joy\_converter:

**/joy\_converter/cmd\_vel**

**/joy\_converter/cmd\_pose**

**/joy\_converter/ef\_position/command**

**/joy\_converter/joint\_group\_position\_controller/command**

**/joy\_converter/status**

Если вы используете пакет навигации, замените /joy\_converter на /nav в конфиг-файлах пакетов [cmd\_comutator](https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/ros-pakety/mors_base/cmd_commutator) и [joy\_converter](https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/ros-pakety/mors_base/joy_converter)

Также пакеты вызывает следующие сервисы:

**/**[**robot\_mode**](https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/ros-servisy/robot_mode)

**/**[**robot\_action**](https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/ros-servisy/robot_action)

**/**[**stride\_height**](https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/ros-servisy/stride_height)

***

Настройка пакета производится через конфигурационный файл.

Если вы хотите сконфигурировать пакет локально, то используйте файл: `mors_base/joy_converter/config/joy_converter_config.yaml`\
Эта конфигурация используется при ручном запуске конкретно этого пакета\
(команды `roslaunch joy_converter joy_converter_start.launch` или\
`rosrun joy_converter joy_converter_main.py`, во втором варианте запустите Joy)

Если вы хотите сконфигурировать пакет, чтобы конфигурация учитывалась при запуске через roslaunch `mors bringup_sim.launch` тогда используйте файл: `mors_base/mors/config/joy_converter_config.yaml`

***

### Схема работы

С самим джойстиком взаимодействует стандартный ROS-пакет Joy (см. [подробнее](https://wiki.ros.org/joy)). Он публикует [сообщение](https://docs.ros.org/en/api/sensor_msgs/html/msg/Joy.html), имеющее два поля: Joy.axes и Joy.buttons в топик /joy. Внутри каждого поля находится массив значений.

Пакет joy\_converter анализирует сообщения пакета Joy и выполняет и посылает команды в топики МОРСа: переключает режимы, задает скорость и направление ходьбы, управляет положением корпуса.

Для корректной работы joy\_converter необходимо в его config-файле описать какое значения массива за какую кнопку/стик джойстика отвечает.

### Описание конфигурационного файла

Стандартный пакет Joy выдает [сообщение](https://docs.ros.org/en/api/sensor_msgs/html/msg/Joy.html), имеющее два поля: Joy.axes и Joy.buttons. Внутри каждого поля находится массив значений. За сопоставление наименования кнопки и порядкового номера в массиве отвечает блок joystick\_config в файле joy\_converter\_config.yaml.

```yaml
# joy_converter_config.yaml

joystick_config:
# rstick_x: [0,3]:
# '0' - get data from Joy.axes or Joy.buttons:
# 0 - Joy.axes, 1 - Joy.buttons
# '3' - index in array. Array in Joy.axes/Jot.buttons
  {
  rstick_x: [0,3],
  rstick_y: [0,4],
  lstick_x: [0,0],
  lstick_y: [0,1],
  rbtn_small: [1,5],
  rbtn_big: [0,5],
  rstick_btn: [1,10],
  lbtn_small: [1,4],
  lbtn_big: [0,2],
  lstick_btn: [1,9],
  lpad_x: [0,6],
  lpad_y: [0,7],
  rpad_down: [1,0],
  rpad_left: [1,2],
  rpad_up: [1,3],
  rpad_right: [1,1],
  start_btn: [1,7],
  mode_btn: [1,6],
  joy_btn: [1,8]
  }
```

Поле joystick\_config содержит дефолтные значения, которые подходят для популярных джойстиков: Logitech Gamepad F710, Microsoft X-Box 360 pad.

***

### Настройка конфигурационного файла под нестандартный джойстик

Если преднастроенные параметры вам не подходят то отредактируйте поле следующим образом:

* Запустите пакет Joy и подпишитесь на его топик /joy
  * В первом терминале запустите roscore  командой `roscore`
  * Во втором терминале запустите пакет Joy командой `rosrun joy joy_node`
  * В третьем терминале подпишитесь на топик командой `rostopic echo /joy`

{% hint style="info" %}
Если после команды `rostopic echo /joy` ничего не появляется, значит в пакет Joy "не видит" ваш джойстик в ПК.
{% endhint %}

* Нажимайте кнопки и двигайте стики, отмечая какое значение в сообщении топика меняется<br>

  <figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FEptqUdno2mNIEefdYtZG%2Fimage.png?alt=media&#x26;token=aa2f03f6-dcc3-41f9-89cf-7d71fc62f70b" alt=""><figcaption><p>Рис. 1 - пример сообщения из топика /joy</p></figcaption></figure>
* Названия кнопок в конфигурационном файле и места, где они расположены на джойстике:<br>

  <figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2F5TMk8pnHrxgPiiAzo3K7%2Fphoto_2024-09-18_16-04-37.jpg?alt=media&#x26;token=967488fc-fa56-4569-b858-afbeb9275f35" alt=""><figcaption><p>Рис. 2 - обозначения кнопок на джойстике</p></figcaption></figure>
* В конфигурационном файле joy\_converter\_config.yaml каждой кнопке сопоставлен массив из двух значений:\
  ![](https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2FXcUTfS2s2wBfWJEsMAoE%2Fimage.png?alt=media\&token=4f1255c1-fb25-45f0-8456-63391049a0e5)
  * Первое значение (в примере выше: 0) отвечает за поле сообщения Joy (Joy.axes или Joy.buttons) откуда брать значения.\
    0 - Joy.axes, 1 - Joy.buttons
  * Второе значение (в примере выше: 3) отвечает за порядковый номер массиве значения этого поля. Нумерация ведётся с нуля.
  * Таким образом, данные для rstick\_x хранятся в сообщении топик /joy в следующем месте:<br>

    <figure><img src="https://2841855051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWMZrcMSoDlC4YPw6l8xM%2Fuploads%2Fdha4gqzUMS4RZW2gesas%2F%D0%91%D0%B5%D0%B7%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8.png?alt=media&#x26;token=33d4365c-069d-4822-8184-d62c0493406c" alt=""><figcaption><p>Рис. 3 - расположение данных rstick_x в сообщении Joy</p></figcaption></figure>
* Сопоставьте все кнопки и стики джойстика в конфигурационном файле и сохраните его
* Правильность настройки конфигурационного файла можно проверить, запустив симуляцию с джойстиком (см. [подробнее](https://voltbro.gitbook.io/robot-sobaka-mors/simulyaciya/podklyuchenie-dzhoistikov-k-pk))
