5. Пользовательские сообщения и отдельный пакет интерфейсов
Зачем нужен собственный тип
Стандартные сообщения удобны, когда их смысл соответствует задаче. Если нужно передавать связанную структуру данных, можно определить собственный интерфейс. В пособии рассматривается сообщение с двумерными координатами.
Разделяйте пакет с интерфейсами и пакет с программными узлами: несколько клиентов смогут использовать один контракт обмена, не копируя код регулятора.
Описание сообщения
В отдельном пакете на основе ament_cmake создайте каталог msg и файл Position2D.msg:
float64 x
float64 y
Это описание структуры, а не программа Python. При сборке ROS генерирует языковые представления сообщения. В CMakeLists.txt подключите генерацию интерфейсов через rosidl_generate_interfaces, а в package.xml укажите зависимости генерации и выполнения и принадлежность к группе пакетов интерфейсов. Полный пример конфигурации приведён в разделе 3.3 пособия.
Проверка после сборки
Для пакета с условным именем study_interfaces:
cd ~/ros2_ws
colcon build --symlink-install
source install/setup.bash
ros2 interface show study_interfaces/msg/Position2D
Если тип не найден, сначала проверьте результат сборки и подключённое окружение. Наличие .msg в исходниках само по себе не делает интерфейс доступным.
Самостоятельное задание
Создайте узел, принимающий /turtle1/pose и публикующий только координаты в собственном типе. Сравните значения входного и выходного топиков. Добавьте зависимость программного пакета от пакета интерфейсов.
Самопроверка
- Где задаются поля сообщения, а где выполняется его публикация?
- Почему после изменения
.msgтребуется пересборка? - Как другой пакет узнаёт о зависимости от вашего интерфейса?
Основа урока: учебное пособие «Операционная система для роботов ROS 2», ИТМО, 2026, печатные страницы 39–44. Это учебный конспект с упражнениями; полные примеры и рисунки приведены в пособии.
YouTube канал чтобы посмотреть видео по робототехнике & семинары
Аккаунт в Телеграмм чтобы следить за анонсами мероприятий & Исследованиями