вторник, 4 июля 2017 г.

ROS. Пакеты и ноды

Структурной единицей организации кода в ROS являются пакеты (packages), которые могут содержать конфигурационные или исполняемые файлы, библиотеки и прочее. Если ROS - операционная система, то пакеты являются её директориями. Однако, пакеты не могут быть вложены друг в друга, для их объединения используется другая структура, которую разработчики назвали стеком (stack). 

Увидеть список доступных пакетов можно с помощью команды

   rospack list

Как видно, список большой. Для навигации по пакетам существует ряд команд, таких как:
  • rospack find имя_пакета - поиск расположения пакета в системе;
  • rosls имя_пакета - список файлов и папок в составе пакета;
  • roscd имя_пакета - переход в папку с содержимым пакета.
Если выполнить команду rosls, например,

   rosls turtlesim/

в списке файлов обязательно будет присутствовать  package.xml. Это так называемый "манифест", который определяет такие характеристики пакета как название, версия, информация о разработчике, а также зависимости. В каком-то смысле, именно манифест превращает обычную директорию в пакет ROS.

Взаимодействующие в составе ROS программы можно рассматривать как узлы графа, по-английски - nodes. Далее я буду называть их нодами. По сути, это обычные исполняемые файлы, но ориентированные на общение друг с другом через механизмы, предоставляемые ROS-ом (через мастера, запускаемого командой roscore). 

Нода может быть активирована командой 

   rosrun имя_пакета имя_ноды

Поскольку это всего лишь исполняемая программа, можно перейти в папку пакета и "вручную" запустить ноду, однако приведённая выше команда берёт на себя всю навигацию по файловой системе. 

При работе с нодами могут пригодиться следующие команды:
  • rosnode list - список всех запущенных программ;
  • rosnode info имя_ноды - информация об указанной ноде (список топиков для публикации и чтения сообщений, доступные сервисы, идентификатор процесса...);
  • rosnode kill имя_ноды - останавливает указанную программу и удаляет из списка.
Вообще, "убить" ноду можно и клавишами Ctrl+C, однако в этом случае нет гарантии, что процесс удалит из мастера свои регистрационные данные. Если удалённая нода по-прежнему в списке, воспользуйтесь командой

   rosnode cleanup

для удаления всех ссылок, которые более недействительны. 

Все узлы графа (ноды) должны иметь уникальные имена. Если вы создаёте два и более экземпляра какой-то программы, используйте переименование с помощью команды __name:=новое_имя. Следующий пример создаст два экземпляра графических окон с черепахами (каждая команда выполняется в отдельном терминале) и позволит одновременно ими управлять.

   roscore
   rosrun turtlesim turtlesim_node __name:=Leonardo
   rosrun turtlesim turtlesim_node __name:=Donatello
   rosrun turtlesim turtle_teleop_key

P.S. Большинство команд в ROS имеет справку, доступную по ключевому слову help, например

   rosnode help

выведет краткое описание и список доступных ключевых слов.

P.P.S. Для упрощения ввода длинных имён используйте автодополнение с помощью Tab.

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

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