ROS 2

Компоненты, сообщения и интерфейсы
Лекция 1 · Введение в робототехнику

Связь двух программ

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

Программа управлениявыбирает движениекоманда скоростиСимуляторрассчитывает движениемодели
Разработчик
Смысл команды и действие получателя
Средства ROS
Отправка и приём данных

ROS — Robot Operating System, «операционная система робота».

Что предоставляет ROS

Клиентская библиотека
rclpy для Python · Создать участника обмена в своей программе
Готовые компоненты
Nav2 · Планирование пути и управление движением мобильного робота
Инструменты
ros2 · Исследовать участников, интерфейсы и данные
Связь с симулятором
ros_gz_bridge · Преобразовывать команды скорости между ROS и Gazebo

Библиотека используется кодом; пакет объединяет готовые материалы; симулятор рассчитывает модель.

Управление и Turtlesim

Turtlesim — учебный симулятор движения черепахи на плоскости.

Статическая учебная схема

КлавиатураПрограмма управлениянажатие клавишив команду скоростикомандаСимуляторturtle1движение
Управление
Преобразует клавишу в команду скорости
Симулятор
Изменяет положение и ориентацию модели

turtle1 — объект внутри симуляции.

Узел и его создание

Узел, или node, — именованный программный компонент, участвующий в обмене ROS через собственные интерфейсы.

/teleop_turtle — управление/turtlesim — симулятор

Наш учебный наблюдатель: фрагмент, не полная программа

import rclpy
from rclpy.node import Node

rclpy.init()
node = Node("pose_observer")
import
Подключить библиотеку и тип Node
rclpy.init()
Подготовить использование ROS
Node(...)
Создать узел с выбранным именем

Узел, процесс, черепаха

Обычное раздельное размещение

Процесс управленияУзел /teleop_turtleформирует командыПроцесс симулятораУзел /turtlesimturtle1объект модели
Процесс
Работающий экземпляр программы с ресурсами ОС
Узел
Именованный компонент обмена ROS
turtle1
Объект, состояние которого хранит симулятор

Несколько ROS-узлов также могут находиться в одном процессе.

Топик команды

Топик — именованный канал обмена сообщениями определённого типа.

/teleop_turtleузелPublisherиздатель сообщений/turtle1/cmd_velкоманда скорости/turtlesimузелSubscriptionподписка

Publisher публикует сообщения; subscription получает их для обработки.

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

Устройство Twist

Тип сообщения задаёт структуру и типы полей.

Топик /turtle1/cmd_vel использует geometry_msgs/msg/Twist.

Twist.msg

Vector3 linear
Vector3 angular
linear
Линейная скорость
angular
Угловая скорость

Каждый Vector3

float64 x
float64 y
float64 z

Три компоненты типа float64

linear.x — поле x внутри linear, а не имя отдельного топика.

Оси движения

Оси движения связаны с черепахой

x: вперёдy: влево относительно черепахи⊙ z: к зрителю, из плоскостиположительный поворотпротив часовой стрелкиОси поворачиваются вместе с черепахой.linear.xдвижение вдоль xangular.zповорот вокруг z

Значения команды

Учебный экземпляр команды движения вперёд:

linear:  {x: 2.0, y: 0.0, z: 0.0}
angular: {x: 0.0, y: 0.0, z: 0.0}
linear.x = 2.0
Вперёд, 2 единицы расстояния модели в секунду
angular.z = 0.0
Без поворота, угловая скорость в rad/s
Экземпляр Twist/turtle1/cmd_velСимуляторприменяет команду

Имя, тип, экземпляр

Имя топика
/turtle1/cmd_vel · Где передаётся команда?
Тип
geometry_msgs/msg/Twist · Из каких полей состоит сообщение?
Экземпляр
linear.x: 2.0, остальные компоненты 0 · Какие значения отправлены?

Прочитать определение типа

ros2 interface show geometry_msgs/msg/Twist

Это команда просмотра структуры, не отправление скорости.

Сообщение о состоянии

/turtlesimузелPublisherиздатель сообщений/turtle1/poseсостояние/pose_observerузелSubscriptionподписка

/pose_observer — наш добавленный учебный подписчик

turtlesim/msg/Pose

float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity
x, y
Координаты на плоскости модели
theta
Ориентация в rad
linear_velocity
Линейная скорость, единицы модели/s
angular_velocity
Угловая скорость, rad/s

Прочитать конкретную позу

Учебный экземпляр turtlesim/msg/Pose:

x: 2.0
y: 3.0
theta: 0.0
linear_velocity: 0.0
angular_velocity: 0.0
XY23turtle1theta = 0Оси плоскости симулятора

Положение, ориентация и скорость — разные составляющие состояния.

Команда и наблюдение

/teleop_turtle/turtle1/cmd_vel : Twist/turtlesimпринимает команду; публикует Pose/turtle1/pose : Pose/pose_observer/trajectory_viewerКоманда: какое движение задатьСостояние: что сообщает модельВ одном топике также может бытьнесколько издателей.

Оба получателя Pose — добавленные учебные компоненты.

Сервис: запрос и ответ

Сервис — интерфейс операции с запросом и связанным с ним ответом.

КлиентинициируетоперациюУзел /turtlesimСервер /spawnобрабатывает запросзапрос: создать черепахуответ: имя объекта

Имя: /spawn · Тип: turtlesim/srv/Spawn

Поля Spawn

turtlesim/srv/Spawn, определение Spawn.srv:

