# 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](/robot-sobaka-mors/ustroistvo-robota/ros-pakety/mors_base/cmd_commutator.md) и [joy\_converter](/robot-sobaka-mors/ustroistvo-robota/ros-pakety/mors_base/joy_converter.md)

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

**/**[**robot\_mode**](/robot-sobaka-mors/ustroistvo-robota/ros-servisy/robot_mode.md)

**/**[**robot\_action**](/robot-sobaka-mors/ustroistvo-robota/ros-servisy/robot_action.md)

**/**[**stride\_height**](/robot-sobaka-mors/ustroistvo-robota/ros-servisy/stride_height.md)

***

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

Если вы хотите сконфигурировать пакет локально, то используйте файл: `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="/files/p5DsXdorD6XC8feV6qdo" alt=""><figcaption><p>Рис. 1 - пример сообщения из топика /joy</p></figcaption></figure>
* Названия кнопок в конфигурационном файле и места, где они расположены на джойстике:<br>

  <figure><img src="/files/BfRaRfCJYutPM3KC0osu" alt=""><figcaption><p>Рис. 2 - обозначения кнопок на джойстике</p></figcaption></figure>
* В конфигурационном файле joy\_converter\_config.yaml каждой кнопке сопоставлен массив из двух значений:\
  ![](/files/awudNXDKGsoWS50qWeB5)
  * Первое значение (в примере выше: 0) отвечает за поле сообщения Joy (Joy.axes или Joy.buttons) откуда брать значения.\
    0 - Joy.axes, 1 - Joy.buttons
  * Второе значение (в примере выше: 3) отвечает за порядковый номер массиве значения этого поля. Нумерация ведётся с нуля.
  * Таким образом, данные для rstick\_x хранятся в сообщении топик /joy в следующем месте:<br>

    <figure><img src="/files/Rci0wiXuKsLDVUwEfk85" alt=""><figcaption><p>Рис. 3 - расположение данных rstick_x в сообщении Joy</p></figcaption></figure>
* Сопоставьте все кнопки и стики джойстика в конфигурационном файле и сохраните его
* Правильность настройки конфигурационного файла можно проверить, запустив симуляцию с джойстиком (см. [подробнее](/robot-sobaka-mors/simulyaciya/podklyuchenie-dzhoistikov-k-pk.md))


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://voltbro.gitbook.io/robot-sobaka-mors/ustroistvo-robota/ros-pakety/mors_base/joy_converter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
