3. Топики: издатель, подписчик и наблюдение за данными
Идея обмена через топики
Издатель отправляет сообщения определённого типа, а подписчик получает их через callback. Издателю не нужно знать число подписчиков. Такой обмен подходит для потоковых данных: положения, изображений, измерений и команд скорости.
Узел turtlesim публикует положение черепахи и принимает команды движения. Название топика и тип сообщения — разные характеристики: одно имя не объясняет структуру передаваемых данных.
Исследуем готовую систему
Запустите в отдельном терминале:
ros2 run turtlesim turtlesim_node
В другом терминале с подключённым окружением выполните:
ros2 node list
ros2 topic list -t
ros2 topic info /turtle1/pose
ros2 interface show turtlesim/msg/Pose
ros2 topic echo /turtle1/pose
Для управления откройте ещё один терминал:
ros2 run turtlesim turtle_teleop_key
Двигайте черепаху и сопоставляйте изменение координат с выводом подписчика.
Создание своего узла
В Python-узле на основе rclpy.node.Node создайте подписку на /turtle1/pose. В callback сохраняйте x и y. Создайте издатель и таймер для периодической отправки выбранных данных. Зарегистрируйте исполняемую функцию в console_scripts пакета, пересоберите workspace и подключите его окружение.
Не заменяйте работу таймера бесконечным циклом внутри callback: такой цикл мешает обработке других событий.
Самостоятельное задание
Выводите координаты черепахи не чаще одного раза в секунду. Проверьте в графе, какие узлы публикуют и принимают данные.
Самопроверка
- Может ли у топика быть несколько подписчиков?
- Почему одинаковое имя при несовместимых типах не обеспечивает обмен?
- Для чего нужен executor и вызов
spin?
Основа урока: учебное пособие «Операционная система для роботов ROS 2», ИТМО, 2026, печатные страницы 11–14, 28–34, 36–39. Это учебный конспект с упражнениями; полные примеры и рисунки приведены в пособии.
YouTube канал чтобы посмотреть видео по робототехнике & семинары
Аккаунт в Телеграмм чтобы следить за анонсами мероприятий & Исследованиями