Сообщения

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

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

Помимо этого, сообщения могут инкапсулировать в себе другие существующие типы сообщений и специальные заголовки.

Сообщения описываются в файлах .msg как пары значений: тип поля и имя поля.

fieldtype fieldname
fieldtype1 fieldname1

Для реального примера сообщение может выглядеть так:

int32 x
int32 y

Мы описали сообщение, содержащее две переменных типа int32 с именами x и y

Базовые типы ROS

Типы данных ROS не заимствованы напрямую ни из одного из языков. В момент "сборки" происходит преобразование типа ROS к типу используемого языка.

В таблице ниже описаны базовые типы ROS и их представление в языках С++ и Python

в ROS
для C++
для Python

bool

uint8_t

bool

int8

int8_t

int

uint8

uint8_t

int

int16

int16_t

int

uint16

uint16_t

int

int32

int32_t

int

uint32

uint32_t

int

int64

int64_t

long

uint64

uint64_t

long

float32

float

float

float64

double

float

string

std::string

str

time

ros::Time

rospy.Time

duration

ros::Duration

rospy.Duration

Отдельно стоит отметить типы данных

в ROS
для С++
для Python

fixed-length

boost::array, std::vector

tuple

variable-length

std::vector

tuple

uint8[]

std::vector

bytes

bool[]

std::vector<uint8_t>

list of bool

Наследование типов сообщений

Сообщения могут содержать не только базовые типы, но и переиспользовать уже созданные типы сообщений. Например, сообщение типа geometry_msgs/Pose описывается конфигурацией

Point position
Quaternion orientation

Где Point и Quaternion - это существующие типы сообщений.

Если рассмотреть сообщение geometry_msgs/Pose в развернутом виде, то мы увидим структуру:

geometry_msgs/Point position

  float64 x
  float64 y

float64 z

geometry_msgs/Quaternion orientation

  float64 x

  float64 y
  float64 z
  float64 w

Консольная утилита rosmsg

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

Например, если вы используете сообщение в своем коде, вы можете выполнить rosmsg show в командной строке для получения списка полей, используемых в сообщении:

$ rosmsg show sensor_msgs/CameraInfo

Header header
  uint32 seq
  time stamp
  string frame_id
uint32 height
uint32 width
RegionOfInterest roi
  uint32 x_offset
  uint32 y_offset
  uint32 height
  uint32 width
float64[5] D
float64[9] K
float64[9] R
float64[12] P

Команды консольной утилиты rosmsg

Commands:
    rosmsg show    Показать информацию о сообщении
    rosmsg info    Алиас для команды rosmsg show
    rosmsg list    Вывести все существующие типы сообщений
    rosmsg md5    Отобразить md5sum сообщения
    rosmsg package    Список всех сообщений в пакете
    rosmsg packages    Список пакетов, использующих сообщение

Last updated