Сообщения

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

Топики (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 и Quaternion - это существующие типы сообщений.

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

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

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

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

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

Last updated