ROS - Урок 6 - Понятие тем ROS


Содержание

1. Понятие тем ROS

Описание: Данный урок познакомит вас с понятием тем ROS, а также c использованием утилит командной строки rostopic и rxplot.

2. Установка

2.1 roscore

Начнём с того, что убедимся, что у нас есть работающий roscore, в новом терминале:
$ roscore


Если вы оставили работающий roscore с предыдущего урока, Вы получите сообщение об ошибке:
roscore cannot run as another roscore/master is already running. 
Please kill other roscore/zenmaster processes before relaunching


Это нормально. Только один roscore должен быть запущен.

2.2 turtlesim

Для этого урока мы также будем использовать turtlesim. Запустите в новом терминале:
$ rosrun turtlesim turtlesim_node


2.3 управление черепахой с клавиатуры (turtle keyboard teleoperation)

Нам также кое-что понадобится для управления черепахой. Запустите в новом терминале:
$ rosrun turtlesim turtle_teleop_key


Если это не сработает с вашей установкой, то попробуйте набрать:
$ rosrun turtle_teleop turtle_teleop_key 


Reading from keyboard
---------------------------
Use arrow keys to move the turtle.


Теперь, вы можете использовать клавиши со стрелками на клавиатуре для управления черепахой. Если вы не можете управлять черепахой, то сделайте активным окно терминала в котором запущен turtle_teleop_key, чтобы быть увереными в том, что ваши нажатия клавиш, записываются.



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

3. Темы (Topics) ROS

Узлы turtlesim_node и turtle_teleop_key общаются друг с другом через Тему ROS. turtle_teleop_key публикует в Тему нажатую клавишу. turtlesim подписывается на ту же тему, чтобы получить коды клавиш. Давайте воспользуемся новой утилитой — rxgraph, который показывает, узлы и темы, запущенные в настоящий момент.

3.1 rxgraph

rxgraph создает динамический граф, описывающий, что происходит в системе. rxgraph является частью пакета rxtools. В новом терминале:
$ rxgraph


Вы увидите что-то вроде:



Здесь мы выделили узлы и темы ROS. Как вы можете видеть, turtlesim_node и turtle_teleop_key узлы общаются на тему, которая называется /turtle1/command_velocity.



3.2 rostopic

Утилита rostopic позволяет получить информацию о темах ROS.

Вы можете использовать опцию -h для получения справки о доступных подкоманд для rostopic

$ rostopic -h

rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic find   find topics by type
rostopic hz     display publishing rate of topic    
rostopic info   print information about active topic
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic type


Давайте используем некоторые из этих подкоманд для изучения turtlesim.

3.2.1 rostopic echo

rostopic echo показывает данные, опубликованные на тему.

Использование:
rostopic echo [topic]


Давайте посмотрим на данные, опубликованные на Тему /turtle1/command_velocity узлом turtle_teleop_key. В новом терминале:
$ rostopic echo /turtle1/command_velocity


Вы, скорее всего, не увидите, что что-нибудь выводится — это потому, что никакие данные сейчас в этой Теме не опубликованы. Попробуйте снова поуправлять черепахой через turtle_teleop_key, нажатием клавиш со стрелками. Помните, что если черепаха не двигается, то необходимо выбрать терминал с turtle_teleop_key ещё раз.

Теперь, при нажатии на клавишу со стрелкой вы должны увидеть следующее:
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 0.0
angular: -2.0
---
linear: 0.0
angular: -2.0


Теперь давайте снова посмотрим на rxgraph, как вы можете видеть, rostopic echo теперь также подписаны на Тему turtle1/command_velocity.



3.2.2 rostopic list

rostopic list возвращает список всех тем, которые подписаны и опубликованы в настоящее время.

Позволяет понять, какой аргумент передавать в другие подкоманды. В новом терминале:
$ rostopic list -h

Usage: rostopic list [/topic]

Options:
  -h, --help            show this help message and exit
  -b BAGFILE, --bag=BAGFILE
                        list topics in .bag file
  -v, --verbose         list full details about each topic
  -p                    list only publishers
  -s                    list only subscribers


Вызовем rostopic list с подробным отчётом:
$ rostopic list -v


