Утилит roslaunch и launch файлы
Что вы узнаете в этом разделе:
- Зачем нужны launch-файлы в ROS2
- Как создать простой launch-файл в формате XML
- Как запускать ноды через launch-файлы
- Как настроить пакет для использования launch-файлов
- Как запускать программы стандартным способом через
ros2 launch - Основные элементы launch-файлов
Для чего нужны launch-файлы в ROS2?
У любого серьезного робота одновременно работает огромное количество программ, которые необходимо гибко настраивать.
Для эффективного управления запуском и работой всего этого «зоопарка» в ROS используется система launch файлов (файлы запуска). Эти файлы позволяют не только запускать нужные ноды, но и настраивать их взаимодействие, задавать параметры и управлять зависимостями между ними. Это упрощает администрирование и настройку систем, делая ее более понятной и гибкой.
Аналогия из жизни: Launch-файл можно сравнить с рецептом приготовления сложного блюда или сценарием для театральной постановки. В рецепте указано, какие ингредиенты (программы) нужны, в каком порядке их добавлять (зависимости), и с какими настройками (параметрами) готовить. Вместо того чтобы каждый раз вручную запускать десятки программ и настраивать их, вы просто "следуете рецепту" — запускаете один launch-файл, и все необходимое запускается автоматически в правильном порядке. Это как кнопка "Включить все" на пульте управления умным домом: одно нажатие — и загорается свет, включается музыка, закрываются шторы.
Файлы запуска можно написать на XML, YAML или Python.
Хорошая практика для любого пакета, помимо самих программ, — добавлять полностью настроенные файлы запуска (с установкой всех параметров), для того чтобы другие разработчики могли подключать их в свои системы.
Например, для робота TurtleBro созданы все необходимые файлы, которые автоматический запускают все необходимые пакеты.
Создание файла запуска
Перед началом работы, убедитесь выполнены все части задания из Главы7. Создан пакет ros_base_course и созданные "точки входа" программ
temp_topic_publisherиtemp_topic_subscriber
Для начала работы с файлами запуска мы будем использовать формат XML, как наиболее простой и «визуальный». Для сложных «случаев» запуска необходимо использовать формат python.
Предположим что мы хотим автоматизировать запуск нашей программы публикующей данные о температуре процессора.
Для этого в ранее созданном нами пакете ros_base_course необходимо создать папку /launch, а в ней файл temp_topic_publisher.launch.xml
<launch>
<node pkg="ros_base_course" exec="temp_topic_publisher" name="temp_publisher" output="log" respawn="false"/>
</launch>
Мы указали, что при запуске этого файла необходимо запустить ноду exec="temp_topic_publisher" с названием name="temp_publisher" из пакета pkg="ros_base_course"
Запустить только что созданный файл (и проверить его) мы можем утилитой ros2 launch, указав путь и имя файла.
cd ~/user_ws/src/ros_base_course/launch/
ros2 launch ./temp_topic_publisher.launch.xml
===
ros2 launch ./temp_topic_publisher.launch.xml
[INFO] [launch]: All log files can be found below /home/pi/.ros/log/2025-09-23-16-47-16-052933-turtlebro01-1561
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [publisher-1]: process started with pid [1564]
[publisher-1] [INFO] [1758635237.335591481] [temp_publisher]: Publishing CPU temp: 46.9
[publisher-1] [INFO] [1758635237.813923849] [temp_publisher]: Publishing CPU temp: 46.9
[publisher-1] [INFO] [1758635238.313854530] [temp_publisher]: Publishing CPU temp: 46.9
[publisher-1] [INFO] [1758635238.813841415] [temp_publisher]: Publishing CPU temp: 46.9
Мы видим, что при запуске .launch файла запустилась нода публикации данных температуры.
Конфигурация пакета
Стандартный способ запуска .launch файла из любого пакета — это выполнение команды ros2 launch _имя-пакета_ _имя-файла_. Поиск необходимой директории с пакетом и файлом осуществляет ROS.
Для того чтобы такой способ работал и для нашего пакета, необходимо в конфигурацию пакета добавить директиву, которая "откроет" директорию с .launch файлами для поиска и загрузки.
Если мы создавали пакет с директивой ament_python то нам необходимо изменить файл setup.py, добавив в него раздел data_files, который сделает файлы доступными для использования.
import os
from glob import glob
# Other imports ...
package_name = 'ros_base_course'
setup(
# Other parameters ...
data_files=[
# ... Other data files
# Include all launch files.
(os.path.join('share', package_name, 'launch'), glob('launch/*'))
]
)
Директива
(os.path.join('share', package_name, 'launch'), glob('launch/*'))добавит в доступ все файлы из директории launch
Пересобираем пакет
cd user_ws
colcon build --symlink-install
Запустим .launch файл стандартным способом
ros2 launch ros_base_course temp_topic_publisher.launch.xml
===
[INFO] [launch]: All log files can be found below /home/pi/.ros/log/2025-09-23-17-17-46-822958-turtlebro01-2477
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [publisher-1]: process started with pid [2480]
[publisher-1] [INFO] [1758637068.097792153] [temp_publisher]: Publishing CPU temp: 46.3
[publisher-1] [INFO] [1758637068.576227671] [temp_publisher]: Publishing CPU temp: 47.4
[publisher-1] [INFO] [1758637069.076075606] [temp_publisher]: Publishing CPU temp: 45.8
Файл запуска создан и установлен в систему ROS. Более подробно и создании файлов, можно посмотреть в официальной инструкции https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Creating-Launch-Files.html