ROS — (Robot Operating System) Операционная система для роботов — это фреймворк для программирования роботов, предоставляющий функционал для распределённой работы. Первоначально, ROS был разработан в 2007 году под названием switchyard в Лаборатории Искусственного Интеллекта Стэнфордского Университета для проекта (STAIR).
В 2008 году развитие продолжается в Willow Garage, Калифорнийском научно-исследовательском стартапе/институте/инкубаторе робототехники, совместно с более чем двадцатью сотрудничающими институтами.
Что же такое ROS?
ROS — это мета-операционная система (с открытым исходным кодом) для роботов.
мета- — часть сложных слов, обозначающая обобщённость, обстрагированность, промежуточность.
ROS обеспечивает стандартные службы операционной системы:
аппаратную абстракцию,
низкоуровневый контроль устройств,
реализацию часто используемых функций,
передачу сообщений между процессами,
управление пакетами.
ROS, также предоставляет инструменты и библиотеки для получения, построения, написания и выполнения кода на нескольких компьютерах.
ROS имеет две основные «стороны»:
* сторона операционной системы ros,
* ros-pkg — набор поддерживаемых пользователями пакетов (организованных в наборы (Стеки)), которые реализуют различные функции робототехники: SLAM, планирование, восприятие, моделирование и др.
ROS основан на архитектуре графов, где обработка данных происходит в узлах, которые могут получать и передавать сообщения между собой.
В некотором смысле, ROS похож на «фреймворк для роботов», вроде:
Player,
YARP,
Orocos,
CARMEN,
Orca,
MOOS,
Microsoft Robotics Studio.
При работе ROS, строится «граф» — сеть точка-точка (peer-to-peer network) из процессов, которые связываются друг с другом через инфраструктуру ROS.
ROS реализует несколько различных стилей общения:
синхронное (в стиле RPC) общение сервисов,
асинхронные потоки данных через Темы (Topic),
хранение данных на Сервере Параметров (Parameter Server).
ROS не является системой реального времени, хотя ROS возможно интегрировать с кодом реального времени.
Робот PR2 от Willow Garage, использует систему, называемую pr2_etherCAT,
которая транслирует сообщения ROS в и из realtime-процесса. Также, ROS имеет полную интеграцию с Orocos Real-time Toolkit.
Цели ROS
Зачастую, может возникнуть вопрос: «Чем ROS отличается от X?», где X — какая-нибудь другая программная платформа для роботов.
Это сложный вопрос, так как перед ROS не ставилась цель быть платформой с большим количеством функций.
Основной задачей ROS является поддержка повторного использования кода в робототехнических исследованиях и разработке.
ROS представляет собой распределенную сеть процессов (Узлов — Nodes), что позволяет разрабатывать их индивидуально.
Эти процессы могут быть сгруппированы в Пакеты и Стеки (Packages and Stacks), которые можно легко распространять.
Также, ROS поддерживает федеративные системы репозиториев кода.
Такой дизайн, от уровня файловой системы на уровень сообществ, позволяет возможность независимо принимать решения о разработке и реализации, но все они могут быть объединены вместе, средствами инфраструктуры ROS.
Существует ещё несколько других целей в рамках ROS:
* Тонкий: ROS должен быть как можно тоньше — чтобы код, написанный для ROS мог быть использован и в других программных системах.
Следствием этого является то, что ROS легко интегрируется с другими системами программного обеспечения роботов: ROS уже интегрирован с OpenRAVE, Orocos и Player.
* Библиотеки: предпочтительной моделью развития является написание библиотек с чистым функциональным интерфейсом.
* Независимость от языка: структуру ROS легко реализовать на любом современном языке программирования. ROS уже реализован на: Python, C++, Lisp и экспериментальные библиотеки на Java и Lua.
* Простое тестирование: ROS имеет встроенный фреймворк для тестирования — rostest, что позволяет легко тестировать приложения.
* Масштабирование: ROS подходит для больших систем выполнения и для большого процесса разработки.
Таким образом, на вопрос: «Чем ROS отличается от X?» — трудно ответить на каждый Х. Но, если вы решите использовать X, вы всё же сможете использовать многие из библиотек, распространяемых вместе с ROS.
Если же учитывать специфику, то ниже приводится письмо Brian Gerkey (участник проектов Player и ROS) в рассылке ros-users относительно различий между ROS и Player (включая интеграцию OpenCV):
Ответ, как обычно, зависит от многого. В частности, это зависит от того, что вы пытаетесь сделать. Player отлично подходит для простых мобильных платформ. Он был разработан, чтобы обеспечить легкий доступ к датчикам и двигателям роботов Pioneer, оборудованных лазерным дальномером.С другой стороны, ROS, разрабатывается для комплекса мобильных платформ; с манипуляторами и самыми различными датчиками. По сравнению с Player, ROS легче использовать в распределенной вычислительной среде, и я бы сказал, что высокоуровневая сторона более развита в ROS, чем в Player. В то время, как Player предлагает больше драйверов оборудования, ROS предлагает больше реализаций алгоритмов.
Я думаю, что было бы справедливо сказать, что ROS является более мощной и гибкой системой, чем Player, но, как обычно, большая мощность и гибкость достигается за счет большей сложности. Хотя мы работаем над тем, чтобы ROS был прост в использовании, есть еще значительная кривая обучения. Конечно, знакомство с Player должны помочь в изучении использования ROS, так как многие основные концепции схожи.
Что касается вашего конкретного вопроса относительно интеграции OpenCV, я думаю, что вы найдете больше ROS-кода, чем Player-кода, который использует OpenCV интересными способами. В будущем, вы должны ожидать увидеть даже больше, так как существует значительное перекрытие между командами-разработчиками ROS и OpenCV.
Должен отметить, что ROS использует много кода из проекта Player. Есть узлы ROS, в которых используется код из драйверов Player, и оба Stage и Gazebo хорошо поддерживается и широко используется в ROS-сообществе.
Операционные системы
В настоящее время, ROS работает только на Unix-платформах. Программное обеспечение для ROS, прежде всего проверено на Ubuntu и Mac OS X, хотя ROS-сообщество вносит свой вклад в поддержку Fedora, Gentoo, Arch Linux и других платформ Linux (считаются «экспериментальными»).
Портирование ROS на Microsoft Windows возможно, но ещё не полностью реализовано.
Лицензия
ROS выпускается в соответствии с условиями BSD-лицензии и c открытым исходным кодом. ROS бесплатен для использования, как в исследовательских, так и в коммерческих целях. Пакеты из ros-pkg распространяются на условиях различных открытых лицензий.
Поддерживаемые роботы
* PR2
* TurtleBot
* PR1
* HERB
* STAIR I и II
* Nao
* Husky A200
* iRobot Create
* Lego Mindstorms NXT
* Robotino
* и многие другие
Далее: Что же такое ROS?
Ссылки
www.ros.org
www.willowgarage.com
ROS Introduction
Концепции ROS
Начальные руководства (на русском)
Morgan Quigley, Eric Berger, Andrew Y. Ng «STAIR: Hardware and Software Architecture»
Morgan Quigley, Brian Gerkey, Ken Conley, Josh Faust, Tully Foote, Jeremy Leibs, Eric Berger, Rob Wheeler, Andrew Ng «ROS: an open-source Robot Operating System»
По теме
Робософт — обзор существующих решений
Дистрибутивы ROS
Установка ROS (Electric)