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].
- 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 2
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].
Примечания
- ↑ ROS 2 Jazzy Jalisco. ROS.org. Open Robotics. Дата обращения: 25 февраля 2025. Архивировано 21 августа 2025 года.
- ↑ ROS 2 Kilted Kaiju. ROS.org. Open Robotics (май 2025). Дата обращения: 25 февраля 2025. Архивировано 24 июля 2024 года.
- ↑ ROS/Introduction – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 30 июля 2021. Архивировано 4 сентября 2025 года.
- ↑ Kay, Jackie Proposal for Implementation of Real-time Systems in ROS 2. ROS.org. Open Robotics (январь 2016). Дата обращения: 23 января 2023. Архивировано 22 августа 2025 года.
- ↑ Kay, Jackie Realtime Design Guidelines For ROS 2. ROS.org. Open Robotics (январь 2016). Дата обращения: 23 января 2023. Архивировано 22 августа 2025 года.
- ↑ ROS 2 For Realtime Applications. ROS.org. Open Robotics (17 октября 2018). Дата обращения: 22 ноября 2018. Архивировано 20 мая 2025 года.
- ↑ Browsing packages for melodic. ROS.org. Open Robotics. Дата обращения: 8 апреля 2026. Архивировано 24 сентября 2015 года.
- ↑ Package Summary. ROS.org. Open Robotics. Дата обращения: 21 февраля 2016. Архивировано 28 октября 2013 года.
- ↑ Package Summary. ROS.org. Open Robotics. Дата обращения: 21 февраля 2016. Архивировано 24 августа 2025 года.
- ↑ Package Summary. ROS.org. Open Robotics. Дата обращения: 21 февраля 2016. Архивировано 4 сентября 2025 года.
- ↑ client libraries. ROS.org. Open Robotics. Дата обращения: 12 декабря 2017. Архивировано 25 августа 2025 года.
- ↑ ROS/Installation – ROS Wiki. ROS.org. Open Robotics (29 сентября 2013). Дата обращения: 12 июля 2014. Архивировано 30 августа 2025 года.
- ↑ rosjava – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 4 марта 2014 года.
- ↑ android – ROS Wiki. ROS.org. Open Robotics (12 апреля 2014). Дата обращения: 12 июля 2014. Архивировано 22 августа 2025 года.
- ↑ Robot Operating System (ROS) Support from MATLAB – Hardware Support. Mathworks.com. Дата обращения: 12 июля 2014. Архивировано 11 марта 2014 года.
- ↑ roslibjs – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 25 августа 2025 года.
- ↑ Guizzo, Evan Ackerman и Эрико Wizards of ROS: Willow Garage and the Making of the Robot Operating System (англ.). IEEE Spectrum (7 ноября 2017). Дата обращения: 29 апреля 2019. Архивировано 7 ноября 2021 года.
- ↑ Wyrobek, Keenan The Origin Story of ROS, the Linux of Robotics (англ.). IEEE Spectrum (31 октября 2017). Дата обращения: 29 апреля 2019. Архивировано 23 сентября 2025 года.
- ↑ J. Kenneth Salisbury, Ph.D. (амер. англ.). Дата обращения: 29 апреля 2019.
- ↑ Stanford Personal Robotics Program. personalrobotics.stanford.edu. Дата обращения: 29 апреля 2019.
- ↑ Stanford's Robot Makers (16 января 2019). Архивировано 16 января 2019 года.
- ↑ Ng, Andrew; Gould, Stephen; Quigley, Morgan; Saxena, Ashutosh; Berger, Eric STAIR: The STanford Artificial Intelligence Robot project. Snowbird Workshop (2008). Архивировано 5 октября 2023 года.
- ↑ STAIR. stair.Stanford.edu. Дата обращения: 12 декабря 2017.
- ↑ Quigley, Morgan; Berger, Eric; Ng, Andrew Y. (2007). “STAIR: Hardware and Software Architecture” (PDF). AAAI 2007 Robotics Workshop.
- ↑ Repository: code. Sourceforge.net. Дата обращения: 12 декабря 2017. Архивировано 18 декабря 2024 года.
- ↑ ROS 0.4 Release – ROS robotics news. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 6 августа 2017 года.
- ↑ Quigley, Morgan; Gerkey, Brian; Conley, Ken; Faust, Josh; Foote, Tully ROS: an open-source Robot Operating System. Дата обращения: 3 апреля 2010. Архивировано 18 сентября 2025 года.
- ↑ ROS 1.0 – ROS robotics news. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 11 апреля 2010 года.
- ↑ Osrf – Ros @ Osrf. Osrfoundation.org (11 февраля 2013). Дата обращения: 12 июля 2014. Архивировано 17 февраля 2013 года.
- ↑ Distributions – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 22 августа 2025 года.
- ↑ Why ROS 2? ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 22 августа 2025 года.
- ↑ ROS 2 Overview. ROS.org. Open Robotics. Дата обращения: 21 сентября 2021. Архивировано 23 августа 2025 года.
- ↑ ROS/Tutorials/UnderstandingNodes – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 14 июля 2025 года.
- ↑ ROS/Tutorials/UnderstandingTopics – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 20 июня 2025 года.
- ↑ ROS/Tutorials/UnderstandingServicesParams – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 25 июня 2025 года.
- ↑ rviz – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 23 апреля 2019. Архивировано 28 сентября 2025 года.
- ↑ rosbag – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 23 апреля 2019. Архивировано 29 августа 2025 года.
- ↑ Bags – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 23 апреля 2019. Архивировано 24 августа 2025 года.
- ↑ rqt_bag – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 23 апреля 2019. Архивировано 22 сентября 2013 года.
- ↑ catkin – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 14 сентября 2013 года.
- ↑ rosbuild – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 25 июля 2014 года.
- ↑ rosbash – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 23 апреля 2019. Архивировано 2 октября 2025 года.
- ↑ roslaunch – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 23 апреля 2019. Архивировано 4 сентября 2013 года.
- ↑ actionlib – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 8 сентября 2025 года.
- ↑ nodelet – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 28 октября 2014 года.
- ↑ rosbridge_suite – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 7 сентября 2013 года.
- ↑ slam_toolbox – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 11 февраля 2020. Архивировано 24 августа 2025 года.
- ↑ gmapping – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 9 ноября 2013 года.
- ↑ cartographer – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 24 августа 2025 года.
- ↑ amcl – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 24 августа 2025 года.
- ↑ navigation – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 18 октября 2013 года.
- ↑ MoveIt Motion Planning Framework. ROS MoveIt!.
- ↑ MoveIt Documentation: Rolling. Архивировано 12 сентября 2025 года.
- ↑ vision_opencv – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 12 августа 2025 года.
- ↑ tf – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 23 октября 2013 года.
- ↑ tf2 – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 17 сентября 2025 года.
- ↑ gazebo_ros_pkgs – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 9 августа 2025 года.
- ↑ stage – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 29 апреля 2019. Архивировано 7 сентября 2013 года.
- ↑ ROS-Industrial About. rosindustrial.org. Дата обращения: 12 декабря 2017. Архивировано 23 августа 2025 года.
- ↑ Home. ROS-Industrial. Дата обращения: 12 декабря 2017.
- ↑ Baxter Research Robots Q&A (24 июля 2014). Дата обращения: 30 июля 2021. Архивировано 24 июля 2014 года.
- ↑ CK-9. centaurirobotics.in. Дата обращения: 30 июля 2021. Архивировано 26 января 2025 года.
- ↑ Robots/gopigo3 – ROS Wiki. ROS.org. Open Robotics. Дата обращения: 30 июля 2021. Архивировано 5 мая 2025 года.
- ↑ CMU Personal Robotics Lab. personalrobotics.Intel-Research.net. Дата обращения: 12 декабря 2017.
- ↑ Husky UGV – Outdoor Field Research Robot by Clearpath. ClearPathRobotics.com. Дата обращения: 12 декабря 2017. Архивировано 16 февраля 2011 года.
- ↑ nao – ROS Wiki. ROS.org. Open Robotics (28 октября 2013). Дата обращения: 12 июля 2014. Архивировано 21 июня 2010 года.
- ↑ Stanford Personal Robotics Program. personalrobotics.Stanford.edu. Дата обращения: 12 декабря 2017.
- ↑ Featured. Willow Garage (20 июня 2010). Дата обращения: 30 июля 2021. Архивировано 20 июня 2010 года.
- ↑ B. Hannaford, J. Rosen, Diana CW Friedman и др. 'Raven-II: AN Open Platform for Surgical Robotics Research,' IEEE Transactions on Biomedical Engineering, vol. 60, pp. 954—959, апрель 2013.
- ↑ BioRobotics Laboratory. Brl.ee.washington.edu. Дата обращения: 12 июля 2014. Архивировано 14 июля 2014 года.
- ↑ ROSbot 2.0 & ROSbot 2.0 PRO · Husarion Docs. husarion.com. Дата обращения: 30 июля 2021.
- ↑ Dexterous Hand Series – Shadow Robot Company. Дата обращения: 30 июля 2021. Архивировано 11 октября 2025 года.
- ↑ STAIR. stair.stanford.edu. Дата обращения: 30 июля 2021. Архивировано 24 апреля 2025 года.
- ↑ Hello Robot.
- ↑ This Robot Could Be The Key To Empowering People With Disabilities. Архивировано 24 августа 2025 года.
- ↑ Summit XL – Robotnik. Robotnik.es. Дата обращения: 12 июля 2014. Архивировано 19 августа 2014 года.
- ↑ Specification. Unbounded Robotics. Дата обращения: 8 апреля 2026. Архивировано 28 апреля 2015 года.
- ↑ Ackerman, Evan UBR-1 Robot From Unbounded Robotics Revolutionizes Affordable Mobile Manipulation. IEEE Spectrum (21 октября 2013). Дата обращения: 12 июля 2014. Архивировано 12 апреля 2024 года.
- ↑ Using ROS with Webots. Дата обращения: 18 мая 2018. Архивировано 9 июля 2025 года.
- ↑ Koen Buys (29 октября 2013). Дата обращения: 30 июля 2021. Архивировано 29 октября 2013 года.
- ↑ Ubiquity Robotics Downloads. Дата обращения: 29 января 2018.
- ↑ ROSberryPi/Installing ROS Kinetic on the Raspberry Pi. Дата обращения: 29 января 2018. Архивировано 23 августа 2025 года.
- ↑ Installing ROS 2 on Raspberry Pi: A Comprehensive Guide. Дата обращения: 24 января 2025. Архивировано 14 мая 2025 года.
- ↑ 5.3.6. ROS and Radar – Processor SDK Linux Documentation. software-dl.ti.com. Дата обращения: 1 мая 2020. Архивировано 17 мая 2021 года.