Компоненты, сообщения и интерфейсы
Лекция 1 · Введение в робототехнику
ROS — библиотеки и инструменты для разработки программ роботов. Одна из основных задач — обмен данными между частями приложения.
ROS — Robot Operating System, «операционная система робота».
rclpy для Python · Создать участника обмена в своей программеros2 · Исследовать участников, интерфейсы и данныеros_gz_bridge · Преобразовывать команды скорости между ROS и GazeboБиблиотека используется кодом; пакет объединяет готовые материалы; симулятор рассчитывает модель.
Turtlesim — учебный симулятор движения черепахи на плоскости.
Статическая учебная схема
turtle1 — объект внутри симуляции.
Узел, или node, — именованный программный компонент, участвующий в обмене ROS через собственные интерфейсы.
/teleop_turtle — управление/turtlesim — симуляторНаш учебный наблюдатель: фрагмент, не полная программа
import rclpy
from rclpy.node import Node
rclpy.init()
node = Node("pose_observer")Обычное раздельное размещение
turtle1Несколько ROS-узлов также могут находиться в одном процессе.
Топик — именованный канал обмена сообщениями определённого типа.
Publisher публикует сообщения; subscription получает их для обработки.
Топик обозначает связь, а не дополнительный процесс между узлами.
Тип сообщения задаёт структуру и типы полей.
Топик /turtle1/cmd_vel использует geometry_msgs/msg/Twist.
Vector3 linear
Vector3 angularfloat64 x
float64 y
float64 zТри компоненты типа float64
linear.x — поле x внутри linear, а не имя отдельного топика.
Оси движения связаны с черепахой
Учебный экземпляр команды движения вперёд:
linear: {x: 2.0, y: 0.0, z: 0.0}
angular: {x: 0.0, y: 0.0, z: 0.0}linear.x = 2.0angular.z = 0.0/turtle1/cmd_vel · Где передаётся команда?geometry_msgs/msg/Twist · Из каких полей состоит сообщение?linear.x: 2.0, остальные компоненты 0 · Какие значения отправлены?Прочитать определение типа
ros2 interface show geometry_msgs/msg/TwistЭто команда просмотра структуры, не отправление скорости.
/pose_observer — наш добавленный учебный подписчик
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocityУчебный экземпляр turtlesim/msg/Pose:
x: 2.0
y: 3.0
theta: 0.0
linear_velocity: 0.0
angular_velocity: 0.0Положение, ориентация и скорость — разные составляющие состояния.
Оба получателя Pose — добавленные учебные компоненты.
Сервис — интерфейс операции с запросом и связанным с ним ответом.
Имя: /spawn · Тип: turtlesim/srv/Spawn
turtlesim/srv/Spawn, определение Spawn.srv:
float32 x
float32 y
float32 theta
string name
---
string name------Пустая строка имени в запросе позволяет серверу выбрать имя.
Учебный запрос, имя turtle2 свободно:
x: 7.0
y: 7.0
theta: 1.5
name: turtle2Ответ при успешном создании
name: turtle2Два объекта модели, прежний узел симулятора.
/turtlesim/turtle1/cmd_vel/turtle2/cmd_vel/turtle2/poseОба cmd_vel: geometry_msgs/msg/Twist.
Выбрать другой канал команды
Изменить значения сообщения
Action — интерфейс выполнения цели во времени: принятие цели, возможность сообщать о ходе работы, итог и запрос отмены.
«Поворачивайся с такой скоростью»
Twist.angular.z
Угловая скорость, rad/s
«Достигни такой ориентации»
RotateAbsolute.Goal.theta
Целевой угол, rad
Имя: /turtle1/rotate_absolute
Тип: turtlesim/action/RotateAbsolute
Все сообщения относятся к /turtle1/rotate_absolute
Feedback — возможность интерфейса, а не обязательное условие успеха.
Определение RotateAbsolute.action
float32 theta
---
float32 delta
---
float32 remainingthetadeltaremainingВсе значения — rad. В файле: goal → result → feedback.
Учебная ситуация: текущая ориентация 0.5 rad, цель 1.5 rad.
theta: 1.5remaining: 1.0remaining — угловая разность, не оставшееся время.
Запрос отмены и завершение цели — разные события.
SUCCEEDEDCANCELEDABORTEDВ Turtlesim обработка принятой отмены обнуляет скорости.
Result.delta читается вместе с итоговым статусом.
Параметр — именованное типизированное значение конфигурации узла.
ros2 param get /turtlesim background_rДля обращения нужны узел и имя параметра.
Параметры узла /turtlesim · учебное изменение
| Имя | Составляющая | По умолчанию | После изменения |
|---|---|---|---|
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Изменить значение у узла ≠ переписать YAML-файл.
Учебная ситуация: черепаха уже оставила след.
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 |
Выбор инструмента зависит от того, какой объект исследуется.
Лекция 1 · ROS 2