Закрыть
Файловая система ROS

Файловая система ROS

Первым уровнем в архитектуре ROS является уровень файловой системы.

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

Как и в случае обычной операционной системы, программы в ROS разделены на папки, в которых содержатся некоторые файлы, описывающие их функциональность:

  • Пакеты (Packages): формируют атомарный уровень ROS. Пакет имеет минимальную структуру и содержимое, чтобы создать программу в ROS. Он может иметь выполняемые процессы (узлы или node), файлы конфигурации и так далее.
  • Декларации (Manifests):  содержится информация о пакетах, лицензионная информация, зависимости, флаги компиляции и прочее. Управление декларациями осуществляется через файл manifests.xml.
  • Стеки (Stacks): когда вы собираете вместе несколько пакетов для получения некоторой функциональности, то получите стек. В ROS, существует много таких стеков для различных целей, например, стек навигации.
  • Декларации стеков (Stack manifests): предоставляют данные о стеке, включая его лицензионную информацию и его зависимости от других стеков. Файл stack.xml.
  • Типы сообщений (Message types, msg): сообщение является информацией, которую процесс отправляет другим процессам. В ROS имеется множество стандартных типов сообщений. Описание сообщения сохраняется в my_package/msg/MyMessageType.msg.
  • Типы сервисов (Service typessrc): описания сервисов хранятся в my_package/srv/MyServiceType.srv. Определяют в ROS структуры данных запросов и ответов для сервисов.

Файловая система ROS
Файловая система ROS

 

Пакеты

Обычно, когда мы говорим о пакетах, то имеем ввиду типичную структуру папок и файлов. Эта структура выглядит следующим образом:

  • bin/  Это папка, где сохраняются наши скомпилированные и слинкованные программы после их компиляции/построения
  • include/package_name Эта директория включает заголовки библиотек, которые понадобятся. Не забудьте экспортировать декларацию, так как она используется другими пакетами
  • msg/ Если вы разработали не стандартное сообщение, то помещайте его сюда
  • scripts/ Здесь находятся исполняемые скрипты. Это могут быть скрипты оболочки Bash, Python'а или какие-либо еще
  • src/ Здесь располагаются исходные файлы вашей программы. Вы можете создать папку для узлов и разрешений для узлов, либо организовать так как вы хотите
  • srv/ Здесь представлены типы сервисов
  • CMakeLists.txt Это файл построения CMake
  • manifest.xml Это файл декларации пакета

Для создания, редактирования или другой работы с пакетами, в ROS имеется несколько вспомогательных инструментов:

  • rospack Эта команда используется для получения информации или поиска пакетов в системе
  • roscreate-pkg Если вы хотите создать новый пакет, то воспользуйтесь этой командой
  • rosmake Эта команда используется для компиляции пакета
  • rosdep Эта команда устанавливает системные зависимости для пакета
  • rxdeps Эта команда используется, если вы хотите посмотреть зависимости пакета в виде графа

Для перемещения между пакетами и их папками, в ROS имеется очень полезный инструмент, называемый rosbash, в котором имеется несколько команд, очень сильно похожих на команды Linux. Вот несколько примеров:

  • roscd Эта команда помогает сменить директорию — аналог команды cd в Linux
  • rosed Команда используется для редактирования файла
  • roscp Команда используется для копирования файла из некоторого пакета
  • rosd Эта команда выдает список директорий пакета
  • rosls Список файлов пакета — аналог команды ls в Linux

Файл manifest.xml обязательно должен присутствовать в пакете и из него используется специфическая информация о пакете. Если вы найдете этот файл в папке, то возможно, эта папка является пакетом.

Если открыть файл manifest.xml, то вы увидите информацию о названии пакета, зависимостях и так далее. Все это упращает установку и распространение этого пакета.

Два типичных тега, которые используются в файле декларации — это <depend> и <export>.  Тег <depend> показывает, какие пакеты должны быть установлены до того, как будет установлен  выбранный пакет. Это сделано из-за того, что новый пакет пользуется некоторой функциональностью других пакетов. Тег <export> говорит системе, какие флаги должны быть использованы для компиляции пакета, какие заголовки должны быть включены и так далее.

Ниже приведен пример этого файла.

<package>
<description brief="short description">
long description,
</description>
<author>Ivanov Ivan Ivanovich</author>
<license>BSD</license>
<url>http://example.com/</url>
<depend package="roscpp"/>
<depend package="common"/>
<depend package="otherPackage"/>
<versioncontrol type="svn" url="https://urlofpackage/trunk"/>
<export>
<cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/>
</package>

 

Стеки

Пакеты в ROS организуются в стеки. В то время, как целью пакетов является создание минимального набора кода, для облегчения его повторного использования, целью стеков является упрощение процесса совместного использования кода.

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

