ROS - Урок 5 - Понятие узлов ROS


Содержание

1. Понятие узлов ROS

Описание: Этот урок вводит понятие графа ROS и описывает использование утилит командной строки roscore, rosnode и rosrun.
1.1 Краткий обзор концепции Графа

* Узлы (Nodes): узел — это исполняемый файл, который использует ROS для связи с другими узлами.
* Темы (Topics): узлы могут публиковать сообщения по теме, а также подписаться на тему для приема сообщений.
* Сообщения (Messages): тип данных ROS, используемый при подписке или публикации на тему.
* Мастер (Master): название службы ROS (помогает узлам найти друг друга)
* rosout: ROS эквивалент стандартному выводу stdout/stderr
* roscore: Master + rosout + сервер параметров (parameter server будет представлен позже)

1.2 Узлы

Узел — это ничто иное, как исполняемый файл пакета ROS. Узлы ROS используют клиентские библиотеки ROS для связи с другими узлами. Узлы могут публиковать или подписаться на Тему(Topic). Узлы могут также предоставлять или использовать службы(Service).

1.3 Клиентские библиотеки

Клиентские библиотеки ROS позволяют реализовывать узлы ROS на различных языках программирования:

* Rospy = клиентская библиотека для Python
* Roscpp = клиентской библиотеки для С++

1.4 roscore

roscore — это первое, что вы должны запустить при использовании ROS.

Попробуйте выполнить:
$ roscore

Вы должны увидеть что-то вроде:

... logging to /home/noonv/.ros/log/8475245a-3845-11e0-93cf-0800279d16a6/roslaunch-noonv-2280.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://noonv:40549/

SUMMARY
========

NODES

starting new master (master configured for auto start)
process[master]: started with pid [2295]
ROS_MASTER_URI=http://noonv:11311/

setting /run_id to 8475245a-3845-11e0-93cf-0800279d16a6
process[rosout-1]: started with pid [2308]
started core service [/rosout]


Откройте новый терминал, и используйте rosnode, чтобы увидеть, что делает roscore…

1.5 rosnode

rosnode отображает информацию об узлах ROS, которые работают в настоящий момент. Команда rosnode list выдаёт список этих активных узлов:
$ rosnode list

Вы увидите:
/rosout

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

Команда rosnode info возвращает информацию о конкретном узле.
$ rosnode info /rosout

Это даёт нам некоторую информацию о rosout, например, тот факт, что он публикует /rosout_agg.
--------------------------------------------------------------------------------
Node [/rosout]

Publications:
 * /rosout_agg [roslib/Log]

Subscriptions:
 * /clock [unknown type]
 * /rosout [unknown type]

Services:
 * /rosout/set_logger_level
 * /rosout/get_loggers

contacting node http://noonv:33407/ ...
Pid: 1507

Теперь, давайте посмотрим еще какие-нибудь узлы. Для этого мы воспользуемся командой rosrun для запуска другого узла.

1.6 rosrun

rosrun позволяет использовать имя пакета, чтобы непосредственно запустить узел пакета (не указывая полного пути к пакету).

Использование:
$ rosrun [package_name] [node_name]


Так что, теперь мы можем запустить turtlesim_node в пакете turtlesim, в новом терминале:
$ rosrun turtlesim turtlesim_node

Вы увидите окно turtlesim:


ПРИМЕЧАНИЕ: отображаемая в окне turtlesim черепаха, может выглядеть по-разному. Не беспокойтесь об этом.

В новом терминале:
$ rosnode list


Вы увидите нечто похожее на:
/rosout
/turtlesim


Одна из замечательных особенностей ROS состоит в том, что вы можете переназначить имена (Names) узлов из командной строки.

Вернитесь к терминалу в котором был запущен (rosrun) turtlesim и нажмите Ctrl-C, чтобы остановить узел. Теперь, давайте снова запустим его, но, на этот раз, с использованием преобразования аргументов, чтобы изменить имя узла:
$ rosrun turtlesim turtlesim_node __name:=my_turtle

Теперь, если мы вернёмся к предыдущему терминалу и вызовем rosnode list:
$ rosnode list

То увидим:
/rosout
/my_turtle

Мы видим наш новый узел /my_turtle. Давайте используем другую подкоманду rosnode — ping, чтобы проверить, что узел работает:
$ rosnode ping my_turtle

rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://noonv:55072/     time=1.152992ms
xmlrpc reply from http://noonv:55072/     time=1.120090ms
xmlrpc reply from http://noonv:55072/     time=1.700878ms
xmlrpc reply from http://noonv:55072/     time=1.127958ms


1.7 Обзор

Что было рассмотрено:
* roscore = ros+core: мастер (обеспечивает службы имен для ROS) + rosout (stdout/stderr) + parameter server (parameter server будет представлен позже)
* rosnode = ros+node: утилита ROS для получения информации об узле.
* rosrun = ros+run: запускает узел из заданного пакета.

Далее: Понятие тем ROS

Ссылки:
www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes
  • 0
  • 8 марта 2011, 14:58
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.