Эта команда отображает подробный список Тем для публикации и подписки, а так же их тип.
Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
 * /rosout [roslib/Log] 3 publishers
 * /rosout_agg [roslib/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/command_velocity [turtlesim/Velocity] 2 subscribers
 * /rosout [roslib/Log] 1 subscriber


4. Сообщения (Messages) ROS

Связь по Темам, происходит путем отправки сообщений ROS между узлами. Для общения издателя (turtle_teleop_key) и абонента (turtlesim_node), издатель(publisher) и абонент(subscriber) должны отправлять и получать сообщения одинакового типа. Это означает, что тип Темы определяется типом сообщений, который в ней публикуются. Тип сообщения, отправлеямого в Тему может быть определён с помощью команды rostopic type.

4.0.3 rostopic type

rostopic type возвращает тип сообщения, который публикуется в Теме.

Использование:
rostopic type [topic]


Попробуем:
$ rostopic type /turtle1/command_velocity


Получим:
turtlesim/Velocity


Мы можем посмотреть на детали сообщения с использованием rosmsg:
$ rosmsg show turtlesim/Velocity


float32 linear
float32 angular

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

4.1 rostopic — продолжение

Теперь, когда мы узнали о сообщениях ROS, давайте используем rostopic с сообщениями.

4.1.1 rostopic pub

rostopic pub публикует данные в Тему.

Использование:
rostopic pub [topic] [msg_type] [args]


Пример:
$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8


Эта команда, отправляет для turtlesim сообщение, в котором говорится двигаться с линейной скоростью в 2.0 и угловой скорость 1.8.



Это довольно сложный пример, так что давайте рассмотрим каждый параметр отдельно.

rostopic pub

эта команда будет публиковать сообщения в заданную Тему.

-1

(тире-один) Эта опция заставляет rostopic опубликовать только одно сообщение и завершиться.

/turtle1/command_velocity

Это название темы для публикации.

turtlesim/Velocity

Это тип сообщения используемый для публикации темы.

--

(двойное тире) Это говорит парсеру опций, что ни один из следующих аргументов не является опцией. Это необходимо в тех случаях, когда ваши аргументы могут использовать тире — (например, отрицательные числа).

2.0 1.8

Как отмечалось ранее, сообщение(msg) turtlesim/Velocity имеет два элемента представленных числами с плавающей точкой: линейная и угловая скорость. В этом случае, 2.0 становится линейным значением, а 1.8 — угловым значением. Эти аргументы, являются, на самом деле, в стиле YAML синтаксиса, который более подробно описан в документации по YAML.

Как вы можете видеть, черепаха перестала двигаться, это потому, что черепаха требует постоянного потока команд в 1 Гц чтобы двигаться дальше. Мы можем опубликовать устойчивый поток команд с помощью команды rostopic pub -r:
$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8


Эта команда публикует команду скорости с частотой 1 Гц в Тему скорости.


Мы также можем посмотреть, что происходит в rxgraph:


Как вы можете видеть, черепаха ходит по замкнутому кругу. В новом терминале, мы можем запустить rostopic echo, чтобы увидеть данные, опубликованные в нашей turtlesim:

4.1.2 rostopic hz

rostopic hz сообщает скорость, с которой публикуются данные.

Использование:
rostopic hz [topic]


Давайте посмотрим, как быстро turtlesim_node публикует /turtle1/pose:
$ rostopic hz /turtle1/pose


Результат:
subscribed to [/turtle1/pose]
average rate: 59.354
        min: 0.005s max: 0.027s std dev: 0.00284s window: 58
average rate: 59.459
        min: 0.005s max: 0.027s std dev: 0.00271s window: 118
average rate: 59.539
        min: 0.004s max: 0.030s std dev: 0.00339s window: 177
average rate: 59.492
        min: 0.004s max: 0.030s std dev: 0.00380s window: 237
average rate: 59.463
        min: 0.004s max: 0.030s std dev: 0.00380s window: 290


Теперь мы можем сказать, что turtlesim публикует данные о нашей черепахе с частотой 60 Гц. Мы также можем использовать rostopic type в сочетании с rosmsg show, чтобы получить детальную информацию о теме:

Теперь, когда мы рассмотрели темы, используя rostopic, давайте воспользуемся другой утилитой, чтобы посмотреть на данные, опубликованные в нашей turtlesim:

4.2 rxplot

rxplot отображает прокручивающийся график данных, опубликованных в Темах.
Здесь мы используем rxplot для построения данных, опубликованных в Теме /turtle1/pose:
$ rxplot /turtle1/pose/x,/turtle1/pose/y /turtle1/pose/theta


Вы увидите местоположение черепахи XY, представленные на верхнем графике, в то время как угол поворота черепахи (theta) отображается на нижнем графике:


Вот и конец урока, используйте Ctrl-C, чтобы убить терминалы rostopic, но оставьте работать терминал turtlesim.

Далее: Сервисы ROS и их параметры

Ссылки:
http://www.ros.org/wiki/ROS/Tutorials/UnderstandingTopics
  • 0
  • 3 мая 2011, 21:03
  • admin

Комментарии (1)

RSS свернуть / развернуть
+
0
Имейте ввиду, что теперь пакет rxgraph — зовется ros-kinetic-rqt-graph (для версии kinetic-соответсвенно)
avatar

water

  • 17 сентября 2016, 11:29

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.