Для стека необходимы следующие три файла: CMakeList.txt, Makefile и stack.xml. Если в папке вам попадется файл stack.xml, вы можете быть уверены, что это стек.

Ниже приведен пример этого файла.

<stack>
<description brief="Sample_Stack">Sample_Stack1</description>
<author>Ivanov Ivan Ivanovich</author>
<license>BSD,LGPL,proprietary</license>
<review status="unreviewed" notes=""/>
<url>http://someurl.blablabla</url>
<depend stack="common_msgs" /> <!-- nav_msgs, sensor_msgs, geometry_msgs -->
<depend stack="ros_tutorials" /> <!-- turtlesim -->
</stack>

 

Сообщения

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

ROS имеет множество предопределенных сообщений, но если вы разрабатываете новое сообщение, оно будет в папке msg/ вашего пакета. Внутри этой папки, некоторые файлы с расширением .msg определяют сообщения.

Сообщение должно иметь две основные части: поля и константы. Поля определяют тип данных, передаваемых в сообщении. например, int32float32 и string, или же новые типы, которые вы могли создать до этого, такие как type1 и type2. Константы определяют имена полей.

Пример файла msg:

int32 id
float32 vel
string name

В ROS имеется мнжество стандартных типов для использования в сообщениях.

Простой тип данныхОписаниеC++Python
boolUnsigned 8-bit intuint8_tbool
int8Signed 8-bit intint8_tint
uint8Unsigned 8-bit intuint8_tint
int16Signed 16-bit intint16_tint
uint16Unsigned 16-bit intuint16_tint
int32Signed 32-bit intint32_tint
uint32Unsigned 32-bit intuint32_tint
int64Signed 64-bit intint64_tlong
uint64Unsigned 64-bit intuint64_tlong
float3232-bit IEEE floatfloatfloat
float6464-bit IEEE floatdoublefloat
stringASCII string (4bit)std::stringstring
timeSecs/nsecs signed 32-bit intros::Timerospy.Time
durationSecs/nsecs signed 32-bit intros::Durationrospy.Duration

Специальным типом в ROS является Header. Он используется для добавления временных меток, кадров и так далее. Этот тип позволяет сообщениям быть пронумерованными, таким образом, мы можем знать, кто отправил сообщение. Могут быть добавлены другие функции, прозрачные для пользователя, но управляемые ROS.

Тип Header содержит следующие поля:

uint32 seq
time stamp
string frame_id

Благодаря Header можно записать метки и кадр (снимок) того, что происходит с роботом.

В ROS есть некоторые инструменты для работы с сообщениями. Инструмент rosmsg выводит определяющую сообщение информацию и может найти файл источника, использующего этот тип сообщения.
 

Сервисы

ROS использует упрощенный язык описания сервисов для характеристики типов сервисов. Он создается непосредственно из формата msg для обеспечения связи запрос/ответ между узлами. Описания сервиса хранятся в .srv файлов в поддиректории srv/ пакета.

Для вызова сервиса необходимо использовать имя пакета вместе с именем сервиса. Например, для файла sample_package1/srv/sample1.srv необходимо отнести его к sample_package1/sample1.

Есть несколько инструментов, выполняющих некоторые функции с сервисами. Инструмент rossrv выводит описание сервиса, пакет содержащий .srv файлы и может найти файлы источников, которые используют этот тип сервиса.

Если вы хотите создать сервис, ROS может помочь вам генератором сервисов. Эти инструменты генерируют код для начального определения сервиса. Вам только нужно добавить строку gensrv () в ваш файл CMakeLists.txt.

[add_ratings]

 

6 thoughts on “Файловая система ROS

  1. Здравствуйте, подскажите, пожалуйста, какой алгоритм поиска пути используется в ROS?

      1. ROS - это фреймворк и, в зависимости от того, каким пакетом библиотек мы воспользуемся, нам будут доступны различные алгоритмы. Как правило, для планирования маршрута робота используют MoveIt! Здесь имеются функции для реализации плнирования маршрута, работы с манипуляторами, сканирования пространства, кинематики, управления и навигации.

        Алгоритмы, используемые для планирования в различных библиотеках:

          OMPL (Open Motion Planning Library)

          — Основанное на примерах (sampling-based) планирование

          — Вероятностное планирование (PRM), основанные на деревьях поиска решений (tree-based) — RRT, EST, SBL, KPIECE

          — Обмен данными и конфигурирование с использованием MoveIt!

            CHOMP (Covariant Hamiltonian Optimization and Motion Planning) — основанные на оптимизации планировщики

              SBPL (Search-based planning) — основанное на поиске планирование

              1. Спасибо. А возможно ли подключить алгоритмы поиска пути, такие как А*, Дейкстра, поиск в глубину, поиск в ширину?

        Оставить ответ

        Ваш email не будет опубликован.Обязательны поля помечены *