Собственные типы сообщений
Ранее, когда мы работали с топиками, мы передавали между топиками данные в виде простых сообщений. Мы использовали уже созданные ранее типы сообщений или базовые типы например String, Int16 и т.п.
На этом уроке мы научимся создавать собственные типы сообщений и работать с ними.
Для того чтобы система смогла правильно распознать и использовать созданные сообщения, мы должны их правильно описать, и добавить генерацию необходимых файлов в процесс сборки нашего пакета.
Создание сообщения
Файл с сообщениями должен храниться в нашем пакете в директории msg и иметь название вида Name_of_your_message.msg.
Зайдем в директорию нашего пакета из прошлого урока ros_base и создадим директорию msg
cd ~/catkin_ws/src/base_ros
mkdir msg
cd msg
Далее создадим файл описывающий наше сообщение , например, для передачи данных барометрического датчика Barometer.msg
uint16 pressure
float32 temperature
float32 humidity
В этом файле мы причислили структуры данных нашего сообщения с параметрами для давления, температуры, и влажности.
Далее, нам необходимо изменить конфигурационный файл сборщика, для того чтобы сообщение правильно инсталлировалось в ROS, и было доступно для использования другими пакетами.
Настройка сборщика
Опишем несколько шагов, которые нам необходимо выполнить для файла CMakeLists.txt
Подключить пакет message_generation. Этот пакет создаст необходимые файлы для разных языков для подключения сообщений.
find_package(catkin REQUIRED COMPONENTS
rospy
std_msgs
message_generation # добавить после всех пакетов
)
Добавить файл с нашим сообщением для обработки.
add_message_files(
FILES
Barometer.msg
)
Дать команду перегенерации сообщений
generate_messages(
DEPENDENCIES
std_msgs
)
Добавить в подключаемые зависимости обработчик message_runtime
catkin_package(
CATKIN_DEPENDS rospy message_runtime # This will NOT be the only thing here
)
Проверить что файл package.xml содержит необходимые зависимости
<build_depend>message_generation</build_depend>
<build_depend>message_runtime</build_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>message_generation</exec_depend>
На этом настройки закончены. Пересоберем пакет, и проверим что тип сообщения правильно создался.
cd ~/catkin_ws
catkin_make --pkg base_ros
После завершения установки пакета, мы можем проверить появилось ли наш тип сообщения в системе.
Для этого выполним команду вывода списка сообщений.
rosmsg list | grep Baro
base_ros/Barometer
Мы нашли наше сообщение, значит установка сообщения выполнена успешно.
Использование сообщений
Если мы хотим подключить этот тип сообщения в python скрипт, то делаем это следующим образом:
import rospy
from base_ros.msg import Barometer
Далее в самом python файле мы можем объявить эту структуру и использовать ее. Например:
bar = new Barometer()
bar.pressure = 10000