понедельник, 24 июля 2017 г.

ROS. Файлы запуска

Концепция 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 - добавляет префикс при запуске ноды, в частности, в данном случае будет выполнена команда, которая создаст отдельный терминал:
          xterm -e rosrun turtlesim turtle_teleop_key
  • output="screen" - вывод сообщений на экран (при запуске через roslaunch сообщения по-умолчанию записываются в лог-файл);
  • ns="имя" - параметр, позволяющий решить проблему конфликтов наименований за счёт использования пространста имён.
Загрузка может быть выполнена с помощью команды:

   roslaunch имя_пакета имя_файла

т.е. в нашем случае

   roslaunch ros_test turtle.launch

Кстати, если roscore не был запущен, ROS сам о нём позаботится. Следует иметь ввиду, что порядок загрузки может быть произвольным, по-этому желательно писать ноды так, чтобы их работа не зависела от времени включения.

На этом возможности roslaunch не заканчиваются. В файл загрузки можно включать другие launch-файлы (через <include></include>), можно объединть элементы и управлять их пространством имён и запуском (с помощью <group></group>). Наконец, есть возможность определить список аргументов командной строки и управлять параметрами во время запуска, вместо того, чтобы писать десяток копий для разных вариантов работы...

Комментариев нет:

Отправить комментарий