ROS (операционная система)

ROS — открытая среда (Robot Operating System) для разработки программного обеспечения в области робототехники, представляющая собой набор платформенно-независимых фреймворков (middleware), используемых для создания, интеграции и управления роботами. Хотя ROS не является полноценной операционной системой в классическом понимании, она предоставляет широкий набор сервисов для создания распределённых гетерогенных кластеров, включая абстракцию аппаратного обеспечения, низкоуровневое управление устройствами, реализацию часто используемых функций, обмен сообщениями между процессами и централизованное управление пакетами.

Выполняемые процессы ROS представлены в виде графа, где каждое вычисление происходит в отдельном узле (node), а передача и мультиплексирование сообщений между разными частями системы осуществляется с помощью топиков (topics). Несмотря на высокую критичность быстродействия и низкой задержки в робототехнике, ROS не является системой реального времени (RTOS); однако возможно интегрировать код с поддержкой real-time. Для поддержки реального времени и встраиваемых решений была создана ROS 2 — основное развитие API ROS на базе современных библиотек и с учётом поддержки RT-кода и аппаратных платформ реального времени[3].[4][5][6].

ПО в экосистеме ROS[7] делится на три группы:

  • многоплатформенные инструменты и утилиты для сборки и распространения ROS‑программ;
  • клиентские библиотеки, такие как roscpp[8], rospy[9], roslisp[10];
  • прикладные пакеты, реализующие функциональность или используемые одну или несколько клиентских библиотек[11].

Все основные клиентские библиотеки и ключевые инструменты (C++, Python, Lisp) распространяются под лицензией BSD и могут свободно использоваться как в коммерческих, так и в исследовательских целях. Большинство остальных пакетов используют различные открытые лицензии. Эти пакеты реализуют часто используемые задачи: драйверы для аппаратуры, моделирование роботов, обработку данных и планирование движения, SLAM, средства симуляции, различные алгоритмы.

Основные клиентские библиотеки ROS оптимизированы под Unix-подобные системы, в первую очередь из-за обилия зависимостей на свободное ПО; официально поддерживается Ubuntu Linux. Fedora, macOS и Windows отмечены как «экспериментальные» и поддерживаются сообществом[12]. Библиотека rosjava[13] не имеет этих ограничений и позволяет использовать ROS на Android-устройствах[14] и в составе официального тулбокса MATLAB для ROS[15]. Также существует клиентская библиотека на JavaScript, roslibjs[16], позволяющая интеграцию через стандартный веб-браузер.

Что важно знать
ROS
Тип Пакет для робототехники, ОС, библиотека
Авторы Willow Garage
Stanford Artificial Intelligence Laboratory
Open Robotics
Написана на C++, Python, Lisp
Операционные системы Linux, macOS (экспериментально), Windows 10 (экспериментально)
Первый выпуск 2007
Последняя версия Jazzy Jalisco [1] (27 мая 2024)
Тестовая версия Kilted Kaiju (ROS 2)[2]
Репозиторий github.com/ros2/ros2
Лицензия Apache 2.0
Сайт ros.org

Возможности

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

  • инфраструктуру обмена сообщениями между процессами (топики, сервисы, actions);
  • средства абстракции аппаратного обеспечения;
  • унифицированный протокол для обмена данными между компонентами;
  • средства моделирования и симуляции, визуализации, записи и воспроизведения данных;
  • мощную систему управления пакетами и зависимостями;
  • поддержку языка описания робота URDF (Unified Robot Description Format);
  • разветвлённую экосистему специализированных пакетов для робототехники (SLAM, управление манипуляторами, компьютерное зрение, навигация и др.).

История

Ранние годы в Стэнфорде (до 2007)

Прообраз ROS начал формироваться до 2007 года в Стэнфордском университете[17][18]. Ключевые работы выполнялись аспирантами Эриком Бергером и Кинаном Вайробеком в лаборатории Кеннета Солсбери[19][20]. Система разрабатывалась как базовая платформа для исследований, с целью преодолеть фрагментацию инструментов и ускорить внедрение и распространение программного обеспечения для роботов.

Первым аппаратным прототипом был робот PR1, а софт собирался из наработок открытых robotics-проектов, особенно switchyard, созданного Морганом Куигли для проекта STanford Artificial Intelligence Robot (STAIR)[21][22][23][24]. Разработка финансировалась благодаря поддержке Джоанны Хоффманн и Алёна Россмана. Позже, получив предложение от основателя Willow Garage Скотта Хассана, команда присоединилась к инкубатору Willow Garage, где первый коммит ROS был загружен на SourceForge 7 ноября 2007 года[25].

Willow Garage (2007—2013)

Willow Garage вела разработку робота PR2 и ROS как основной программной платформы для своих устройств. К проекту подключились более 20 команд из разных институтов. В декабре 2008 года был достигнут первый значимый внутренний рубеж — непрерывная навигация PR2 за 2 дня и более 3 километров. Вскоре после этого был выпущен ранний релиз ROS (0.4 Mango Tango)[26], появилась первая документация по RVIZ и первый научный доклад по ROS[27]. Позже были опубликованы первые учебные материалы и выпущена версия ROS 1.0 (январь 2010)[28].

