# Topic

Модель работы в режиме Topic подразумевает использование одного типа сообщения для Издателя (Publisher) и Подписчика (Subscriber).

Модель Topic являются однонаправленной и подразумевает непрерывную отправку или получение сообщений. Такой способ коммуникации подходит для датчиков, которым требуются периодическая передача данных. Несколько подписчиков могут получать сообщения от одного издателя и наоборот (возможна работа нескольких издателей).

На изображении ниже показана модель работы датчика температуры, когда его данные получают различные ноды.

![](https://368069091-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOSXnrt0c9kcKOFr9q6qb%2Fuploads%2FHj4x2RB1SwPI0kJ5EUn2%2Fros_topic.png?alt=media)

## Консольная утилита rostopic <a href="#konsolnaya-utilita-rostopic" id="konsolnaya-utilita-rostopic"></a>

`rostopic` - это специальная консольная утилита, предназначенная для отображения отладочной информации о топиках в ROS. С ее помощью удобно искать нужные топики и выводить сообщения в консоль для отладки.

Список основных используемых команд:

```
rostopic bw     Показать занимаемый сетевой канал
rostopic echo   Вывести сообщения на экран
rostopic find   Поиск топика по типу
rostopic hz     Показать частоту обновления топика
rostopic info   Показать информацию о топике
rostopic list   Показать список существующий топиков
rostopic pub    Опубликовать данные в топик
rostopic type   Показать тип сообщения для топика
```

### Примеры использования <a href="#primery-ispolzovaniya" id="primery-ispolzovaniya"></a>

Вывести список существующих топиков:

```
rostopic list
```

Вывести сообщения из топика `topic_name`:

```
rostopic echo /topic_name
```

### rostopic pub <a href="#rostopic-pub" id="rostopic-pub"></a>

Отправить текстовое сообщение в топик:

```
rostopic pub my_topic std_msgs/String "hello there"
```

Отправить сообщение типа `geometry_msgs/Twist`в топик /cmd\_vel с частотой 10hz:

```
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
```

Удобно при вызове функций использовать `Tab` для поиска и подстановки необходимых данных в командную строку.

Например

```
rostopic pub /c+Tab -> rostopic pub /cmd_vel (подставится адрес существующего топика)
rostopic pub /cmd_vel +Tab -> rostopic pub /cmd_vel geometry_msgs/Twist (подставится тип сообщения выбранного топика)
```

Более подробная информация доступна на Wiki странице [http://wiki.ros.org/rostopic](http://wiki.ros.org/rostopic)
