Часть 2.1.5 Понятие узлов ROS — TechCave

ОглавлениеПонятие узлов ROSОписание: Это руководство познакомит нас с понятием графа в ROS и с использованием инструментов командной строки roscore, rosnode и rosrun.1

Часть 2.1.5 Понятие узлов ROS

Робототехника

Часть 2.1.5 Понятие узлов ROS

Оглавление

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

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

1. Предустановка

Для этого урока мы будем использовать небольшой симулятор, пожалуйста, установите его с помощью команды:

$ sudo apt-get install ros-<distro>-ros-tutorials

Замените '<distro> 'на имя вашего дистрибутива ROS (например, hydro, groovy, electric, fuerte и т.д.)

2. Краткий обзор концепции графа

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

3. Узлы

Узел это небольшой исполняемый файл находящийся в пакете ROS. Узлы ROS используют клиентскую библиотеку ROS для общения с другими узлами. Узлы могут публиковать или подписываться на тему. Узлы могут также предоставлять или использовать службы (service).

4. Клиентские библиотеки

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

  1. rospy = python client library
  2. roscpp = c++ client library

5. roscore

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

Введите команду:

$ roscore

Вы увидите что-то вроде этого:

Если roscore не удалось инициализировать, то у вас, вероятно, есть проблемы с  конфигурацией сети. См Network Setup — Single Machine Configuration.

Если roscore не удалось инициализировать и появилось сообщение об отсутствии доступа, то вероятно, что папка ~ /.ros принадлежит root и необходимо изменить рекурсивно владельца этой папки:

$ sudo chown -R <your_username> ~/.ros

6. Использование rosnode

Откройте новый терминал, и давайте посмотрим как работает rosnode.

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

$ rosnode list

Вы увидите:

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

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

$ rosnode info /rosout

Это дало нам больше информации о rosout, например, тот факт, что он публикует /rosout_agg.

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

7. Использование rosrun

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

Использование:

$ rosrun [package_name] [node_name]

Так что теперь мы можем запустить turtlesim_node в пакете turtlesim.

В новом терминале введите

$ rosrun turtlesim turtlesim_node

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

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

В новом терминале введите команду:

$ rosnode list

Вы увидите, что-то вроде этого:

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

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

$ rosrun turtlesim turtlesim_node __name:=my_turtle

Теперь еще раз используйте rosnode list:

$ rosnode list

Примечание: Если вы все еще видите /turtlesim в списке, это может означать, что вы остановили узел в терминале с помощью Ctrl-C вместо закрытия окна, или что у вас не установлена переменная среды $ROS_HOSTNAME, как описано в руководстве Network Setup — Single Machine Configuration. Вы можете попробовать очистить список rosnode с помощью: $ rosnode cleanup

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

$ rosnode ping my_turtle

Вывод команды должен выглядеть так:

8. Обзор

Что было рассмотрено:

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

[wiki.ros.org]

Оглавление

16:07
1394

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

Keyleas
Kirby
Имя Фамилия
lunchcalllina1978
Sever
stopresniebots1983
tekino
templide
Seangle