С 2010 года Willow Garage распространила бесплатные комплекты PR2 среди университетов и лабораторий по всему миру. Позднее важными событиями стали запуск форума ROS Answers (2011), появление набора TurtleBot (2011), а также выделение некоммерческого фонда Open Source Robotics Foundation (OSRF, 2012), которому DARPA доверила контракт по разработке программного обеспечения.

В 2013 году OSRF стала основным координатором разработки ROS[29], а Willow Garage постепенно передала полномочия и была интегрирована в Suitable Technologies.

OSRF и Open Robotics (2013 — настоящее время)

С 2013 года каждый год появляется новая версия ROS[30]. С 2014 года стали проходить ежегодные конференции ROSCon. В 2014 году впервые ROS был запущен на МКС (робот Robonaut 2). В 2017 году OSRF переименована в Open Robotics, а компании Microsoft и Amazon начали официальную поддержку ROS на Windows и в своих облачных сервисах.

Ключевым этапом стало анонсирование ROS 2 — новой архитектуры для поддержки реального времени, разнообразия аппаратных платформ и современных технологий[31].[32] Первый релиз ROS 2 (Ardent Apalone) состоялся в декабре 2017 года.

Платформы и совместимость

Основными платформами для работы с ROS являются Ubuntu Linux, Fedora, macOS и (экспериментально) Windows 10. Java-библиотека rosjava обеспечивает поддержку Android и MATLAB на нескольких ОС. Клиентские библиотеки на C++, Python, Lisp, Java, JavaScript и MATLAB предлагают широкий охват технологий для программирования роботов разного назначения.

Технические особенности

Философия

ROS разрабатывалась как модульная открытая система: пользователь выбирает нужные инструменты и библиотеки и собирает индивидуальную программную конфигурацию для своего применения. К числу обязательных компонентов относятся архитектурная модель обмена сообщениями (graph) и структура исполнения (узлы и топики).

Граф вычислений (computation graph)

Каждый процесс (node) в ROS является узлом вычислительного графа, соединённым с другими через именованные каналы — топики (topics)[33]. Передачи осуществляются посредством публикации и подписки, вызова сервисов или доступа к общей базе параметров (parameter server). Централизованная служба (ROS Master) координирует запуск, регистрацию и взаимодействие между узлами. Архитектура peer-to-peer подходит для распределённых роботов и гибридных конфигураций.

  • Узлы (nodes) — отдельные процессы, регистрирующиеся у ROS Master.
  • Топики (topics) — программные «шины», предназначенные для передачи сообщений (данные с сенсоров, управляющие сигналы и пр.) по анонимной модели publish-subscribe[34].
  • Сервисы (services) — интерфейсы для запросов с гарантированным однократным откликом, используются для операций с началом и концом исполнения[35].
  • Сервер параметров (parameter server) — база для хранения редактируемых статических или редко изменяемых данных (например, калибровки).

Инструменты

ROS включает целый набор стандартных инструментов:

  • rviz[36] — визуализатор трёхмерных моделей, сенсорных данных и среды работы робота. Формат описания URDF (XML) используется для моделей.
  • rosbag[37] — командная утилита для записи и воспроизведения ROS-сообщений в формате bag-файлов[38]. Для работы с bag-файлами через GUI используется rqt_bag[39].
  • catkin[40] — основная система сборки ROS (сменила rosbuild[41]), основана на CMake.
  • rosbash[42] — набор команд расширяющих Bash для работы с ROS (rosls, roscd, rosrun и др.) с поддержкой автодополнения и интеграцией в zsh, tcsh.
  • roslaunch[43] — инструмент для запуска сразу нескольких узлов, настройки параметров и автоматизации развёртывания.

Примечательные пакеты ROS

  • actionlib[44] — стандартный интерфейс для работы с прерываемыми задачами.
  • nodelet[45] — размещение нескольких алгоритмов в одном процессе.
  • rosbridge[46] — JSON-API для интеграции не-ROS‑программ.
  • slam_toolbox[47] — 2D SLAM и локализация.
  • gmapping[48] — интеграция OpenSlam Gmapping.
  • cartographer[49] — 2D/3D SLAM (Google).
  • amcl[50] — адаптивная Монте-Карло-локализация.
  • navigation[51] — автономная навигация мобильных роботов.
  • MoveIt![52] — планирование движения манипуляторов (по умолчанию Open Motion Planning Library (OMPL)[53]).
  • vision_opencv[54] — интеграция с OpenCV.
  • tf[55] / tf2[56] — работа с системами координат.
  • gazebo_ros_pkgs[57] — интеграция с симулятором Gazebo.
  • stage[58] — интерфейс к 2D-симулятору Player/Stage.

Выпуски

ROS 1

