ROS 2

Docker

Введение

Когда мы начинаем писать программы для роботов, разработка становится сложнее. Робот должен одновременно работать с алгоритмами и аппаратной частью. Программа управляет не только логикой, но и реальными устройствами: камерами, датчиками расстояния, электродвигателями, полетными контроллерами, 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 помогает объединить разные части программного обеспечения робота в одну систему. Она позволяет разделить сложную задачу на небольшие независимые компоненты, которые проще разрабатывать, тестировать и улучшать. Благодаря этому создавать сложные робототехнические системы становится проще даже для начинающих.