ROS
ROS (от англ. Robot Operating System, «Операционная система для роботов») — это мета-операционная система, или фреймворк, для разработки программного обеспечения роботов. Представляет собой набор программных библиотек, инструментов и соглашений, предназначенных для упрощения создания сложного и надёжного роботизированного поведения. ROS не является операционной системой в традиционном понимании (как Windows или Linux), а работает поверх существующей ОС (преимущественно Ubuntu Linux), предоставляя сервисы, характерные для ОС: аппаратную абстракцию, низкоуровневый контроль устройств, реализацию часто используемых функций, передачу сообщений между процессами и управление пакетами.
История
Предпосылки и создание
Разработка ROS началась в 2007 году в Стэнфордском университете (США) в рамках проекта Stanford AI Robot (STAIR). Команда под руководством Эрика Бергера и Эндрю Нг ставила целью создать гибкую и модульную платформу для робототехнических исследований, которая позволила бы повторно использовать код и избежать «изобретения велосипеда». Первый публичный релиз (ROS 0.4) состоялся в 2009 году.
Развитие под эгидой Willow Garage
В 2008 году разработка перешла к компании Willow Garage, которая занималась созданием персонального робота PR2. Willow Garage значительно расширила функционал ROS, добавила систему сборки (catkin) и стандартизировала форматы сообщений. В 2010 году вышла версия ROS 1.0 (дистрибутив «Box Turtle»), которая стала основой для большинства исследовательских проектов того времени.
Переход к Open Robotics
После закрытия Willow Garage в 2014 году управление проектом перешло к некоммерческой организации Open Robotics (позднее переименована в Open Source Robotics Foundation, OSRF). OSRF обеспечила поддержку сообщества, выпуск новых дистрибутивов и развитие инфраструктуры.
ROS 2
В 2015 году был анонсирован ROS 2 (Ardent Apalone), который стал ответом на ограничения ROS 1, в первую очередь — отсутствие поддержки реального времени, безопасности и работы в распределённых системах. ROS 2 базируется на протоколе DDS (Data Distribution Service), что обеспечивает детерминированность и масштабируемость. Первый стабильный релиз ROS 2 вышел в 2017 году. По состоянию на 2025 год ROS 2 является основным направлением развития, а ROS 1 считается устаревшим (последний дистрибутив ROS 1 — Noetic Ninjemys, выпущен в 2020 году).
Архитектура и принципы работы
Узлы и темы
Основой архитектуры ROS является граф вычислений. Программные компоненты, называемые узлами (nodes), обмениваются данными, публикуя сообщения в темы (topics) или подписываясь на них. Узел — это исполняемый файл, выполняющий конкретную задачу (например, чтение данных с лидара или управление колёсами). Темы — это именованные каналы передачи данных, где один узел отправляет сообщение, а другие его получают. Связь осуществляется по принципу «издатель-подписчик» (publisher-subscriber).
Сервисы и действия
Для выполнения запросов-ответов (например, «включить мотор») используется механизм сервисов (services), работающий по модели «клиент-сервер». Для длительных задач с возможностью прерывания (например, «переместить манипулятор в точку») применяются действия (actions), которые предоставляют обратную связь о ходе выполнения.
Мастер и параметры
В ROS 1 центральным элементом является Мастер (Master) — сервер имён, который регистрирует все узлы и темы, позволяя им находить друг друга. В ROS 2 Мастер отсутствует — обнаружение узлов осуществляется децентрализованно через DDS. Для хранения конфигурационных данных используется сервер параметров (Parameter Server), где узлы могут читать и записывать значения.
Пакеты и метапакеты
Код в ROS организован в пакеты (packages) — минимальные единицы сборки, содержащие узлы, библиотеки, конфигурации и файлы запуска (launch files). Метапакеты (metapackages) объединяют несколько пакетов для решения общей задачи (например, навигация). Система сборки по умолчанию — catkin (для ROS 1) и ament (для ROS 2).
Основные дистрибутивы
ROS имеет версионность, основанную на кодовых именах, которые выпускаются ежегодно (для ROS 1) или раз в два года (для ROS 2). Наиболее значимые дистрибутивы:
| Дистрибутив | Версия ROS | Дата выхода | Примечания |
|---|---|---|---|
| Box Turtle | ROS 1 | 2010 | Первый стабильный релиз |
| Indigo Igloo | ROS 1 | 2014 | Долгосрочная поддержка (LTS) |
| Kinetic Kame | ROS 1 | 2016 | LTS, популярен для Ubuntu 16.04 |
| Melodic Morenia | ROS 1 | 2018 | LTS, поддержка Python 3 |
| Noetic Ninjemys | ROS 1 | 2020 | Последний LTS-релиз ROS 1 |
| Ardent Apalone | ROS 2 | 2017 | Первый стабильный релиз ROS 2 |
| Foxy Fitzroy | ROS 2 | 2020 | LTS, рекомендован для новых проектов |
| Humble Hawksbill | ROS 2 | 2022 | LTS, поддержка Ubuntu 22.04 |
| Rolling Ridley | ROS 2 | 2021 | Непрерывный дистрибутив (rolling release) |
Инструменты и экосистема
Симуляция
ROS тесно интегрирован с симуляторами, прежде всего с Gazebo (разработан Open Robotics). Gazebo позволяет моделировать роботов, датчики и физику окружающей среды, что ускоряет разработку без риска повреждения реального оборудования. Также поддерживаются симуляторы Webots, CoppeliaSim (V-REP) и Unity.
Визуализация и отладка
- RViz — 3D-визуализатор, отображающий данные с датчиков (лазерные сканы, облака точек, карты), траектории движения и состояние робота.
- rqt — набор графических инструментов для мониторинга тем, сервисов, параметров и логов.
- rosbag — утилита для записи и воспроизведения сообщений (bag-файлы), что позволяет повторно обрабатывать данные.
Библиотеки и пакеты
Экосистема ROS включает тысячи готовых пакетов, решающих типовые задачи:
- navigation — набор пакетов для планирования пути и управления движением (move_base, amcl, costmap_2d).
- moveit — фреймворк для управления манипуляторами, включая планирование траекторий, кинематику и коллизионный контроль.
- slam_gmapping и cartographer — пакеты для построения карт и локализации (SLAM).
- perception — пакеты для обработки данных с камер (OpenCV, PCL) и лидаров.
- control — пакеты для управления (PID-регуляторы, контроллеры).
Применение
Научные исследования
ROS является стандартом de facto в академической робототехнике. Большинство исследовательских проектов, от мобильных роботов до гуманоидных машин, используют ROS для быстрого прототипирования. Примеры: робот PR2, TurtleBot, Baxter, NAO.
Промышленность
В промышленности ROS 2 применяется для создания коллаборативных роботов (коботов), автономных мобильных роботов (AMR) и систем управления. Крупные компании, такие как Amazon Robotics, Fetch Robotics, Yaskawa, используют ROS в своих продуктах. Однако для критически важных применений (например, в автомобильной промышленности) требуется дополнительная сертификация, что пока ограничивает распространение.
Образование
ROS широко используется в учебных курсах по робототехнике. Симуляция и доступность готовых пакетов позволяют студентам сосредоточиться на алгоритмах, а не на низкоуровневом программировании. Популярные учебные платформы: TurtleBot 3, JetBot, RoboMaster.
Беспилотные летательные аппараты
ROS применяется в дронах (например, на базе PX4 и ArduPilot) для автономной навигации, картирования и мониторинга. Пакет mavros обеспечивает связь между ROS и автопилотом.
Критика и ограничения
ROS 1
- Отсутствие реального времени: ROS 1 не гарантирует детерминированности, что делает его непригодным для жёстких систем управления (например, тормозов автомобиля).
- Зависимость от Мастера: отказ Мастера приводит к остановке всей системы.
- Проблемы безопасности: отсутствие встроенной аутентификации и шифрования.
- Сложность с распределёнными системами: плохая поддержка работы через ненадёжные сети.
ROS 2
- Сложность настройки DDS: выбор и конфигурация DDS-реализации (Fast DDS, Cyclone DDS, RTI Connext) требуют опыта.
- Высокое потребление ресурсов: DDS генерирует больше служебного трафика, чем ROS 1.
- Несовместимость с ROS 1: пакеты для ROS 1 не работают в ROS 2 без переписывания кода.
- Отсутствие зрелой экосистемы: на момент 2025 года не все пакеты ROS 1 перенесены на ROS 2.
Интересные факты
- Название «ROS» не является акронимом, хотя часто расшифровывается как Robot Operating System. Изначально проект назывался «Switchyard», но был переименован.
- ROS 1 написан преимущественно на C++ и Python, а ROS 2 дополнительно поддерживает C++14/17 и Python 3.
- В 2022 году Open Robotics объявила о создании Open Source Robotics Alliance (OSRA) для управления развитием ROS.
- Крупнейшая конференция по ROS — ROSCon, проводится ежегодно с 2012 года.
Источники
- Quigley, M., et al. «ROS: an open-source Robot Operating System.» ICRA Workshop on Open Source Software, 2009.
- Документация ROS Wiki (wiki.ros.org).
- Документация ROS 2 (docs.ros.org).
- Open Robotics Foundation. «ROS 2 Design.» 2015.
- Koubaa, A. (ed.). «Robot Operating System (ROS): The Complete Reference.» Springer, 2016–2021.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →