Основы работы с Robotic Operating System / Habr
Введение
Доброго всем времени суток!
Осваивая в очередной раз просторы Хабра, заметил, что здесь практически нет информации о Robotic Operating System (далее просто ROS). Поспешу исправить эту оплошность и популяризовать замечательный продукт.
Что же это такое? ROS представляет собой надстройку над ОС, которая позволяет легко и просто разрабатывать системы управления роботами. Что это означает и как с этим потом жить — и призвана рассказать серия топиков.
По сути, ROS — это набор из различных широко (и неочень) известных библиотек, таких как:
- OpenCV — библиотека, содержащая алгоритмы компьютерного зрения и обработки изображений;
- PCL- библиотека для работы с облаками 3D-точек;
- Ogre — объектно-ориентированный графический движок с открытым исходным кодом;
- Orocos — библиотека для управления роботами (например, расчет кинематики).
Чтобы начать пользоваться ROS, придется все же начать с установки. Сам же план работ выглядит примерно так:
- Установка, основные концепции
- Создаем свой пакет, знакомимся с сообщениями, простая программа
- Сервисы и параметры
Развертывание
Сегодня ROS стабильно устанавливается и работает только на Ubuntu версии от 10 и выше, на примере Natty все тонкости этого процесса и рассмотрим.
Итак, шаг первый — настройка репозиториев. Нам нужно разблокировать «restricted,» «universe,» and «multiverse» компоненты, для этого в файле /etc/apt/sources.list необходимо раскомментировать следующие строчки:
deb-src http://security.ubuntu.com/ubuntu natty-security main restricted
deb http://security.ubuntu.com/ubuntu natty-security universe
deb-src http://security.ubuntu.com/ubuntu natty-security universe
deb http://security.ubuntu.com/ubuntu natty-security multiverse
deb-src http://security.ubuntu.com/ubuntu natty-security multiverse
Затем надо добавить репозиторий для установки и обновлений:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu natty main" > /etc/apt/sources.list.d/ros-latest.list'
Следующий этап — установка цифровой подписи. Здесь все тоже достаточно тривиально:
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
После этого обновимся:
sudo apt-get update
и попробуем установить сам метапакет ROS. Существует 4 установочных пакета, различающихся объемом предоставляемых модулей. Я воспользуюсь наиболее полным:
sudo apt-get install ros-electric-desktop-full
После того, как процесс скачивания и развертывания всяких штуковин закончиться, в директории /opt вы должны увидеть папку ros.
Последний шаг — обновление переменных окружения:
source /opt/ros/electric/setup.bash
С этого момента ROS к
roscore
Это запустит master-процесс, с которого ROS, собственно, и начинает работу.
В другом напишите
rosrun turtlesim turtlesim_node
И не забудьте сначала в каждом терминале проиниализировать переменные окружения!
source /opt/ros/electric/setup.bash
Если перед вами появилась симпатичная черепашка, то значит все нормально. Не закрывайте это окно, оно еще нам пригодится. Чтобы было не так скучно, откройте новый терминал и введите следующее:
rosrun turtlesim turtle_teleop_key
Из этого терминала теперь можно поуправлять рептилией.
Процесс установки на других ОС не намного сложнее, но, к сожалению, гораздо менее стабильный (на Fedora 15, например, мне завести так и не удалось). Можно только порекомендовать писать баг-репорты, публиковать патчи и будем всем счастье.
Основные понятия
Начнем с рассмотрения базовых концепций файловой системы (ФС) ROS.
Пакетом (package) называется наименьшая единица ФС. Представляет собой директорию, содержащую в себе какие-либо данные, библиотеки, исполняемые и конфигурационные файлы и т.д. и т.п., логически объединенные в какой-то полезный модуль. Цель такого структурирования совершенно прозрачна — повышение юзабилити и возможности повторного использования.
Структура пакета выглядит следующим образом:
- bin/: скомпилированные бинарники
- msg/: типы сообщений
- src/package_name/: исходный код на С++ и скрипты на Python’е, экспортируемые в другие пакеты
- srv/: типы сервисов, предоставляемых пакетом
- scripts/: скрипты на Python’е
- CMakeLists.txt: CMake файл для сборки пакета
- manifest.xml: манифест пакета
- mainpage.dox: Doxygen-документация
В свою очередь, пакеты объединяются в стэки. На картинке вы можете увидеть пример такой структуры.
Как видите, ROS обладает довольно сложной файловой системой и для того, чтобы не забивать себе голову длиннющими путями к различным директориям, пользователям предоставляют ряд утилит.
rospack find [pack_name] — выдает полный путь до директории с пакетом
crady@cradyLap:~$ rospack find rviz
/opt/ros/electric/stacks/visualization/rviz
rosstack find [pack_name] — тоже самое, но уже для стэка
crady@cradyLap:~$ rosstack find navigation
/opt/ros/electric/stacks/navigation
Это, так сказать, статика. Динамика в ROS описывается узлами(node) и шинами(topic).
Узел — это запущенный процесс, который умеет общаться с другими процессами.
Шина — именованный канал, соединяющая различные узлы.
Узлы и шины формируют асинхронный механизм обмена данными. Если у вас еще открыто окно с черепашкой, то вы это сейчас сможете еще и увидеть. Если закрыто — то где-то выше написано, как все вернуть на место.
Откройте третий терминал и введите команду
rxgraph
В новом окне вы увидете, какие узлы сейчас активны и через какие шины они между собой общаются. Если же вы хотите еще и послушать, чего это они там обсуждают, то вам понадобиться следующая команда:
rostopic echo /turtle1/command_velocity
Подвигайте черепаху и увидете, как в шине /turtle1/command_velocity появляются команды.
Заключение
На этом, пожалуй, на сегодня все. Впереди еще сервисы, параметры, детальные объяснения сообщений и шин, а сейчас же самое время наградить одолевших основы ROS бутылочкой холодного-того-самого. )
Полезные ссылки:
- www.ros.org/wiki — штаб-квартира пользователей и разрабочиков
- answers.ros.org/questions — коллективный разум поможет вам с любыми проблемами (но, все же, не выходящими за пределы ROS)
habr.com
Robot Operating System / Робософт / RoboCraft. Роботы? Это просто!
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), что позволяет разрабатывать их индивидуально.
Также, 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)
robocraft.ru
Что такое ROS · Введение в ROS
Robot Operating System (ROS)
Robot Operating System (ROS) — это гибкая платформа (фреймворк) для разработки программного обеспечения роботов. Это набор разнообразных инструментов, библиотек и определенных правил, целью которых является упрощение задач разработки ПО роботов.
Создание действительно надежного, универсального программного обеспечения для роботов чрезвычайно сложная задача. С точки зрения робота, проблемы, которые кажутся тривиальными для людей, часто требуют очень сложных технических решений. Часто разработка такого решения не под силу одному человеку.
ROS была создана чтобы стимулировать совместную разработку программного обеспечения робототехники. Каждая отдельная команда может работать над одной конкретной задачей, но использование единой платформы, позволяет всему сообществу получить и использовать результат работы этой команды для своих проектов.
Платформы (фреймворки) в робототехнике
В последнее время, в области робототехники особое внимание уделяется платформам. Понятие платформа обычно резделяют на программную платформу и аппаратную платформу. Программная платформа для роботов включает в себя набор инструментов, которые используются для разработки ПО роботов. Можно выделить типовые, задачи программной платформы: работа с низкоуровневыми устройствами, аппаратная абстракция и коммуникация, навигация, распознавание образов, управление и установка пакетов и зависимостей, подключение библиотек, инструменты для отладки и разработки.
Аппаратные платформы, включают в себя готовые исследовательские и образовательные устройства (TurtleBot, TurtleBro). А также готовые промышленные системы.
Важно отметить, что аппаратные платформы совместимы с программными платформами, что позволяет разрабатывать прикладные программы не имея опыта работы с оборудованием и не тратя время на его разработку. Совместимость интерфейсов и методов взаимодействия с оборудование, позволило огромному количеству разработчиков ПО внести свой вклад в развитие робототехники.
Унифицированные интерфейсы и методы работы с устройствами позволяют накапливать и обмениваться готовыми решениями всему сообществу заинтересованных людей в робототехнике.
Наиболее активные платформы
MSRDS10 | Microsoft Robotics Developer Studio, Microsoft — U.S. |
---|---|
ERSP11 | Evolution Robotics Software Platform, Evolution Robotics — Europe |
ROS | Robot Operating System, Open Robotics12 — U.S. |
OpenRTM | National Institute of Adv. Industrial Science and Technology (AIST) — Japan |
OROCOS | Europe |
OPRoS | ETRI, KIST, KITECH, Kangwon National University — South Korea |
Почему стоит начать с ROS
В данные момент для целей изучения и погружения в робототехнику, можно однозначно рекомендовать ROS. Важными критериями на этапе погружения в робототехнику, являются: активность сообщества, наличие различных библиотек, расширяемость и простота использования. По этим критериям в данный момент равных ROS нет.
Следует особо отметить, что сообщество ROS чрезвычайно активно. Когда вы сталкиваетесь с проблемой, найти решение и получить помощь становиться проще, не только от разработчика ROS (компании Open Robotics), но и от других энтузиастов и профессионалов.
Что дает готовая платформа
- Повторное использование программных модулей. Разработанный программный модуль, легко запускается и переиспользуется в любом другом приложении. Вопросы установки зависимостей и других библиотек хорошо проработан и автоматизирован.
- Готовый протокол коммуникации Основная проблема комплексных робототехнических систем, это решение задач коммуникации в рамках одного приложения. Для решения этих задач ROS содержит все необходимые утилиты. Любой программных модуль может быть представлен как отдельный процесс, взаимодействующий с другими процессами по сетевому протоколу. Такой подход позволяет создавать независимые и простые в повторном использовании программные модули, которые возможно запустить/остановить/модифицировать на любом устройстве.
- Развитость средств разработки и отладки ROS предоставляет готовые инструменты для отладки, инструмент 2D-визуализации (rqt), и инструмент 3D-визуализации (RViz), инстумент 3D симуляции (Gazebo).
- Активное и открытое сообщество Сообщества разработчиков робототехники из академического мира и промышленности, были относительно закрытыми до последнего времени. Но сейчас мы видим активное, и главное открытое сотрудничество всех участников. В центре этого изменения — программная платформа с открытым исходным кодом. В случае ROS существует более 5000 пакетов, которые были разработаны и выложены в общий доступ. Описание этих пакетов, инструкций и другой полезной информации — превышает 18 000 Wiki страниц.
- Собственная экосистема Вокруг ROS сформирована собственная экосистема (по аналогии с платформами Android и Apple). В ней существуют разработчики аппаратных платформ, разработчики программных модулей, энтузиасты и компании производители промышленного оборудования, единое место распространения и хранения готовых модулей, тысячи станиц документации. Все участники взаимодействуют и работают в рамках единой платформы.
Что такое ROS
ROS (Robot Operating System) обеспечивает разработчиков библиотеками и инструментами для создания приложений робототехники. ROS обеспечивает аппаратную абстракцию, предлагает драйверы устройств, библиотеки, визуализаторы, обмен сообщениями, менеджеры пакетов и многое другое. ROS выпускается в соответствии с условиями BSD лицензии и с открытым исходным кодом.
www.ros.org
Аббревиатура ОС, обычно обозначает Операционная Система общего назначения (linux, windows, iOS). Можно ли при этом называть ROS операционной системой для роботов? Это не совсем верно. Более точно описать ROS можно определением мета-операционная система.
Мета-операционная система не похожа на обычную операционная систему, такие как Windows, Linux и Android. ROS работает «поверх» существующей операционной системы. Для работы ROS необходима базовая операционная система Linux (например дистрибутив Ubuntu). После завершения установки ROS на OC Linux можно использовать функции, предоставляемые обычной операционной системой. В дополнение к основным функциям, предоставляемым Linux, ROS обеспечивает дополнительный функционал, необходимый для роботов. Например: работа с библиотеками, передача / прием данных для разных устройств, планирование и обработка ошибок. Этот тип программного обеспечения также называется промежуточным программным обеспечением (middleware ) или программным фреймворком.
docs.voltbro.ru
Что же такое ROS? / Робософт / RoboCraft. Роботы? Это просто!
Перед самым новым годом, я выложил перевод последнего урока из серии руководств ROS начального уровня.
Честно говоря, при начальном знакомстве с ROS (и даже после прохождения всех этих начальных уроков) было вообще ничего не понятно, и только по прошествии времени, стала вырисовываться картинка это замечательной системы.
Похоже, здесь играет роль та кривая обучения, про которую писал Brian Gerkey в своём письме, в котором сравнивал ROS и Player.вариант кривой обучения для игры Dwarf Fortress:
Разработчики ROS позиционируют свою систему, как операционную систему для роботов (Robot Operating System) и не зря.
Дело в том, что ситуации в робототехнике напоминает историю развития ПК: для разных роботов — разные несовместимые системы.
Обычно, при разработке робота вам приходится реализовывать:
— свою архитектуру
– свой протокол обмена сообщениями
– свою систему логирования
– свою систему перехода в разные системы координат
– свой драйвер джойстика/пульта управления
– свою логику навигации
– свою систему технического зрения
И даже, если вы сможете использовать различные готовые библиотеки для этих задач, то всё равно перед вами встанет серьёзная проблема — объединить их в единую систему робота.
Вспомним экосистему ПК, состоящую из стандартных слоёв:
* железо (материнская плата, процессор, жёсткий диск и т.д.)
* операционная система (скрывает от пользователя работу с железом ПК, предоставляет API для программ)
* библиотеки и приложения пользователя
и спроецируем её на робота:
* железо робота (компьютер, контроллеры, датчики, актуаторы)
* операционная система (ROS) — скрывает непосредственную работу с «железом» робота, предоставляя единый интерфейс (API) для взаимодействия с ним.
* приложения для управления роботом.
Однако, было бы странно — не использовать возможности существующих операционных систем, поэтому ROS работает под уже готовой OC (Ubuntu Linux), в которой реализует свой дополнительный слой абстрации — для управления роботами.
Таким образом, для программ взаимодействия и управления роботом, ROS играет роль «операционной системы», предоставляя программам управления свои интерфейсы, библиотеки и готовые приложения.
Для ROS, уже реализованы драйвера, позволяющие единым образом работать со многими устройствами:
— джойстиками
— GPS
— камерами
— контроллерами
— лазерными дальномерами
и т.п.
Так же, ROS уже содержит вспомогательные библиотеки и приложения для роботов:
— преобразование систем координат
— утилиты для визуализации данных
— систему для отладки (логирования)
— SLAM
— стек навигации
— распознавание объектов
— планирование движения манипулятора
и многое другое.
Т.о., для типовых задач робототехники, уже можно использовать готовые модули (пакеты и стеки), дописывая только необходимый функционал.
Главный принцип ROS: «не изобретать велосипед» («don’t reinvent the wheel»)!
Сами разработчики ROS так же следуют этому принципу, стараясь использовать готовые открытые библиотеки и инструменты:
boost, OGRE, Player, OpenCV…
СMake, Python, gcc, wxWidgets…
игровой движок OGRE используется в визуализаторе rviz (в настоящее время на wxWidgets, но планируется перенос под Qt)
Исследователи со всего мира уже многие годы программируют роботов. Целью ROS является объединение готовых решений и наработок в единую среду, где любой желающий может использовать эти решения и делиться своими.
Именно поэтому, многие роботы уже работают под управлением ROS:
Возможно, проще всего, воспринимать ROS, как клей для самых разных модулей.
Можно провести параллель с миром UNIX:
не писать одну большую программу, а реализовать несколько маленьких, которые могут сообща решить поставленную задачу.
Именно так работают Узлы в ROS.
Но если в UNIX программы взаимодействуют друг с другом через каналы (pipe),
то в ROS, программы (Узлы) взаимодействуют друг с другом через Темы.
В UNIX они пересылают друг-другу данные вывода,
а в ROS — Сообщения.
Таким образом, можно брать разные программы и получать быстрый результат — просто объединяя их между собой, как кубики LEGO.
То же самое и в ROS. Только, вместо обычных компьютерных утилит, выступают программы для роботов.
Например, вместо программы поиска файлов — программа (Узел) для поиска местоположения. Вместо программы поиска нужной строки — программа (Узел) для поиска объекта на изображении с камер.
Вместо команды перемещения файла — программа для управления манипулятором.
Комбинируя готовые Узлы ROS и, по необходимости, дописывая собственные, можно существенно сократить время разработки и позволить себе сконцентрироваться только на тех задачах, которые действительно нужно решить.
Например, захотим мы запрограммировать робота принесть нам с кухни яблоко.
Если делать всё самому, то можно потратить много времени, чтобы реализовать необходимый функционал. Изучить требуемую теорию (SLAM и т.п.) и реализовать:
определение роботом своего текущего положения, навигацию, объезд препятствий, обнаружение объектов, работа с манипулятором и т.д.
Если же использовать ROS, то можно, например, взять готовый стек навигации, настроить его для работы на своём роботе и сконцентрироваться только на тех задачах, которые пока в ROS не реализованы.
Таким образом, можно сэкономить многие сотни часов, которые будут потрачены на изобретение велосипеда и сконцентрироваться на чём-то действительно новом и интересном.
Разумеется, придётся потратить время на изучение ROS и нюансов его использования, но это время намного меньше чем то, которое потребуется на решение любой из вышеприведённых задач (особенно — с нуля).
А ещё можно сравнить ROS с… Arduino!
ROS делает для роботов тоже самое, что делает обычная ОС для компьютера — скрывает от пользователя/программиста «железо», предоставляя для этого свои функции.
Но ведь, точно так же Arduino, скрывает от пользователя/программиста железо микроконтроллера, предоставляя готовый и удобный фреймворк для программирования.
Плюс расширение возможностей с помощью готовых библиотек или написания собственных. Причём, при желании, можно не использовать Arduino-вскую обёртку, а залезть на более низкий уровень.
То же самое позволяет сделать и ROS.
Как ардуино позволяет любому почти сразу же начать программировать микроконтроллеры, так и ROS позволяет прикоснуться к робототехнике не только высоколобым учёным, но и простым любителям.
Вывод: Arduino дало возможность совершить качественный и количественный скачёк в развитии различных систем автоматизации (например, в роли контроллера 3D-принтеров RepRap), а ROS даёт аналогичную возможность развития систем робототехнических!
А уж о взаимном дополнении Arduino и ROS и говорить нечего — действительно гремучая смесь 🙂
Прелесть и гибкость единого интерфейса ROS, для оборудования робота можно оценить на следующем замечательном примере.
«Poor Man’s Lidar» — PML — «лазерный дальномер бедных»
Навигационный стек ROS, требует для своей работы выполнения определённых условий: робот должен предоставлять одометрию и иметь датчик, возвращающий дистанцию (лазерный дальномер) или облако точек (Kinect или стерео-камера).
Кажется, что выполнение последнего условия потребует больших финансов, но нюанс в том, что в ROS, программе навигации для работы, фактически, требуются данные (Сообщения), формата лазерного дальномера (sensor_msgs/LaserScan) или облака точек(sensor_msgs/PointCloud).
Получается, что мы можем использовать какой-нибудь другой сенсор, для которого можем реализовать драйвер, возвращающий данные в нужном формате.
Например, заменим лазерный дальномер на «лазерный дальномер бедных» (PML) — возьмём относительно недорогой Sharp-овский ИК-дальномер и закрепим его на качалке сервомашинки. Теперь, вращая сервомашинкой из стороны в сторону мы можем получать грубую оценку дальностей в секторе.
Остаётся написать драйвер, который будет считывать значения с нашего дальномера и Публиковать Сообщения типа sensor_msgs/LaserScan — тем самым реализуется «поддельный лазерный дальномер».
ROS будет успешно считывать данные через наш драйвер, а мы сможем использовать готовый навигационный стек ROS!
Красота!
Разумеется, подобной сенсор не идёт ни в какое сравнение с обычными лазерными дальномерами, но он более доступен, а если появятся средства на приобретение обычного дальномера, то нам не придётся ничего существенно менять в программе! Только заменить сенсор (и драйвер) и всё!
Кстати, на этом же принципе, в Turtlebot-е используется Kinect. В стеке Turtlebot-а есть пакет pointcloud_to_laserscan, который преобразует облако точек, получаемое от сенсора Kinect в данные лазерного сканера (Fake Laser), что позволяет использовать готовые алгоритмы SLAM (gmapping).
Сообщество
Но ROS — это не только платформа, но и обширное сообщество. Исследователи из различных университетов по всему миру успешно используют ROS для решения задач робототехники и ИИ.
Постоянно появляются новые стеки и пакеты, а если возникает вопрос — к сообществу всегда можно обратиться за помощью.
продолжение следует…
Ссылки:
www.ros.org
ROS Introduction
Концепции ROS
Начальные руководства (на русском)
http://answers.ros.org
Pi Robot Meets ROS
Pi Robot + ROS
По теме:
Робософт — обзор существующих решений
Дистрибутивы ROS
Установка ROS (Electric)
Автор: Vladimir (noonv), 2011-2012Эксклюзивно для www.robocraft.ru
копирование на другие ресурсы и публикация
без разрешения автора запрещены.
robocraft.ru
Что такое ROS | РОБОТОША
Robot Operating System (ROS) — это широко используемый в робототехнике фреймворк. Философией ROS является создание программного обеспечения, которое бы работало с различными роботами, лишь с небольшими изменениями в коде. Эта идея позволяет создавать функциональность, которая может быть перенесена без особых усилий для использования различными роботами, чтобы раз за разом не изобретать колесо.
ROS была разработана в 2007 году в лаборатории искусственного интеллекта Стэнфорда (Stanford Artificial Intellegence Laboratory, SAIL) для поддержки стэнфордского проекта AI Robot. C 2008 года, разработка продолжилась в основном в исследовательском институте Willow Garage, сотрудничающим с более чем двадцатью различными институтами в рамках модели совместного развития.
Множество исследовательских институтов начали разрабатывать собственные проекты в ROS, добавляя поддержку своего аппаратного обеспечения и делясь примерами собственного программного кода. Некоторые компании, производящие роботов, стали адаптировать свои продукты для их использования с ROS.
Популярные роботы, поддерживаемые ROS
Список роботов, поддерживаемых ROS.
Как правило, для всех поддерживаемых платформ публикуется большое количество примеров и симуляторы, облегчающие разработку собственных проектов.
В ROS также поддерживается множество различных датчиков и исполнительных устройств (актуаторов), используемых в робототехнике. Каждый день появляются новые устройства, совместимые с этим фреймворком.
ROS поддерживает различные исполнительные устройства
В ROS имеются стандартные возможности операционной системы, такие как, аппаратная абстракция, управление устройствами на низком уровне, реализована часто используемая функциональность, передача сообщений между процессами, и управление библиотеками. Архитектура ROS основана не графе с централизованной топологией. Обработка происходит в узлах, которые могут принимать или отправлять данные с датчиков, систем контроля состояния и планирования, приводов, и так далее. Библиотека ориентирована на Unix-подобные системы (под Ubuntu Linux работает отлично, а Fedora и Mac OS X имеют статус экспериментальных).
Пакет *-ros-pkg является является общим репозиторием для разработки высокоуровневых библиотек. Многие из возможностей часто ассоциируемые с ROS, такие как библиотеки навигации и визуализатор rviz, хранятся в этом репозитории. Эти библиотеки предоставляют мощный набор инструментов (различные визуализаторы, симуляторы, средства отладки) для упрощения работы.
ROS позволяет наблюдать за тем, что происходит на каждом шаге
ROS распространяется на условиях лицензии BSD и является ПО с открытым исходным кодом. ROS бесплатна для исследовательских и коммерческих целей. ROS способствует повторному использованию кода, так что разработчики робототехники и ученые могут не изобретать колесо постоянно. Можно получить код из репозитория, изменить его и вновь поделиться улучшенным ПО. Вы также можете написать драйвер вашего собственного датчика для ROS.
ROS поддерживает параллельные вычисления, имеет хорошую интеграцию с популярными C++ библиотеками, такими как как OpenCV, Qt, Point Cloud Library и пр., и она может работать на одноплатных компьютерах, таких как Raspberry Pi или BeagleBone Black, а также с микроконтроллерными платформами, например, Arduino. Вы можете создать своего собственного робота на основе Arduino или Raspberry Pi и использовать для его управления Robot Operating System.
Время является очень важным ресурсом и ROS является одним из инструментов, которые могут помочь разработать комплексное решение в кратчайшие сроки и с минимальными усилиями. Библиотека ROS поможет реализовать алгоритмы и сократить время, необходимое для интеграции целой кучи компонентов.
Еще по этой теме
Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.
robotosha.ru
Базовые понятия ROS · Введение в ROS
Основные термины
Мастер (Master), Мастер-Нода
Мастер выполняет роль сервера имен для возможности подключения между собой различных нод. Команда roscore
запускает сервер мастера, и после этого к нему могут подключиться и зарегистрироваться ноды ROS. Связь между нодами (обмен сообщениями), невозможна без запущенного мастера.
При запуске ROS roscore
, мастер будет запущен по адресу URI, установленным в переменной окружения ROS_MASTER_URI
. По умолчанию адрес использует IP-адрес локального ПК и номер порта 11311
Нода (Node)
Понятие ноды, относится к наименьшей «рабочей» единицы используемой в ROS. Можно провести аналогию с одной исполняемой программой. ROS рекомендует создать одну ноду для каждой задачи, что позволить легче использовать ее в других проектах.
При запуске нода регистрирует информацию о себе на мастере (название ноды, типы обрабатываемых сообщений). Зарегистрированная нода может взаимодействовать с другими нодами (получать и отправлять запросы). Важно отметить что обмен сообщениями между нодами работает без участия мастера (соединение между нодами происходит на прямую). Мастер обеспечивает только удиное пространство имен для решения вопроса куда подключиться к конкретной ноде. Адрес запуска ноды, береться из переменной окружения ROS_HOSTNAME
, которая должна быть определенна до запуска. Порт устанавливается на произвольное уникальное значение.
Пакет (Package)
Пакет является основной единицей ROS. Любое приложение ROS оформляется в пакет, в котором определяются: конфигурация пакета, ноды необходимые для работа пакета, зависимости от других пакетов ROS.
Работа с пакетами ROS очень похожа на работу с пакетами linux. Пакет ROS можно поставить готовым из репозитория пакетов, так и скачить и скомпилировать из исходных кодов.
Поиск доступных пакетов ROS возможен на странице http://wiki.ros.org/
Сообщение (Message)
Ноды отправляют и принимают данные между собой, согласно заданного формата. Эти данные называют Сообщения, а описание Типом Сообщения.
Сообщения могут быть простых типов (integer, float, boolean) так и могут состоять из сложных структур, содержать вложенных сообщения и массивы сообщений).
Например для сообщение с координатами обьекта (XYZ) есть существующий тип сообщения geometry_msgs/Point.msg
который описывается:
float64 x
float64 y
float64 z
Топик (Topic), модель Издатель и Подписчик
Топик (Topic), это один из видов обмена сообщениями, который буквально похож на тему в разговоре. Нода издателя (publisher) сначала регистрирует свою тему с на мастере, а затем начинает публикацию сообщений в эту тему (топик). Узлы подписчиков, которые хотят получать информацию из этой темы (типика) при помощи мастера получают адрес этой темы и далее получают сообщения из этого топика.
Издатель (Publisher)
Издателем называется процесс, который рассылает сообщения в рамках созданного топика для других нод. Одна нода может содержать несколько издателей, публикующих данные в разные топики.
Подписчик (Subscriber)
Подписчиком (Subscriber) называется процесс, который получает сообщения из определенного топика (Topic). Подписчик (Subscriber) регистрируется на Мастере (Master), указывая какие топики Подписчик хочет получать. После этого Издатель (Publisher) начинает отправлять сообщения подписчику. Связь с топиком для подписчика является асинхронной (издатель публикует сообщения в не зависимости от статуса подписчиков).
Этот тип взаимодействия удобно применять для работы с датчиками, которые непрерывно передают полученные значения. Более подробно данная модель описана в главе Работа с Топиками.
Сервис (Service), Сервис Клиент и Сервис Сервер
Сервис это модель коммуникации, работающая по принципу синхроной двунаправленной связи между клиентом (Service Client), который запрашивает данные и сервером (Service Server) который отвечает на запросы.
Сервис Сервер (Service Server)
«Сервис Сервер» — это узел коммуникации (процесс), который получает запрос, обрабатывает данные и передает обратно ответ. Запрос и ответ представляют собой обычное Сообщение (Message).
Сервис Клиент (Service Client)
Сервис Клиент — это узел коммуникации (процесс), который создает запрос на Сервис Сервере (Service Server) и получает ответ после выполнения запроса.
Данная модель взаимодействия применяется для удаленного выполнения различных операций в рамках разных нод. Более подробно данная модель описана в главе Работа с Сервисом.
Действие (Action), Action Goal, Action Result, Action Feedback
Действие представляет собой модель связи, используемый для асинхронной двунаправленной связи. Действие используется там, где требуется больше времени для ответа после получения запроса, и промежуточные ответы требуются до тех пор, пока результат не будет достигнут. Структура протокола Действия (Action) похожа на структуру Сервис (Service), однако в протокол внесены дополнительные параметры: задача (Action Goal), обратная связь (Action Feedback), результат (Action Result). Более подробно данная модель описана в главе Работа с Событиями.
docs.voltbro.ru
Documentation — ROS Wiki
ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more. ROS is licensed under an open source, BSD license.
Available Translations: German | Spanish | French | Italian | Japanese | Korean | Brazilian Portuguese | Portuguese | Русский (Russian) | Thai | Turkish | 简体中文 | Ukrainian | Vietnamese
ROS:
Install
- Install ROS on your machine.
Getting Started
- Learn about various concepts, client libraries, and technical overview of ROS.
Tutorials
- Step-by-step instructions for learning ROS hands-on
Contribute
- How to get involved with the ROS community, such as submitting your own repository.
Support
- What to do if something doesn’t work as expected.
Quality Assurance
- How to ensure that your ROS-based systems and your contributions to ROS are of high quality.
Software:
Distributions
- View the different release Distributions for ROS.
Packages
- Search the 2000+ software libraries available for ROS.
Core Libraries
- APIs by language and topic.
Common Tools
- Common tools for developing and debugging ROS software.
Robots/Hardware:
Publications, Courses, and Events:
Papers
- Published papers with open source implementations available.
Books
- Published books with documentation and tutorials with open source code available.
Courses
- Courses using or teaching ROS.
Events
- Past events and materials based on ROS.
There are several mirrors of this wiki for use around the world
wiki.ros.org