пятница, 7 июля 2017 г.

ROS.Топики и сообщения

Объекты в ROS могут общаться через так называемые топики (topics). Можно воспринимать это как что-то вроде "чата". Если нода подписана на топик, она будет получать публикуемые в нём сообщения. С другой стороны, нода и сама может публиковать сообщения. Список доступных в данный момент топиков можно получить с помощью команды

   rostopic list

Увидеть публикуемые сообщения позволяет команда 

   rostopic echo топик

Если у вас не запущен пример с черепахой, откройте его с помощью команд (в разных терминалах)

   roscore
   rosrun turtlesim turtlesim_node
   rosrun turtlesim turtlesim_teleop_key

После этого можно посмотреть какой-либо топик из списка rostopic list, например, координаты черепахи

   rostopic echo /turtle1/pose

Команда rostopic также позволяет узнать такие характеристики как:
  • rostopic info топик - описание топика;
  • rostopic type топик - тип сообщений;
  • rostopic hz топик - частота обновления, Гц;
  • rostopic bw топик - объём передаваемых данных в единицу времени, байт/с.
Получить наглядное представление о том, кто, с кем и через какие топики общается, позволяет программа rqt_graph. Для примера с черепахой она отобразит следующий граф.

Как видно из рисунка, в данный момент активны 2 нода (teleop_turtle и turtlesim), и управление происходит посредством топика /turtle1/cmd_vel.

Сообщения (messages), которыми обмениваются ноды, представляют собой поименованные поля с заданным типом данных и напоминают то, что в языке С называют "структурой". Команда 

   rosmsg show тип_сообщения

позволяет отобразить формат. Например,

   rosmsg show turtlesim/Color 

покажет, что сообщение о цвете состоит из трёх полей (r, g, b), каждое из который представлено типом uint8. Вообще, поля могут быть элементарными типами (int8, bool, string), массивами фиксированной или переменной длины (обозначаются с помощью квадратных скобок []), а также другими сообщениями ROS.  

Из консоли можно не только получать, но и публиковать сообщения, для этого служит команда 

   rostopic pub режим топик тип_сообщения сообщение

Например, следующая команда заставит черепаху непрерывно двигаться по кругу:

   rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

Здесь мы посылаем сообщения с частотой раз в секунду (-r 1) в топик /turtle1/cmd_vel типа geometry_msgs/Twist. Формат сообщения представляет собой комбинацию из двух трёхэлементных векторов, один для линейной скорости, другой для угловой. Их значения указаны в кавычках. Двойная черта не обязательна, она имеет смысл в случае отрицательных чисел. 

Ещё одна утилита, rqt_plot, позволяет рассматривать публикуемые данные как график от времени. Если ваша черепаха продолжает кружиться, выполните команду 

   rqt_plot

В графическом окне будет отображено изменение её координат по осям x и y.


Комментариев нет:

Отправить комментарий