# cmd\_commutator

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

## ROS API

ROS API состоит из config-файла, вызова сервисов,  входящих и исходящих топиков.

### Параметры

Файл параметров располагается в папке config

* frequency (по умолчанию: 40) - частота, на которой работает модуль
* input1\_cmd\_vel\_topic (по умолчанию: "ds4/cmd\_vel") - название входящего топика желаемой скорости робота для устройства №1&#x20;
* input1\_cmd\_pose\_topic (по умолчанию: "ds4/cmd\_pose") -  название входящего топика желаемого положения и ориентации корпуса для устройства №1
* input1\_cmd\_ef\_pose\_topic (по умолчанию: "ds4/ef\_position/command") -  название входящего топика желаемого положения ступни робота для устройства №1
* input1\_cmd\_joint\_pos\_topic (по умолчанию: "ds4/joint\_group\_position\_controller/command") -  название входящего топика желаемого положения сочленений робота для устройства №1
* input1\_status\_topic (по умолчанию: "ds4/cur\_device") - название входящего топика статуса подключения устройства №1
* input2\_cmd\_vel\_topic (по умолчанию: "radiolink/cmd\_vel") - название входящего топика желаемой скорости робота для устройства №2
* input2\_cmd\_pose\_topic (по умолчанию: "radiolink/cmd\_pose") - название входящего топика желаемого положения и ориентации корпуса для устройства №2
* input2\_cmd\_ef\_pose\_topic (по умолчанию: "radiolink/ef\_position/command") - название входящего топика желаемого положения ступни робота для устройства №2
* input2\_cmd\_joint\_pos\_topic (по умолчанию: "radiolink/joint\_group\_position\_controller/command") - название входящего топика желаемого положения сочленений робота для устройства №2
* input2\_status\_topic (по умолчанию: "radiolink/status") - название входящего топика статуса подключения устройства №2
* input3\_cmd\_vel\_topic (по умолчанию: "nav/cmd\_vel") - название входящего топика желаемой скорости робота для устройства №3
* input3\_cmd\_pose\_topic (по умолчанию: "nav/cmd\_pose") - название входящего топика желаемого положения и ориентации корпуса для устройства №3
* input3\_cmd\_ef\_pose\_topic (по умолчанию: "nav/ef\_position/command") - название входящего топика желаемого положения ступни робота для устройства №3
* input3\_cmd\_joint\_pos\_topic (по умолчанию: "nav/joint\_group\_position\_controller/command") -&#x20;
* input3\_status\_topic (по умолчанию: "nav/status") - название входящего топика желаемого положения сочленений робота для устройства №3
* input4\_cmd\_vel\_topic (по умолчанию: "gui/cmd\_vel") - название входящего топика желаемой скорости робота для устройства №4
* input4\_cmd\_pose\_topic (по умолчанию: "gui/cmd\_pose") - название входящего топика желаемого положения и ориентации корпуса для устройства №4
* input4\_cmd\_ef\_pose\_topic (по умолчанию: "gui/ef\_position/command") - название входящего топика желаемого положения ступни робота для устройства №4
* input4\_cmd\_joint\_pos\_topic (по умолчанию: "gui/joint\_group\_position\_controller/command") -&#x20;
* input4\_status\_topic (по умолчанию: "gui/status") - название входящего топика желаемого положения сочленений робота для устройства №4
* output\_cmd\_vel\_topic (по умолчанию: "cmd\_vel") - название исходящего топика желаемой скорости робота
* output\_cmd\_pose\_topic (по умолчанию: "cmd\_pose") - название исходящего топика желаемого положения и ориентации корпуса
* output\_cmd\_ef\_pose\_topic (по умолчанию: "ef\_position/command") - название исходящего топика желаемого положения ступни робота
* output\_cmd\_joint\_pos\_topic (по умолчанию: "joint\_group\_position\_controller/command") - название исходящего топика желаемого положения сочленений робота
* output\_status\_topic (по умолчанию: "cur\_device") - название исходящего топика, отображающего номер подключенного сейчас наиболее приоритетного устройства&#x20;

### Входящие топики

Здесь описываются названия топиков, которые установлены в пакете по умолчанию.

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

* head - передача данных с джойстика Sony Dualshock 4
* radiolink - передача данныз с джойстика Radiolink T8S
* nav - передача данных с модуля навигации
* gui - передача данный из ПО Robogui

В остальной части, топики дублируют свои имена и функции с исходящими, кроме топика status ([std\_msgs/Bool](https://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html)) . Он необходим для отображения информации о подключении устройства: True - устройство подключено, False - устройство не подключено. &#x20;

Приоритет устройств идет в порядке возрастания по списку списку. Т.е., если у вас одновременно включены джойстик Radiolink T8S и ПО Robogui, то cmd\_commutator на выходе будет давать данные из джойстика, так как у него больший приоритет.&#x20;

### Исходящие топики

* cmd\_vel ([geometry\_msgs/Twist](https://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html)) - желаемая скорость перемещения робота
* cmd\_pose ([geometry\_msgs/Twist](https://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html)) - желаемые положения и ориентация корпуса робота
* ef\_position/command ([geometry\_msgs/PoseArray](https://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/PoseArray.html)) - желаемые положения ступней ног робота
* joint\_group\_position\_controller/command ([trajectory\_msgs/JointTrajectoryPoint](https://docs.ros.org/en/noetic/api/trajectory_msgs/html/msg/JointTrajectoryPoint.html)) - желаемое угловое положение сочленений робота
* cur\_device ([std\_msgs/UInt8](https://docs.ros.org/en/melodic/api/std_msgs/html/msg/UInt8.html)) - текущее подключенное устройство. 1 - Dualshock 4, 2 - Radiolink T8S, 3 - модуль навигации, 4 - Robogui, 0 - ни одного устройства.&#x20;


---

# 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/cmd_commutator.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.
