Структурной единицей организации кода в ROS являются пакеты (packages), которые могут содержать конфигурационные или исполняемые файлы, библиотеки и прочее. Если ROS - операционная система, то пакеты являются её директориями. Однако, пакеты не могут быть вложены друг в друга, для их объединения используется другая структура, которую разработчики назвали стеком (stack).
Увидеть список доступных пакетов можно с помощью команды
rospack list
Как видно, список большой. Для навигации по пакетам существует ряд команд, таких как:
- rospack find имя_пакета - поиск расположения пакета в системе;
- rosls имя_пакета - список файлов и папок в составе пакета;
- roscd имя_пакета - переход в папку с содержимым пакета.
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.
Комментариев нет:
Отправить комментарий