Граф Имён Ресурсов

@page { size: 21cm 29.7cm; margin: 2cm } p { margin-bottom: 0.25cm; direction: ltr; line-height: 115%; text-align: left; orphans: 2; widows: 2; background: transparent } a:visited { color: #954f72; text-decoration: underline } a:link { color: #0000ff; text-decoration: underline }

Граф Имён Ресурсов – это иерархическая структура, используемая для всех ресурсов в вычислительном графе ROS, таких как Ноды, Параметры, Топики и Сервисы. Эти имена играют центральную роль в больших и сложных ROS-системах, поэтому важно понимать как эти имена работают и как ими управлять.

Перед тем как перейти к дальнейшему объяснению, приведём несколько примеров имён:

  • / (глобальное пространство имён)

  • /foo

  • /stanford/robot/name

  • /wg/node1

Граф Имён Ресурсов является важным инструментом ROS для обеспечения энкапсуляции (встраивания). Каждый ресурс определён в пространстве имён, которое может быть разделено со многими другими ресурсами. В общем случае, ресурсы могут создавать другие ресурсы внутри своего пространства имён, а также могут иметь доступ к ресурсам внутри или вне своего пространства имён. Связи могут быть установлены между ресурсами в определённых пространствах имён, но в обще случае это делается с помощью интегрирующего кода над этими пространствами имён. Такая инкапсуляция позволяет изолировать различные части системы от случайного неправильного захвата имён ресурсов и от глобального «похищения» имён.

Разрешение имён происходит относительно, поэтому ресурсу не нужно беспокоиться о том, в каком пространстве имён он находится. Это упрощает программирование, поскольку ноды, которые работают вместе, могут быть описаны как находящиеся в пространстве имён верхнего уровня. Когда эти ноды интегрируются в большую систему, они могут быть опущены (pushed down) в пространство имён, соответствующее их набору кода. Например, мы можем взять демо-проект Stanford и демо-проект Willow Garage? И объединить их в новый демо-проект с субграфами Stanford и WG. Если в обоих проектах присутствует нода ‘camera’ – они не будут конфликтовать. Инструменты (например, визуализация графа), также как и параметры (например, demo_name), которые должны быть видны всему графу, могут быть созданы в нодах верхнего уровня.

@page { size: 21cm 29.7cm; margin: 2cm } p { margin-bottom: 0.25cm; direction: ltr; line-height: 115%; text-align: left; orphans: 2; widows: 2; background: transparent } a:visited { color: #954f72; text-decoration: underline } a:link { color: #0000ff; text-decoration: underline }

Корректные имена

Корректные имена имеют следующие характеристики:

  • Начинаются с алфавитного символа ([a-z|A-Z]), тильды (~) или прямого слэша (/).

  • Последующие символы могут быть алфавитно-цифровыми ([0-9|a-z|A-Z]), символы подчёркивания (_)или прямого слэша (/)

Исключение: базовые имена (описаны ниже) не могут иметь в своём составе слэши и тильды.

Разрешение имён

Существует четыре типа Графа Имён Ресурсов в ROS: базовый (base), относительный (relative), глобальный (global), и приватный (private). Эти типы имён имеют следующий синтаксис:

  • base - базовый

  • relative/name - относительный

  • /global/name – глобальный

  • ~private/name – приватный

По умолчанию, разрешение имён осуществляется относительно пространства имён ноды. Например, нода /wg/node1 имеет пространство имён /wg, поэтому имя node2 разрешится как /wg/node2. Имена без указания пространства имён – это базовые имена. Базовые имена на самом деле являются подклассом относительных имён, к ним применяются такие же правила разрешения. Базовые имена часто используются для инициализации имени ноды. Имена, которые начинаются с символа «/» являются глобальными. Они считаются полностью разрешёнными (resolved). Глобальных имён следует, насколько возможно, избегать, поскольку они ограничивают взаимозаменяемость кода. Имена, начинающиеся с тильды «~» - приватные. Они конвертируют имя ноды в пространство имён. Например, нода node1 в пространстве имён /wg/ будет иметь приватное пространство имён /wg/node1. Приватные имена используются для передачи параметров конкретной ноде через сервер параметров. Ниже приведено несколько примеров разрешения имён:

@page { size: 21cm 29.7cm; margin: 2cm } p { margin-bottom: 0.25cm; direction: ltr; line-height: 115%; text-align: left; orphans: 2; widows: 2; background: transparent } a:visited { color: #954f72; text-decoration: underline } a:link { color: #0000ff; text-decoration: underline }

Переназначение имён (remapping)

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

Имена ресурсов пакета

Имена ресурсов пакета используются в ROS в концепции уровня файловой системы для упрощения ссылок на файлы и данные на диске. Имена ресурсов пакета просты: они совпадают с названием Пакета, которому принадложит ресурс плюс имя самого ресурса. Например, имя "std_msgs/String" ссылается на тип сооющения "String" в Пакете "std_msgs".

Некоторые из файлов ROS, на которые можно ссылаться с помощью Имён ресурсов пакета ключают: Типы сообщений (Message types), Типы сервисов (Service types), Типы нод (Node types).

Имена ресурсов пакета похожи на пути к файлам, только они значительно короче. Поскольку ROS умеет располагать Пакеты на диске, и анализирует их содержание. Например, описания сообщений всегда хранятся в каталоге msg и имеют расширения .msg, поэтому std_msgs/String - это короткий путь к path/to/std_msgs/msg/String.msg. Аналогично, тип ноды foo/bar эквивалентен поиску файла с названием bar в Пакете foo с разрешением на исполнение.

Корректные имена

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

  • Первый символ является алфавитным ([a-z|A-Z])

  • Последующие символы – алфавитно-цифровые ([0-9|a-z|A-Z]), подчёркивания (_) или прямой слэш (/)

  • По крайней мере один прямой слэш ('/').

Инструменты командной строки, примеры обмена сообщениями ROS

Для работы в ROS в системе должен быть запущен мастер ROS. Мастер запускается командой roscore.

Перечень доступных нод выводится командой rosnode list.

Перечень доступных топиков выводится командой rostopic list.

Отправка тестового сообщения в тестовый топик 2 раза в секунду:

rostopic pub -r 2 /test std_msgs/String "data: 'Good bye'"

Отображать содержимое топика test:

rostopic echo /test

Публиковать/читать сообщения в/из одного и того же топика могут одновременно несколько сеансов.

Полный перечень упражнений для освоения ROS можно найти по ссылке http://wiki.ros.org/ROS/Tutorials .

.

Last updated