Операционная система робота ( ROS или ros ) — это набор промежуточного программного обеспечения с открытым исходным кодом для робототехники . Хотя ROS не является операционной системой (ОС), а представляет собой набор программных фреймворков для разработки программного обеспечения роботов , она предоставляет службы, разработанные для гетерогенного компьютерного кластера, такие как абстракция оборудования , низкоуровневое управление устройствами , реализация часто используемых функций, передача сообщений между процессами и управление пакетами . Запуск наборов процессов на основе ROS представлен в графовой архитектуре, где обработка происходит в узлах, которые могут получать, отправлять и мультиплексировать данные датчиков, управлять, состоянием, планированием, исполнительными механизмами и другими сообщениями. Несмотря на важность реактивности и низкой задержки в управлении роботом, ROS не является операционной системой реального времени (RTOS). Однако возможно интегрировать ROS с вычислительным кодом реального времени . [3] Проблема отсутствия поддержки систем реального времени была решена при создании ROS 2, [4] [5] [6] существенной переработки API ROS, которая будет использовать преимущества современных библиотек и технологий для основных функций ROS и добавит поддержку кода реального времени и встроенного системного оборудования.
Программное обеспечение в экосистеме ROS [7] можно разделить на три группы:
Как независимые от языка инструменты, так и основные клиентские библиотеки ( C++ , Python и Lisp ) выпускаются на условиях лицензии BSD и, как таковые, являются программным обеспечением с открытым исходным кодом и бесплатны как для коммерческого, так и для исследовательского использования. Большинство других пакетов лицензируются в соответствии с различными лицензиями с открытым исходным кодом . Эти другие пакеты реализуют часто используемые функции и приложения, такие как драйверы оборудования, модели роботов, типы данных, планирование, восприятие , одновременная локализация и отображение (SLAM), инструменты моделирования и другие алгоритмы .
Основные клиентские библиотеки ROS ориентированы на Unix-подобную систему, в основном из-за их зависимости от больших наборов зависимостей программного обеспечения с открытым исходным кодом. Для этих клиентских библиотек Ubuntu Linux указан как «Поддерживаемый», в то время как другие варианты, такие как Fedora Linux , macOS и Microsoft Windows , обозначены как «Экспериментальные» и поддерживаются сообществом. [12] Собственная клиентская библиотека Java ROS, rosjava, [13] однако, не разделяет эти ограничения и позволила писать программное обеспечение на основе ROS для ОС Android . [14] rosjava также позволила интегрировать ROS в официально поддерживаемый набор инструментов MATLAB , который можно использовать в Linux , macOS и Microsoft Windows. [15] Также была разработана клиентская библиотека JavaScript , roslibjs [16] , которая позволяет интегрировать программное обеспечение в систему ROS через любой веб-браузер, соответствующий стандартам.
Где-то до 2007 года первые части того, что в конечном итоге станет ROS, начали объединяться в Стэнфордском университете . [17] [18] Эрик Бергер и Кинан Вайробек, аспиранты, работающие в лаборатории робототехники Кеннета Солсбери [19] в Стэнфорде, возглавляли Программу персональной робототехники. [20] Работая над роботами, которые будут выполнять задачи по манипуляции в человеческой среде, два студента заметили, что многих их коллег сдерживает разнообразная природа робототехники: отличный разработчик программного обеспечения может не обладать необходимыми знаниями в области оборудования, кто-то, разрабатывающий современное планирование пути, может не знать, как реализовать необходимое компьютерное зрение. В попытке исправить эту ситуацию два студента решили создать базовую систему, которая стала бы отправной точкой для других в академической среде, чтобы строить на ней. По словам Эрика Бергера, «что-то, что не отстойно во всех этих различных измерениях». [17]
В своих первых шагах к этой объединяющей системе они построили PR1 как прототип оборудования и начали работать над его программным обеспечением, заимствуя лучшие практики из других ранних фреймворков программного обеспечения для роботов с открытым исходным кодом, в частности, switchyard, системы, над которой Морган Куигли, другой аспирант Стэнфорда, работал в поддержку робота с искусственным интеллектом STanford (STAIR) [21] [22] [23] [24] в Лаборатории искусственного интеллекта Стэнфорда . Раннее финансирование в размере 50 000 долларов США было предоставлено Джоанной Хоффман и Аленом Россманном , которые поддержали разработку PR1. В поисках финансирования для дальнейшей разработки [25] Эрик Бергер и Кинан Виробек встретились со Скоттом Хассаном, основателем Willow Garage , технологического инкубатора , который работал над автономным внедорожником и автономной солнечной лодкой. Хассан разделял видение Бергера и Виробека о «Linux для робототехники» и пригласил их поработать в Willow Garage. Willow Garage был запущен в январе 2007 года, а первая публикация кода ROS на SourceForge была сделана 7 ноября 2007 года. [26]
Willow Garage начала разрабатывать робота PR2 как продолжение PR1, а ROS — как программное обеспечение для его работы. Группы из более чем двадцати учреждений внесли вклад в ROS, как в основное программное обеспечение, так и в растущее число пакетов, которые работали с ROS, формируя большую экосистему программного обеспечения. [27] [28] То, что люди за пределами Willow вносили вклад в ROS (особенно из проекта STAIR Стэнфорда), означало, что ROS с самого начала была платформой для нескольких роботов. Хотя изначально у Willow Garage были другие проекты в работе, они были отменены в пользу Программы персональной робототехники: сосредоточенной на создании PR2 как исследовательской платформы для академических кругов и ROS как стека робототехники с открытым исходным кодом, который будет лежать в основе как академических исследований, так и технологических стартапов, во многом подобно тому, как стек LAMP делал это для веб-стартапов.
В декабре 2008 года Willow Garage достигла первой из трех внутренних вех: непрерывной навигации для PR2 в течение двух дней и на расстоянии пи километров. [29] Вскоре после этого была выпущена ранняя версия ROS (0.4 Mango Tango) [30] , за которой последовали первая документация RVIZ и первая статья о ROS. [28] В начале лета была достигнута вторая внутренняя веха: PR2 научился перемещаться по офису, открывать двери и подключаться к сети. [31] За этим в августе последовало открытие веб-сайта ROS.org. [32] Ранние руководства по ROS были опубликованы в декабре, [33] готовясь к выпуску ROS 1.0 в январе 2010 года. [34] Это была третья веха: создание тонн документации и руководств по колоссальным возможностям, которые инженеры Willow Garage разработали за предыдущие 3 года.
После этого Willow Garage достиг одной из своих самых давних целей: раздать 10 роботов PR2 достойным академическим учреждениям. Это давно было целью основателей, поскольку они чувствовали, что PR2 может дать толчок исследованиям в области робототехники по всему миру. В итоге они наградили одиннадцатью PR2 различные учреждения, включая Фрайбургский университет (Германия), Robert Bosch GmbH , Технологический институт Джорджии , Лёвенский католический университет (Бельгия), Массачусетский технологический институт (MIT), Стэнфордский университет , Мюнхенский технический университет (Германия), Калифорнийский университет в Беркли , Пенсильванский университет , Университет Южной Калифорнии (USC) и Токийский университет (Япония). [35] Это, в сочетании с весьма успешной программой стажировок Willow Garage [36] (проводимой с 2008 по 2010 год Мелони Уайз), помогло распространить информацию о ROS по всему миру робототехники. Первый официальный релиз дистрибутива ROS: ROS Box Turtle, был выпущен 2 марта 2010 года, что стало первым случаем, когда ROS был официально распространен с набором версионных пакетов для публичного использования. Эти разработки привели к появлению первого дрона, работающего под управлением ROS, [37] первого автономного автомобиля, работающего под управлением ROS, [38] и адаптации ROS для Lego Mindstorms . [39] С началом программы PR2 Beta робот PR2 был официально выпущен для коммерческой покупки 9 сентября 2010 года. [40]
2011 год стал знаменательным для ROS с запуском ROS Answers, форума вопросов и ответов для пользователей ROS, 15 февраля; [41] представлением крайне успешного набора для робототехники TurtleBot 18 апреля; [42] а общее число репозиториев ROS превысило 100 5 мая. [43] Willow Garage начала 2012 год с создания Open Source Robotics Foundation (OSRF) [44] в апреле. OSRF немедленно получила контракт на программное обеспечение от Агентства перспективных исследовательских проектов Министерства обороны США (DARPA). [45] Позже в том же году в Сент-Поле, штат Миннесота, прошла первая конференция ROSCon, [46] была опубликована первая книга о ROS, ROS By Example [47] , а компания Rethink Robotics анонсировала Baxter , первого коммерческого робота, работающего под управлением ROS . [48] Вскоре после того, как в ноябре исполнилось пять лет, ROS начал работать на всех континентах 3 декабря 2012 года. [49]
В феврале 2013 года OSRF стала основным разработчиком программного обеспечения для ROS, [50] предвосхищая объявление в августе о том, что Willow Garage будет поглощена ее основателями, Suitable Technologies. [51] К этому моменту ROS выпустила семь основных версий (вплоть до ROS Groovy), [52] и имела пользователей по всему миру. Эта глава разработки ROS была завершена, когда Clearpath Robotics взяла на себя обязанности по поддержке PR2 в начале 2014 года. [53]
За годы, прошедшие с тех пор, как OSRF взяла на себя основную разработку ROS, новая версия выпускалась каждый год, [52] в то время как интерес к ROS продолжает расти. ROSCons проводятся каждый год с 2012 года, совместно с ICRA или IROS , двумя флагманскими конференциями по робототехнике. Встречи разработчиков ROS были организованы в разных странах, [54] [55] [56] было опубликовано несколько книг по ROS, [57] и инициировано множество образовательных программ. [58] [59] 1 сентября 2014 года NASA объявило о первом роботе, который будет запускать ROS в космосе: Robotnaut 2 на Международной космической станции . [60] В 2017 году OSRF изменила свое название на Open Robotics . В это время технологические гиганты Amazon и Microsoft начали проявлять интерес к ROS, причем Microsoft перенесла ядро ROS на Windows в сентябре 2018 года [61] , а затем Amazon Web Services выпустила RoboMaker в ноябре 2018 года [62].
Возможно, наиболее важным достижением OSRF/Open Robotics за годы существования (не сбрасывая со счетов взрывной рост числа робототехнических платформ, которые начали поддерживать ROS, или огромные улучшения в каждой версии ROS) стало предложение ROS 2, значительное изменение API для ROS, которое призвано поддерживать программирование в реальном времени , более широкий спектр вычислительных сред и более современные технологии. [63] ROS 2 был анонсирован на ROSCon 2014, [64] первые изменения в репозитории ros2 были сделаны в феврале 2015 года, за которыми последовали альфа-релизы в августе 2015 года. [65] Первый дистрибутивный выпуск ROS 2, Ardent Apalone, был выпущен 8 декабря 2017 года, [65] открыв новую эру разработки ROS следующего поколения.
ROS был разработан как открытый исходный код, подразумевая, что пользователи смогут выбирать конфигурацию инструментов и библиотек, которые взаимодействуют с ядром ROS, чтобы пользователи могли изменять свои программные стеки в соответствии со своим роботом и областью применения. Таким образом, в ROS очень мало того, что является ядром, помимо общей структуры, в которой программы должны существовать и общаться. В каком-то смысле ROS является базовой инфраструктурой, стоящей за узлами и передачей сообщений. Однако на самом деле ROS — это не только эта инфраструктура, но и богатый и зрелый набор инструментов, широкий набор возможностей, не зависящих от робота, предоставляемых пакетами, и большая экосистема дополнений к ROS.
Процессы ROS представлены в виде узлов в графовой структуре, соединенных ребрами, называемыми темами. [66] Узлы ROS могут передавать сообщения друг другу через темы, выполнять вызовы служб другим узлам, предоставлять услуги другим узлам или устанавливать или извлекать общие данные из общей базы данных, называемой сервером параметров. Процесс, называемый ROS Master [66], делает все это возможным, регистрируя узлы на себе, настраивая связь между узлами для тем и управляя обновлениями сервера параметров. Сообщения и вызовы служб не проходят через мастер, вместо этого мастер устанавливает одноранговую связь между всеми процессами узлов после того, как они регистрируются у мастера. Эта децентрализованная архитектура хорошо подходит для роботов, которые часто состоят из подмножества сетевого компьютерного оборудования и могут взаимодействовать с внешними компьютерами для тяжелых вычислений или команд.
Узел представляет собой один процесс, запускающий граф ROS. Каждый узел имеет имя, которое он регистрирует в главном узле ROS, прежде чем сможет предпринять какие-либо другие действия. Несколько узлов с разными именами могут существовать в разных пространствах имен , или узел может быть определен как анонимный, в этом случае он будет случайным образом генерировать дополнительный идентификатор для добавления к своему данному имени. Узлы находятся в центре программирования ROS, поскольку большая часть клиентского кода ROS находится в форме узла ROS, который выполняет действия на основе информации, полученной от других узлов, отправляет информацию другим узлам или отправляет и получает запросы на действия от других узлов.
Темы — это именованные шины , по которым узлы отправляют и получают сообщения. [67] Имена тем также должны быть уникальными в пределах их пространства имен. Чтобы отправлять сообщения в тему, узел должен публиковаться в этой теме, а чтобы получать сообщения, он должен подписаться. Модель публикации/подписки анонимна: ни один узел не знает, какие узлы отправляют или получают сообщения по теме, известно только, что он отправляет/получает сообщения по этой теме. Типы сообщений, передаваемых по теме, сильно различаются и могут определяться пользователем. Содержимым этих сообщений могут быть данные датчиков, команды управления двигателем, информация о состоянии, команды привода или что-либо еще.
Узел также может рекламировать услуги. [68] Услуга представляет собой действие, которое может выполнить узел, и которое будет иметь один результат. Таким образом, услуги часто используются для действий, которые имеют определенное начало и конец, например, захват однокадрового изображения, а не обработка команд скорости для двигателя колеса или данных одометра от кодировщика колеса. Узлы рекламируют услуги и вызывают услуги друг у друга.
Сервер параметров [68] — это база данных, совместно используемая узлами, которая обеспечивает общий доступ к статической или полустатической информации. Данные, которые не меняются часто и, как таковые, будут нечасто использоваться, такие как расстояние между двумя фиксированными точками в среде или вес робота, являются хорошими кандидатами для хранения на сервере параметров.
Основная функциональность ROS дополнена различными инструментами, которые позволяют разработчикам визуализировать и записывать данные, легко перемещаться по структурам пакетов ROS и создавать скрипты, автоматизирующие сложные процессы конфигурации и настройки. Добавление этих инструментов значительно увеличивает возможности систем, использующих ROS, упрощая и предоставляя решения для ряда распространенных проблем разработки робототехники. Эти инструменты предоставляются в пакетах, как и любой другой алгоритм, но вместо того, чтобы предоставлять реализации драйверов оборудования или алгоритмов для различных роботизированных задач, эти пакеты предоставляют независимые от задач и роботов инструменты, которые поставляются с ядром большинства современных установок ROS.
rviz [69] (инструмент визуализации роботов) — трехмерный визуализатор, используемый для визуализации роботов, сред, в которых они работают, и данных датчиков. Это высоконастраиваемый инструмент с множеством различных типов визуализаций и плагинов. Унифицированный формат описания роботов ( URDF ) — это формат файла XML для описания модели робота.
rosbag [70] — это инструмент командной строки, используемый для записи и воспроизведения данных сообщений ROS. rosbag использует формат файла, называемый bags, [71], который регистрирует сообщения ROS, прослушивая темы и записывая сообщения по мере их поступления. Воспроизведение сообщений из bag во многом аналогично наличию исходных узлов, которые произвели данные в вычислительном графике ROS, что делает bags полезным инструментом для записи данных, которые будут использоваться в дальнейшей разработке. В то время как rosbag — это инструмент только командной строки, rqt_bag [72] предоставляет графический интерфейс для rosbag.
catkin [73] — это система сборки ROS, заменившая rosbuild [74] в ROS Groovy. catkin основана на CMake и также является кроссплатформенной, с открытым исходным кодом и не зависит от языка.
Пакет rosbash [75] предоставляет набор инструментов, которые расширяют функциональность оболочки bash . Эти инструменты включают rosls, roscd и roscp, которые копируют функциональность ls , cd и cp соответственно. Версии этих инструментов для ROS позволяют пользователям использовать имена пакетов ros вместо пути к файлу, в котором находится пакет. Пакет также добавляет автодополнение клавишей Tab к большинству утилит ROS и включает rosed, который редактирует заданный файл с помощью выбранного текстового редактора по умолчанию, а также rosrun, который запускает исполняемые файлы в пакетах ROS. rosbash поддерживает те же функции для zsh и tcsh , в меньшей степени.
roslaunch [76] — это инструмент, используемый для запуска нескольких узлов ROS как локально, так и удаленно, а также для настройки параметров на сервере параметров ROS. Файлы конфигурации roslaunch, написанные с использованием XML, могут легко автоматизировать сложный процесс запуска и настройки в одну команду. Скрипты roslaunch могут включать другие скрипты roslaunch, запускать узлы на определенных машинах и даже перезапускать процессы, которые завершаются во время выполнения.
ROS содержит множество реализаций с открытым исходным кодом общих функций и алгоритмов робототехники. Эти реализации с открытым исходным кодом организованы в пакеты. Многие пакеты включены как часть дистрибутивов ROS, в то время как другие могут быть разработаны отдельными лицами и распространены через сайты обмена кодом, такие как github. Некоторые пакеты, заслуживающие внимания, включают:
Выпуски ROS могут быть несовместимы с другими выпусками и часто упоминаются по кодовому имени, а не по номеру версии. В настоящее время ROS выпускает версию каждый год в мае, после выпуска версий Ubuntu LTS. [92] В настоящее время ROS 2 выпускает новую версию каждые шесть месяцев (в декабре и июле). Эти выпуски поддерживаются в течение одного года. В настоящее время существуют две активные основные версии, которые выходят в релизах: ROS 1 и ROS 2. Помимо этого, существует проект ROS-Industrial или ROS-I, который существует по крайней мере с 2012 года.
ROS-Industrial [108] — проект с открытым исходным кодом (лицензия BSD (устаревшая)/Apache 2.0 (предпочтительная)), который расширяет расширенные возможности ROS для автоматизации производства и робототехники. В промышленной среде существует два разных подхода к программированию робота: либо через внешний фирменный контроллер, обычно реализуемый с использованием ROS, либо через соответствующий собственный язык программирования робота. Поэтому ROS можно рассматривать как программный подход к программированию промышленных роботов вместо классического подхода на основе контроллера робота.
Репозиторий ROS-Industrial включает интерфейсы для обычных промышленных манипуляторов, захватов, датчиков и сетей устройств. Он также предоставляет библиотеки программного обеспечения для автоматической калибровки 2D/3D-датчиков, планирования пути процесса/движения, приложений, таких как Scan-N-Plan, инструментов разработчика, таких как плагин Qt Creator ROS, и учебной программы, которая соответствует потребностям производителей. ROS-I поддерживается международным консорциумом промышленных и исследовательских членов. Проект начался как совместная работа Yaskawa Motoman Robotics, Southwest Research Institute и Willow Garage по поддержке использования ROS для автоматизации производства, а репозиторий GitHub был основан в январе 2012 года Шоном Эдвардсом (SwRI). В настоящее время консорциум разделен на три группы: ROS-Industrial Consortium Americas (возглавляемый SwRI и расположенный в Сан-Антонио, Техас), ROS-Industrial Consortium Europe (возглавляемый Fraunhofer IPA и расположенный в Штутгарте, Германия) и ROS-Industrial Consortium Asia Pacific (возглавляемый Advanced Remanufacturing and Technology Centre (ARTC) и Nanyang Technological University (NTU) и расположенный в Сингапуре).
Консорциумы поддерживают мировое сообщество ROS-Industrial, проводя обучение ROS-I, предоставляя техническую поддержку и устанавливая будущую дорожную карту для ROS-I, а также реализуя предконкурентные совместные отраслевые проекты для разработки новых возможностей ROS-I. [109]
В ноябре 2020 года NASA объявило, что Blue Origin была выбрана в рамках объявления Директората космических технологий о возможности сотрудничества (ACO) для совместной разработки операционной системы космических роботов (Space ROS) совместно с тремя центрами NASA [110] . Целью Space ROS является предоставление многоразовой и модульной программной среды для роботизированных и автономных космических систем на основе ROS 2, которая соответствует требованиям аэрокосмических миссий и обеспечения безопасности (таким как NPR 7150.2 и DO-178C). Проект был разработан и возглавлен Уиллом Чемберсом [111] , главным технологом Blue Origin по робототехнике в то время. В 2021 году Blue Origin передала разработку программного обеспечения на субподряд Open Robotics, которая оставалась в команде до окончания программы в 2022 году. В настоящее время Space ROS является открытым общественным проектом. [112] [113] PickNik Robotics и Open Source Robotics Foundation в настоящее время возглавляют работу над Space ROS. [114]