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, управление манипуляторами, компьютерное зрение, навигация и др.).
История
Прообраз 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 вела разработку робота 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.
С 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) и структура исполнения (узлы и топики).
Каждый процесс (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].
- 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-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].