Выпуски дистрибутивов ROS 1
Дистрибутив Дата выпуска Постер Дата окончания поддержки Продолжительность поддержки
Noetic Ninjemys (последний релиз ROS 1) 23 мая 2020 Noetic.png май 2025 5 лет
Melodic Morenia 23 мая 2018 30 мая 2023 5 лет
Lunar Loggerhead 23 мая 2017 ROS Lunar Loggerhead.png 30 мая 2019 2 года
Kinetic Kame 23 мая 2016 Kinetic.png 30 мая 2021 5 лет
Jade Turtle 23 мая 2015 ROS jade logo.png 30 мая 2017 2 года
Indigo Igloo 22 июля 2014 Indigoigloo 600.png 30 апреля 2019 5 лет
Hydro Medusa 4 сентября 2013 ROS Hydro logo.png 31 мая 2014 0,5 года
Groovy Galapagos 31 декабря 2012 ROS Groovy logo.jpg 31 июля 2014 2 года
Fuerte Turtle 23 апреля 2012 ROS Fuerte logo.jpg
Electric Emys 30 августа 2011 ROS Electric logo.png
Diamondback 2 марта 2011 ROS Diamondback logo.jpg
C Turtle 2 августа 2010 ROS C logo.jpg
Box Turtle 2 марта 2010 ROS Box logo.png
(Initial Release) 2007 n/a n/a

ROS 2

Выпуски дистрибутивов ROS 2
Дистрибутив Дата выпуска Постер Дата окончания поддержки Продолжительность поддержки
Rolling Ridley (rolling release) с июня 2020 ROS2 Rolling Ridley poster.png
Kilted Kaiju 23 мая 2025 Kilted-kaiju.png ноябрь 2026 1,5 года
Jazzy Jalisco 23 мая 2024 ROS2 Jazzy Jalisco poster.png май 2029 5 лет
Iron Irwini 23 мая 2023 ROS2 Iron Irwini poster.png ноябрь 2024 1,5 года
Humble Hawksbill 23 мая 2022 ROS2 Humble Hawksbill poster.png май 2027 5 лет
Galactic Geochelone 23 мая 2021 ROS2 Galactic Geochelone poster.jpg декабрь 2022 1,5 года
Foxy Fitzroy 5 июня 2020 ROS2 Foxy Fitzroy poster.png июнь 2023 3 года
Eloquent Elusor 22 ноября 2019 Logo for ROS 2 release "eloquent elusor".png ноябрь 2020 1 год
Dashing Diademata 31 мая 2019 Logo for ROS 2 release "dashing diademata".png май 2021 2 года
Crystal Clemmys 14 декабря 2018 ROS Crystal Logo.png декабрь 2019 1 год
Bouncy Bolson 2 июля 2018 ROS Bouncy Logo.png июль 2019 1 год
Ardent Apalone 8 декабря 2017 ROS Ardent Logo.png декабрь 2018 1 год

ROS-Industrial

ROS-Industrial[59] — открытый проект (лицензия BSD / Apache 2.0), расширяющий возможности ROS для промышленной автоматизации и робототехники. ROS используется как альтернативный метод программирования промышленных роботов (вместо проприетарных контроллеров), а репозиторий ROS-I содержит пакеты для манипуляторов, датчиков, калибровки, планирования движения и интеграции партийных решений.

Проект поддерживает консорциум индустриальных и исследовательских организаций из Америки, Европы, Азиатско-Тихоокеанского региона. Ведущими организациями выступают Southwest Research Institute (США), Fraunhofer IPA (Германия), ARTC и NTU (Сингапур).

ROS и аппаратные платформы

Поддерживаемые роботы

  • ABB, Adept, Fanuc, Motoman, Universal Robots (в рамках ROS-Industrial)[60];
  • Baxter[61];
  • CK-9 (Centauri Robotics)[62];
  • GoPiGo3 — образовательный робот на Raspberry Pi[63];
  • HERB (Carnegie Mellon, Intel)[64];
  • Husky A200 (Clearpath Robotics)[65];
  • Nao (интеграция лабораторий Университета Фрайбурга и Брауновского университета)[66];
  • PR1 и PR2 — лаборатории Стэнфорда и Willow Garage[67][68];
  • Raven II (университет Вашингтона)[69][70];
  • ROSbot (Husarion)[71];
  • Shadow Robot Hand[72];
  • STAIR I и II (лаборатория Эндрю Ынга, Стэнфорд)[73];
  • Stretch (Hello Robot)[74][75];
  • SummitXL (Robotnik Automation)[76];
  • UBR1 (Unbounded Robotics)[77][78];
  • Webots — симулятор с поддержкой ROS[79].

Аппаратные платформы и SBC

  • BeagleBoard (университет Кю Лёвен, Бельгия; портированная поддержка ROS)[80];
  • Raspberry Pi: образ Ubuntu Mate c ROS[81] и простая установка на Raspbian[82]; подробно об установке ROS2 на Raspberry Pi[83];
  • Sitara ARM Processor — поддержка ROS в официальном SDK[84].

Примечания