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 комментариев на «“ROS — Урок 6 — Понятие тем ROS”»
Имейте ввиду, что теперь пакет rxgraph — зовется ros-kinetic-rqt-graph (для версии kinetic-соответсвенно)