Сообщения
Сообщение представляет собой структуру данных, которая используется при обмене информацией между нодами.
Топики (Topic), службы (Services) и Действия (Actions) используют сообщения для взаимодействия между собой. Сообщения могут включать в себя как базовые типы (целое число, число с плавающей точкой, логические и т.д.), так и массивы сообщений.
Помимо этого, сообщения могут инкапсулировать в себе другие существующие типы сообщений и специальные заголовки.
Сообщения описываются в файлах .msg
как пары значений: тип поля и имя поля.
fieldtype fieldname
fieldtype1 fieldname1
Для реального примера сообщение может выглядеть так:
int32 x
int32 y
Мы описали сообщение, содержащее две переменных типа int32
с именами x
и y
Базовые типы ROS
Типы данных ROS не заимствованы напрямую ни из одного из языков. В момент "сборки" происходит преобразование типа ROS к типу используемого языка.
В таблице ниже описаны базовые типы ROS и их представление в языках С++ и 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
Отдельно стоит отметить типы данных
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
rosmsg
Commands:
rosmsg show Показать информацию о сообщении
rosmsg info Алиас для команды rosmsg show
rosmsg list Вывести все существующие типы сообщений
rosmsg md5 Отобразить md5sum сообщения
rosmsg package Список всех сообщений в пакете
rosmsg packages Список пакетов, использующих сообщение
Last updated