Сообщения
Сообщение представляет собой структуру данных, которая используется при обмене информацией между нодами.
Топики (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 Список пакетов, использующих сообщение