ROS 2¶
Введение¶
Когда мы начинаем писать программы для роботов, разработка становится сложнее. Робот должен одновременно работать с алгоритмами и аппаратной частью. Программа управляет не только логикой, но и реальными устройствами: камерами, датчиками расстояния, электродвигателями, полетными контроллерами, GPS и другими компонентами. Все эти устройства постоянно обмениваются данными, которые программа должна получать, обрабатывать и использовать для принятия решений.
Слишком много разных задач. Например, одна часть программы отвечает за стабилизацию квадрокоптера в воздухе, другая получает данные с камеры, третья определяет препятствия, а четвертая решает, куда лететь дальше.
Сложность обмена данными. Камера должна передать изображение алгоритму распознавания. Алгоритм распознавания должен сообщить системе управления, что впереди находится препятствие. Система управления должна изменить траекторию полета.
Много датчиков и устройств. У квадрокоптера могут быть камера, датчик высоты, GPS, IMU ( инерциальный измерительный блок), дальномеры и электродвигатели. Все эти устройства должны работать одновременно и обмениваться информацией.
Сложно развивать проект. Сначала квадрокоптер умеет только взлетать и садиться. Затем мы хотим добавить удержание позиции, потом — полет по маршруту, а после этого — распознавание объектов. Со временем программа становится большой и сложной для сопровождения.
Чтобы решить такие проблемы, используют специальный набор инструментов для разработки робототехнических программ — Robot Operating System 2, или просто ROS 2. Несмотря на название, ROS 2 — это не операционная система в обычном смысле. Это набор программных библиотек, инструментов и интерфейсов, которые помогают разрабатывать отдельные компоненты робототехнической системы и организовывать их взаимодействие.
Главная идея ROS 2 довольно проста: вместо одной огромной программы робот состоит из множества небольших программ (микросервисов), каждая из которых выполняет свою задачу. В терминологии ROS 2 такие программы называются узлами (nodes).
Например, у квадрокоптера могут быть такие узлы:
Узел связи с полетным контроллером получает данные от автопилота (высоту, скорость, положение квадрокоптера) и отправляет команды управления: взлететь, изменить высоту, полететь вперед или приземлиться.
Узел работы с камерой получает изображения с камеры квадрокоптера и публикует их, чтобы другие узлы могли использовать эти данные.
Узел обработки ArUco-меток анализирует изображения с камеры, ищет на них специальные маркеры (ArUco) и определяет их положение относительно квадрокоптера. Это можно использовать, например, для точной посадки.
Узел навигации получает информацию от других узлов (например, положение ArUco-маркера или данные GPS) и рассчитывает, куда должен перемещаться квадрокоптер.
Узел команд оператора получает команды от человека (с клавиатуры, пульта управления или наземной станции) и передает их другим компонентам системы.
Все эти узлы могут работать одновременно и обмениваться информацией. ROS 2 предоставляет механизмы, с помощью которых узлы могут обмениваться данными. Один из основных механизмов — топики (topics), то есть именованные каналы для передачи сообщений.
Например, у квадрокоптера обмен данными может выглядеть так:
узел камеры публикует изображения в топик
/camera/image;узел распознавания ArUco-маркеров подписывается на
/camera/imageи получает изображения;если узел обнаружил ArUco-маркер, его местоположение публикуется в топике
/aruco/pose;узел навигации получает данные из
/aruco/poseи рассчитывает, как квадрокоптеру изменить положение, чтобы подлететь к ArUco-маркеру или выполнить точную посадку.
Главное преимущество такого подхода в том, что узлы не зависят напрямую друг от друга. Они просто отправляют и получают сообщения, а ROS 2 заботится о том, чтобы данные дошли до нужного узла.
Благодаря этому систему легче изменять и расширять. Например, если вы написали собственный алгоритм распознавания ArUco-маркеров, можно заменить один узел, а остальные узлы продолжат работать без изменений.
ROS 2 также содержит множество готовых инструментов, которые упрощают разработку робототехнических систем. Например:
Работа с системами координат. В робототехнике почти все связано с положением объектов в пространстве: где находится робот, где расположена камера, где обнаружен объект. В ROS 2 есть готовые инструменты для описания систем координат и преобразования координат между ними (например, от камеры к корпусу робота и далее к карте).
Визуализация данных. Можно в реальном времени смотреть, что происходит внутри системы: положение робота, данные с датчиков, траектории движения или точки от лидаров. Это помогает при разработке и отладке.
Симуляция. Прежде чем запускать алгоритм на настоящем роботе, его можно протестировать в виртуальной среде (симуляторе). В симуляции можно проверить навигацию, управление и обработку данных без риска повредить оборудование.
Готовые драйверы и пакеты для оборудования. Для многих популярных камер, лидаров, GPS-модулей и других устройств существуют готовые пакеты. Поэтому часто не нужно писать код для работы с устройством с нуля — можно использовать готовый пакет.
Вывод: ROS 2 помогает объединить разные части программного обеспечения робота в одну систему. Она позволяет разделить сложную задачу на небольшие независимые компоненты, которые проще разрабатывать, тестировать и улучшать. Благодаря этому создавать сложные робототехнические системы становится проще даже для начинающих.