float32 x
float32 y
float32 theta
string name
---
string name
Запрос, до ---
Начальное положение, ориентация, желаемое имя
Ответ, после ---
Имя созданной черепахи

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

После успешного Spawn

Учебный запрос, имя turtle2 свободно:

x: 7.0
y: 7.0
theta: 1.5
name: turtle2

Ответ при успешном создании

name: turtle2
Узел /turtlesimturtle1/turtle1/cmd_vel/turtle1/poseturtle2/turtle2/cmd_vel/turtle2/pose

Два объекта модели, прежний узел симулятора.

Имена выбирают связь

/turtlesim
Узел симулятора
/turtle1/cmd_vel
Команда первой черепахе
/turtle2/cmd_vel
Команда второй черепахе
/turtle2/pose
Состояние второй черепахи

Оба cmd_vel: geometry_msgs/msg/Twist.

Другой объект

Выбрать другой канал команды

Другие числа

Изменить значения сообщения

Action: выполнить цель

Action — интерфейс выполнения цели во времени: принятие цели, возможность сообщать о ходе работы, итог и запрос отмены.

Скорость через топик

«Поворачивайся с такой скоростью»

Twist.angular.z

Угловая скорость, rad/s

Цель через action

«Достигни такой ориентации»

RotateAbsolute.Goal.theta

Целевой угол, rad

Имя: /turtle1/rotate_absolute

Тип: turtlesim/action/RotateAbsolute

Обмен при выполнении цели

Все сообщения относятся к /turtle1/rotate_absolute

/teleop_turtleaction-клиент/turtlesimaction-серверЦель: thetaПринята / отклоненаFeedback: remaining — во время выполненияЗапрос отмены — при необходимостиИтог: статус + result

Feedback — возможность интерфейса, а не обязательное условие успеха.

Три части RotateAbsolute

Определение RotateAbsolute.action

float32 theta
---
float32 delta
---
float32 remaining
Goal · theta
Целевая ориентация
Result · delta
Нормализованная разность: начальный угол − текущий
Feedback · remaining
Нормализованная разность: целевой угол − текущий

Все значения — rad. В файле: goal → result → feedback.

Цель и оставшийся поворот

Учебная ситуация: текущая ориентация 0.5 rad, цель 1.5 rad.

Goal

theta: 1.5

Feedback

remaining: 1.0

remaining — угловая разность, не оставшееся время.

X плоскости0.5 rad1.5 radцельтекущееОставшийся поворот: +1.0 rad

Отмена и итог

Клиентзапрос отмены целиСервер

Запрос отмены и завершение цели — разные события.

SUCCEEDED
Цель завершена успешно
CANCELED
Выполнение завершено по отмене
ABORTED
Сервер прекратил выполнение без успеха

В Turtlesim обработка принятой отмены обнуляет скорости.

Result.delta читается вместе с итоговым статусом.

Параметр принадлежит узлу

Параметр — именованное типизированное значение конфигурации узла.

Узел /turtlesimbackground_rТип: integerЗначение по умолчанию: 69
ros2 param get /turtlesim background_r

Для обращения нужны узел и имя параметра.

Цвет фона: три параметра

Параметры узла /turtlesim · учебное изменение

RGB (69, 86, 255)RGB (120, 86, 255)
Имя Составляющая По умолчанию После изменения
background_r Красная 69 120
background_g Зелёная 86 86
background_b Синяя 255 255

Тип каждого: integer. Допустимый диапазон: 0–255.

Начальная и текущая настройка

Пример начальной конфигурации:

turtlesim:
  ros__parameters:
    background_r: 120
    background_g: 86
    background_b: 255
turtlesim
Выбор узла
ros__parameters
Секция его параметров
background_r/g/b
Значения конфигурации
При запуске
Узел получает начальные значения конфигурации
Во время работы
Поддерживаемое изменение запрашивается у работающего узла

Изменить значение у узла ≠ переписать YAML-файл.

Настройка и операция

Учебная ситуация: черепаха уже оставила след.

После настройки RGBПосле операции /clearФон (120, 86, 255) · след сохранёнФон (120, 86, 255) · след очищен/clear
Настройка
background_r/g/b узла /turtlesim
Операция
/clear · std_srvs/srv/Empty

Клиент посылает запрос очистки; /turtlesim возвращает пустой ответ.

Выбрать интерфейс

Требуемое взаимодействие Средство Конкретный интерфейс
Передавать команды скорости Топик /turtle1/cmd_vel · Twist
Наблюдать состояние Топик /turtle1/pose · Pose
Создать объект и узнать имя Сервис /spawn · Spawn
Выполнить поворот к цели Action /turtle1/rotate_absolute · RotateAbsolute
Настроить цвет фона Параметры узла /turtlesim · background_r/g/b

Выбор определяется формой взаимодействия, а не только типом числа.

Что показывают инструменты

Что хотим узнать Средство просмотра
Имена обнаруженных узлов ros2 node list
Имена топиков и типы ros2 topic list -t
Поля определения ros2 interface show turtlesim/msg/Pose
Поступающие экземпляры ros2 topic echo /turtle1/pose
Значение настройки ros2 param get /turtlesim background_r

Выбор инструмента зависит от того, какой объект исследуется.

Собранная система

/teleop_turtlePublisherAction-клиент/turtlesim/turtle1/cmd_vel · команда/turtle1/rotate_absoluteцель / запрос отменыпринятие, feedback, итог/pose_observerучебное дополнение/turtle1/pose · состояниеКлиент сервиса/spawn · запрос/spawn · ответМодели:turtle1, turtle2Параметры:background_r/g/b