ОглавлениеПонятие узлов ROSОписание: Это руководство познакомит нас с понятием графа в ROS и с использованием инструментов командной строки roscore, rosnode и rosrun.1
Описание: Это руководство познакомит нас с понятием графа в ROS и с использованием инструментов командной строки roscore, rosnode и rosrun.
Для этого урока мы будем использовать небольшой симулятор, пожалуйста, установите его с помощью команды:
$ sudo apt-get install ros-<distro>-ros-tutorials
Замените '<distro> 'на имя вашего дистрибутива ROS (например, hydro, groovy, electric, fuerte и т.д.)
Узел это небольшой исполняемый файл находящийся в пакете ROS. Узлы ROS используют клиентскую библиотеку ROS для общения с другими узлами. Узлы могут публиковать или подписываться на тему. Узлы могут также предоставлять или использовать службы (service).
Клиентские библиотеки ROS позволяют узлам, написанным на разных языках программирования, общаться:
Команда roscore это первое, что вы должны выполнить, когда используете ROS.
Введите команду:
$ roscore
Вы увидите что-то вроде этого:

Если roscore не удалось инициализировать, то у вас, вероятно, есть проблемы с конфигурацией сети. См Network Setup — Single Machine Configuration.
Если roscore не удалось инициализировать и появилось сообщение об отсутствии доступа, то вероятно, что папка ~ /.ros принадлежит root и необходимо изменить рекурсивно владельца этой папки:
$ sudo chown -R <your_username> ~/.ros
Откройте новый терминал, и давайте посмотрим как работает rosnode.
rosnode отображает информацию о узлах ROS, которые работают в данный момент. Команда rosnode list перечисляет активные узлы:
$ rosnode list
Вы увидите:

Эта команда показала, что есть только один узел, который работает: rosout. Этот узел всегда работает, так как он собирает и логирует отладочные сообщения узлов.
Команда rosnode info возвращает информацию о конкретном узле.
$ rosnode info /rosout
Это дало нам больше информации о rosout, например, тот факт, что он публикует /rosout_agg.

Теперь, давайте посмотрим еще несколько узлов. Для этого мы будем использовать 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
Вывод команды должен выглядеть так:

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