Граф Имён Ресурсов
@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. Приватные имена используются для передачи параметров конкретной ноде через сервер параметров. Ниже приведено несколько примеров разрешения имён:
Node
Relative (default)
Global
Private
/node1
bar-> /bar
/bar-> /bar
~bar-> /node1/bar
/wg/node2
bar-> /wg/bar
/bar-> /bar
~bar-> /wg/node2/bar
/wg/node3
foo/bar-> /wg/foo/bar
~foo/bar-> /wg/foo/bar
~foo/bar-> /wg/node3/foo/bar
@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 раза в секунду:
Отображать содержимое топика test:
Публиковать/читать сообщения в/из одного и того же топика могут одновременно несколько сеансов.
.
Last updated
Was this helpful?