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
Ссылки
http://www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes