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

Ссылки
http://www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение