Концепция ROS как системы взаимодействующих независимых программ продразумевает необходимость запуска каждой из них по-отдельности. Если узлов много, а перезапускать их приходится часто, со временем это может надоесть... К счастью, разработчики предусмотрели механизм гибкого управления запуском коллекций нодов с помощью загрузочных launch-файлов. По сути, это XML-файлы с расширением launch, в которых прописаны необходимые программы и параметры.
В общем случае, загрузочный файл может называться как угодно и располагаться в любом месте, однако принято хранить их в соответствющей папке пакета, с которым данный файл работает. В качестве примера создадим файл, который вызывает черепаху, открывает окно управления ею, а также выводит данные из созданного ранее узла get_position.py. Для этого перейдём в пакет ros_test, создадим директорию launch и файл turtle.launch.
roscd ros_test
mkdir launch
nano launch/turtle.launch
Если roscd не нашёл директорию ros_test, вероятно, нужно добавить окружение с данным пакетом в список ресурсов. Файл turtle.launch должен содержать следующий текст.
Файл устроен следующим образом. Список нодов заключён между корневыми элементами <launch></launch>. Каждый из нодов содержит список параметров, часть которых являются обязательными (pkg, type, name), а часть - дополнительными:
- pkg - имя пакета;
- type - имя исполняемого файла;
- name - имя, с которым нода будет запущена;
- respawn="true" - если программа по каким-то причинам завершит работу, ROS её перезапустит;
- required="true" - если программа завершит работу, остальные ноды тоже будут остановлены;
- launch-prefix - добавляет префикс при запуске ноды, в частности, в данном случае будет выполнена команда, которая создаст отдельный терминал:
- output="screen" - вывод сообщений на экран (при запуске через roslaunch сообщения по-умолчанию записываются в лог-файл);
- ns="имя" - параметр, позволяющий решить проблему конфликтов наименований за счёт использования пространста имён.
roslaunch имя_пакета имя_файла
т.е. в нашем случае
roslaunch ros_test turtle.launch
Кстати, если roscore не был запущен, ROS сам о нём позаботится. Следует иметь ввиду, что порядок загрузки может быть произвольным, по-этому желательно писать ноды так, чтобы их работа не зависела от времени включения.
На этом возможности roslaunch не заканчиваются. В файл загрузки можно включать другие launch-файлы (через <include></include>), можно объединть элементы и управлять их пространством имён и запуском (с помощью <group></group>). Наконец, есть возможность определить список аргументов командной строки и управлять параметрами во время запуска, вместо того, чтобы писать десяток копий для разных вариантов работы...
Комментариев нет:
Отправить комментарий