Список вводных упражнений для знакомства с ROS содержится здесь.
пойдём по-порядку 🙂
Навигация по файловой системе ROS
1. Навигация пой файловой системе ROS
Описание: Этот урок описывает структуру файловой системы ROS, знакомит с командами roscd, rosls и rospack.
2. Обзор основной концепции файловой системы ROS
Определения:
Пакеты (Packages): Пакеты лежат на самом нижнем уровне организации программного обеспечения ROS. Они могут содержать все что угодно: библиотеки, инструменты, исполняемые файлы и т.д.
Манифест (Manifest): Манифест — это файл с описанием пакета. Основная задача манифеста — это определение зависимостей между пакетами.
Стеки (Stacks): Стеки — это коллекции пакетов, которые образуют следующий уровень библиотек.
Манифест Стека (Stack Manifest): Это такой же Манифест (файл с описанием), но на этот раз для всего стека.
Когда вы смотрите на файловую систему, то легко сможете определить — это пакет или стек:
В директории пакета обязательно находится файл manifest.xml.
А в директории стека обязательно есть файл stack.xml.
3. Утилиты файловой системы
Для ROS уже существует большое количество программного кода, распространяемого во множестве пакетов и стеков. Навигация по файловой системе осуществляется при помощи стандартных утилит командной строки, таких как ls и cd, но это было бы очень утомительным, поэтому ROS предоставляет свои утилиты, чтобы облегчить навигацию по своей фаловой структуре.
3.1 rospack и rosstack
rospack и rosstack являются частью пакета rospack.
Они позволяют получить информацию о пакетах и стеках. В данном руководстве, мы пока рассмотрим опцию find, которая возвращает путь к заданному пакету или стеку.
использование:
$ rospack find [package_name] $ rosstack find [stack_name]
пример:
$ rospack find roscpp
вернёт:
YOUR_INSTALL_PATH/ros/core/roscpp
в моём случае:
/opt/ros/cturtle/ros/core/roscpp
3.2 roscd
roscd является частью пакета rosbash.
Эта команда позволяет перемещаться по каталогам (cd) пакетов или стеков.
Использование:
$ roscd [locationname[/subdir]]
пример:
$ roscd roscpp
Чтобы убедиться, что мы переместились в каталог пакета roscpp, можно распечатать текущий каталог с помощью стандартной команды pwd:
$ pwd
вернёт:
YOUR_INSTALL_PATH/ros/core/roscpp
в моём случае:
/opt/ros/cturtle/ros/core/roscpp
3.2.1 Подкаталоги
roscd также позволяет переходить в подкаталоги пакета или стека.
$ roscd roscpp/include $ pwd
вернёт:
YOUR_INSTALL_PATH/ros/core/roscpp/include
у меня:
/opt/ros/cturtle/ros/core/roscpp/include
3.3 Особые случаи roscd
Есть несколько специальных мест, куда можно перейти с помощью roscd, которые не являются пакетом или стеком.
roscd без аргументов перебросит нас на $ROS_ROOT.
Попробуйте:
$ roscd $ pwd
получим:
/opt/ros/cturtle/ros
3.3.2 roscd log
команда roscd log переместит на в директорию, в которой ROS сохраняет свои log-файлы.
Попробуйте:
$ roscd log
в моём случае, меня перебросило в
/home/noonv/.ros/log
3.4 rosls
rosls — это часть пакета rosbash. Эта команда позволяет нам промотреть (ls) содержимое директории в пакете или стеке по его имени, а не по пути к нему.
Использование:
$ rosls [locationname[/subdir]]
Пример:
$ rosls roscpp_tutorials
вернёт
add_two_ints_client listener_unreliable add_two_ints_server listener_with_tracked_object add_two_ints_server_class listener_with_userdata anonymous_listener Makefile babbler manifest.xml CMakeLists.txt node_handle_namespaces custom_callback_processing notify_connect listener srv listener_async_spin talker listener_multiple time_api listener_single_message timers listener_threaded_spin
3.5 Tab-завершение
Может быть довольно утомительным вбивать полное имя пакета. Например, в предыдущем примере, название roscpp_tutorials — довольно длинное 🙂 К счастью, некоторые утилиты ROS поддерживают TAB-завершение.
Начните набирать:
$ roscd roscpp_<<< а теперь нажмите клавишу TAB >>>
После нажатия клавиши TAB имя должно дополниться:
$ roscd roscpp_tutorials/
Это работает, потому что roscpp_tutorials — единственный пакет ROS, который начинается с roscpp_.
Теперь попробуйте ввести:
$ roscd tur<<< а теперь нажмите клавишу TAB >>>
После нажатия клавиши табуляции, в командной строке произойдёт дополнение:
$ roscd turtle
Однако, в этом случае есть несколько пакетов, которые начинаются с turtle.
Попробуйте нажать TAB ещё раз. Это должно показать все ROS пакеты, которые начинаются с turtle
turtle_actionlib/ turtlesim/ turtle_teleop/ turtle_tf/
В командной строке, у вас пока всё равно содержится только
$ roscd turtle
Теперь дополните команду буквой s после turtle и затем нажмите клавишу TAB
$ roscd turtles<<< а теперь нажмите клавишу TAB >>>
Поскольку существует только один пакет, которые начинаются с turtles, вы должны увидеть:
$ roscd turtlesim/
4. Обзор
Вы могли уже обратить внимание на подход к названию утилит ROS:
rospack = ros + pack(age)
rosstack = ros + stack
roscd = ros + cd
rosls = ros + ls
Этот шаблон именования справедлив для многих инструментов ROS.
Далее: 2 — Создание пакета для ROS
Ссылки
http://www.ros.org/wiki/ROS/Tutorials/NavigatingTheFilesystem
Руководства
все руководства ROS