формула, расчет на примере ОАО «Аэрофлот»
Рассмотрим коэффициент рентабельности продаж (ROS). Данный показатель отражает эффективность деятельности предприятия и показывает долю (в процентах) чистой прибыли в общей выручке предприятия. В западных источниках коэффициент рентабельности продаж называют – ROS (return on sales). Ниже рассмотрю формулу расчета данного коэффициента, приведу пример с его расчетом для отечественного предприятия, опишу норматив и его экономический смысл.
Инфографика: Рентабельность продаж (RoS)
Рентабельность продаж. Экономический смысл показателя
Изучение любого коэффициента целесообразно начинать с его экономического смысла. Для чего нужен данный коэффициент? Он отражает деловую активность предприятия и определяет то, насколько предприятие эффективно работает. Коэффициент рентабельности продаж показывает, сколько денежных средств от проданной продукции является прибылью предприятия. Важно не то, сколько продукции продало предприятие, а то, сколько чистой прибыли оно заработало чистых денег с этих продаж.
Коэффициент рентабельности продаж описывает эффективность реализации основной продукции предприятия, а также позволяет определить долю себестоимости в продажах.
Коэффициент рентабельности продаж. Как рассчитывается рентабельность? Формула расчета по балансу и МСФО
Формула рентабельности продаж по российской системе бухгалтерской отчетности выглядит следующим образом:
Коэффициент рентабельности продаж = Чистая прибыль/ Выручка= стр.2400/стр.2110
Следует уточнить, что при расчете коэффициента вместо чистой прибыли в числителе может использоваться: валовая прибыль, прибыль до налогов и процентов (EBIT), прибыль до налогов (EBI). Соответственно будут появляться следующие коэффициенты:
Коэффициент рентабельности продаж по валовой прибыли = Валовая прибыль/Выручка
Коэффициент операционной рентабельности = EBIT/Выручка
Коэффициент рентабельности продаж по прибыли до налогов = EBI/Выручка
Рекомендую, чтобы избежать путаницы, использовать формулу, где в числителе стоит чистая прибыль (NI, Net Income), т.к. показатель EBIT рассчитывается по отечественной отчетности некорректно. Получается следующая формула для российской отчетности:
В зарубежных источниках коэффициент рентабельности продаж – ROS вычисляется по следующей формуле:
Видео-урок: “Рентабельность продаж: формула расчета, пример и анализ”
Рентабельности продаж. Пример расчета по балансу для ОАО “Аэрофлот”
Пример расчета коэффициента рентабельности продаж (ROS) для Аэрофлота
Давайте рассчитаем рентабельность продаж для российской компании ОАО «Аэрофлот». Для этого воспользуюсь сервисом InvestFunds, который позволяет получить финансовую отчетность предприятия по кварталам. Ниже представлен импорт данных с сервиса.
Отчет о прибылях и убытках ОАО “Аэрофлот”. Расчет коэффициента рентабельности продаж
Итак, рассчитаем рентабельность продаж за четыре периода.
Коэффициент рентабельности продаж 2013-4 =11096946/206277137= 0,05 (5%)
Коэффициент рентабельности продаж 2014-1 = 3029468/46103337 = 0,06 (6%)
Коэффициент рентабельности продаж 2014-2 =3390710/105675771 = 0,03 (3%)
Как видно, рентабельность продаж незначительно увеличилась до 6% в первом квартале 2014 года, а во втором она снизилась в два раза до 3%. Тем не менее, рентабельность больше нуля.
Посчитаем данный коэффициент по МСФО. Для этого возьмем с официального сайта компании данные по финансовой отчетности.
Отчет по МСФО ОАО “Аэрофлот”. Расчет коэффициента рентабельности продаж
За девять месяцев 2014 года коэффициент рентабельности продаж ОАО «Аэрофлот» был равен: ROS=3563/236698 =0,01 (1%).
Давайте рассчитаем ROS за 9 месяцев 2013 года.
ROS=17237/222353 =0,07 (7%)
Как видно, за год коэффициент ухудшился на 6% с 7% в 2013 до 1% в 2014.
Коэффициент рентабельности продаж. Норматив
Значение нормативного значения для данного коэффициента Крп>0. Если рентабельность продаж оказалась меньше нуля, то стоит серьезно задуматься над эффективностью управления предприятием.
Какой уровень коэффициента рентабельности продаж является приемлемым для России?
По данным РИА-рейтинг (за 2013 год) средние значения коэффициента рентабельности продаж по отраслям были следующие:
– добыча полезных ископаемых – 26%
– сельское хозяйство – 11%
– строительство – 7%
– оптовая и розничная торговля – 8%
Если у вас низкое значение коэффициента, то вам следует повысить эффективность управления предприятием через увеличение клиентской базы, роста оборачиваемости товаров, снижение стоимости товаров/услуг от субподрядчиков.
Автор: Жданов Василий, к.э.н.
Что такое 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 ) или программным фреймворком.
Основы работы с Robotic Operating System / Хабр
Введение
Доброго всем времени суток!
Осваивая в очередной раз просторы Хабра, заметил, что здесь практически нет информации о Robotic Operating System (далее просто ROS). Поспешу исправить эту оплошность и популяризовать замечательный продукт.
Что же это такое? ROS представляет собой надстройку над ОС, которая позволяет легко и просто разрабатывать системы управления роботами. Что это означает и как с этим потом жить — и призвана рассказать серия топиков.
По сути, ROS — это набор из различных широко (и неочень) известных библиотек, таких как:
- OpenCV — библиотека, содержащая алгоритмы компьютерного зрения и обработки изображений;
- PCL- библиотека для работы с облаками 3D-точек;
- Ogre — объектно-ориентированный графический движок с открытым исходным кодом;
- Orocos — библиотека для управления роботами (например, расчет кинематики).
Также в ROS входят драйвера для различных манипуляторов и сенсоров (включая MS Kinect). Но что же отличает ROS от простой сборки библиотек? Основополагающим преимуществом является клиент-серверная архитектура ROS — разработчики реализовали механизм пересылки сообщений между различными объектами, возможность построения распределенных систем, предоставление brige’ей к языкам С++ и Python.
Чтобы начать пользоваться 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/: скомпилированные бинарники
- include/package_name: заголовочные файлы для C++ (обязательно должны описываться в manifest.xml!)
- 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)
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), что позволяет разрабатывать их индивидуально.
Эти процессы могут быть сгруппированы в Пакеты и Стеки (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)
Базовые понятия 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). Более подробно данная модель описана в главе Работа с Событиями.
Перед самым новым годом, я выложил перевод последнего урока из серии руководств 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
копирование на другие ресурсы и публикация
без разрешения автора запрещены.
Введение в операционную систему робота (ROS)
Для разработки робота с компьютерным мозгом требуется набор программных средств на компьютерных программных драйверах, сторонних инструментах для средств компьютерного зрения и моделирования. Структура ROS собирает все эти инструменты и управляет тем, как вы разрабатываете код для своего робота.
Вместо того, чтобы изобретать колесо каждый раз, некоторые структуры могут помочь вам, собрав все эти инструменты и управляя тем, как вы разрабатываете код для своего робота. ROS (операционная система для роботов) является одной из этих структур. Это специальная структура, первоначально разработанная лабораторией Стэнфорда А.И. в 2007 году для разработки роботов. Фонд Open Source Robotics Foundation теперь поддерживает ROS.
Концепция ROS выходит далеко за рамки рамки. ROS представляет собой концепцию ОС, поскольку она предоставляет все услуги, которые выполняет любая другая ОС, например, абстракция аппаратного обеспечения, управление устройством низкого уровня, реализация обычно используемых функций, передача сообщений между процессами и управление пакетами. Несмотря на то, что ROS по-прежнему является структурой, которая не является автономной ОС или RTOS и не является единственной платформой для роботов, она, как представляется, широко применяется и имеет большое сообщество разработчиков.
ROS может быть установлен на одноплатном компьютере (SBC), таком как Raspberry Pi-level и выше с дистрибутивом Ubuntu / Debian. Однако другие платформы поддерживаются экспериментально или сообществом.
Обзор работы ROS
Прежде чем мы углубимся и начнем играть с ROS, нам нужно увидеть большую картину системы.
В общем, ROS состоит из кода и инструментов, которые помогают выполнить код вашего проекта и выполняют требуемую работу, включая инфраструктуру для ее запуска, например сообщения, передаваемые между процессами.
ROS разработан как слабосвязанная система, где процесс называется узлом, и каждый узел должен отвечать за одну задачу. Узлы общаются друг с другом, используя сообщения, проходящие через логические каналы, называемые темами. Каждый узел может отправлять или получать данные с другого узла, используя модель публикации / подписки. Мы увидим это в действии позже.
Основная задача ROS заключается в поддержке повторного использования кода в исследованиях и разработках робототехники, чтобы вы могли найти встроенную систему пакетов. Опять же, имейте в виду, что ROS не является ОС, библиотекой или RTOS. Это концепция, использующая концепцию ОС.
ROS.org | ROS для меня?
ROS повышает ценность большинства робототехнических проектов и приложений, но вы все равно можете спросить: «Подходит ли ROS для моего конкретного случая использования?» Мы надеемся, что вы сможете ответить на этот вопрос после того, как мы познакомим вас с функциями ROS и покажем вам отзывы пользователей ROS из различных областей робототехники. Во-первых, мы рассмотрим некоторые причины, по которым вы можете рассмотреть возможность использования ROS.
ROS был спроектирован так, чтобы быть как можно более распределенным и модульным, чтобы пользователи могли использовать столько или меньше ROS, как они хотят.Мы рассмотрим, какие компоненты составляют ROS в других местах, но модульность ROS позволяет вам выбирать, какие части вам полезны, а какие части вы бы предпочли реализовать самостоятельно.
Распределенная природа ROS также способствует формированию большого сообщества пользовательских пакетов, которые вносят большой вклад в основную систему ROS. По последним подсчетам в экосистеме ROS было более 3000 пакетов, и это только те пакеты ROS, о которых люди нашли время, чтобы объявить общественности.Эти пакеты отличаются точностью, охватывающей все: от проверенных реализаций новых алгоритмов до драйверов и возможностей промышленного качества. Сообщество пользователей ROS строится на основе общей инфраструктуры, чтобы обеспечить точку интеграции, которая обеспечивает доступ к драйверам оборудования, общим возможностям роботов, инструментам разработки, полезным внешним библиотекам и многому другому.
За последние несколько лет ROS выросла и теперь включает в себя большое сообщество пользователей по всему миру.Исторически сложилось так, что большинство пользователей были в исследовательских лабораториях, но все чаще мы наблюдаем их внедрение в коммерческом секторе, особенно в промышленной и сервисной робототехнике.
Сообщество ROS очень активно. Согласно нашим показателям, на момент написания статьи сообщество ROS насчитывало более 1500 участников в списке рассылки ros-users, более 3300 пользователей на вики-сайте совместной документации и около 5700 пользователей на веб-сайте ROS Ответы на вопросы и ответы. В вики есть более 22 000 вики-страниц и более 30 правок вики-страниц в день.На сайте вопросов и ответов есть 13 000 вопросов, заданных на сегодняшний день, с 70% -ым процентом ответов.
Ядро ROS лицензировано по стандартной лицензии BSD с тремя пунктами. Это очень разрешительная открытая лицензия, которая позволяет повторно использовать ее в коммерческих продуктах и продуктах с закрытым исходным кодом. Вы можете найти больше информации о лицензии BSD здесь:
Хотя основные части ROS лицензируются по лицензии BSD, в пакетах сообщества обычно используются другие лицензии, такие как лицензия Apache 2.0, лицензия GPL, лицензия MIT и даже проприетарные лицензии.Для каждого пакета в экосистеме ROS требуется указать лицензию, чтобы вам было легко быстро определить, будет ли пакет соответствовать вашим потребностям в лицензировании.
ROS сама по себе представляет большую ценность для большинства проектов в области робототехники, но она также дает возможность наладить сеть и сотрудничать с роботами мирового класса, которые являются частью сообщества ROS. Одной из основных философий в ROS является совместная разработка общих компонентов. Если вы находите ROS полезной, рассмотрите возможность присоединения к сотрудничеству, возвращаясь!
,ROS.org | Основные компоненты
Инфраструктура связи | Особенности робота | Инструменты
Хотя мы не можем предоставить исчерпывающий список того, что находится в экосистеме ROS, мы можем определить некоторые основные части ROS и поговорить об их функциональности, технических характеристиках и качестве, чтобы дать вам лучшее представление о том, что может внести ROS к вашему проекту.
Инфраструктура связи
На самом низком уровне ROS предлагает интерфейс передачи сообщений, который обеспечивает межпроцессное взаимодействие и обычно называется промежуточным программным обеспечением.
Промежуточное программное обеспечение ROS предоставляет следующие возможности:
Передача сообщений
Система связи часто является одной из первых потребностей, возникающих при реализации нового приложения робота. Встроенная и хорошо протестированная система обмена сообщениями ROS экономит ваше время, управляя деталями взаимодействия между распределенными узлами посредством анонимного механизма публикации / подписки. Другое преимущество использования системы передачи сообщений заключается в том, что она заставляет вас реализовывать четкие интерфейсы между узлами в вашей системе, тем самым улучшая инкапсуляцию и способствуя повторному использованию кода.Структура этих интерфейсов сообщений определяется в сообщении IDL (Язык описания интерфейса).
Запись и воспроизведение сообщений
Поскольку система публикации / подписки является анонимной и асинхронной, данные могут быть легко получены и воспроизведены без каких-либо изменений в коде. Допустим, у вас есть задача A, которая считывает данные с датчика, и вы разрабатываете задачу B, которая обрабатывает данные, полученные с помощью задачи A. ROS упрощает сбор данных, опубликованных с помощью задачи A, в файл, а затем повторно публикует эти данные из файл позже.Абстракция передачи сообщений позволяет Задаче B быть независимой от источника данных, который может быть Задачей A или файлом журнала. Это мощный шаблон проектирования, который может значительно сократить ваши усилия по разработке и повысить гибкость и модульность вашей системы.
Удаленный вызов процедур
Асинхронный характер обмена сообщениями «публикация / подписка» работает для многих коммуникационных нужд в робототехнике, но иногда вам требуется синхронное взаимодействие между запросами и ответами.Промежуточное программное обеспечение ROS предоставляет эту возможность с помощью служб. Подобно темам, данные, передаваемые между процессами при вызове службы, определяются с помощью одного и того же простого сообщения IDL.
Распределенная система параметров
Промежуточное программное обеспечение ROS также позволяет задачам обмениваться информацией о конфигурации через глобальное хранилище значений ключей. Эта система позволяет вам легко изменять настройки ваших задач и даже позволяет задачам изменять конфигурацию других задач.
Особенности робота
В дополнение к основным компонентам промежуточного программного обеспечения, ROS предоставляет общие библиотеки и инструменты для роботов, которые помогут быстро запустить и запустить ваш робот.Вот лишь некоторые из специфических для робота возможностей, которые предоставляет ROS:
Стандартные сообщения робота
Годы общественных дискуссий и разработок привели к набору стандартных форматов сообщений, которые охватывают большинство распространенных случаев использования в робототехнике. Существуют определения сообщений для геометрических понятий, таких как позы, преобразования и векторы; для датчиков, таких как камеры, IMU и лазеры; и для навигационных данных, таких как одометрия, пути и карты; среди многих других. Используя эти стандартные сообщения в вашем приложении, ваш код будет беспрепятственно взаимодействовать с остальной частью экосистемы ROS, от инструментов разработки до библиотек возможностей.
Robot Geometry Library
Во многих робототехнических проектах общей проблемой является отслеживание расположения различных частей робота относительно друг друга. Например, если вы хотите объединить данные с камеры с данными с лазера, вам необходимо знать, где находится каждый датчик, в некоторой общей системе координат. Эта проблема особенно важна для гуманоидных роботов со многими движущимися частями. Мы решаем эту проблему в ROS с помощью библиотеки tf (transform), которая будет отслеживать, где все находится в вашей системе роботов.
Созданная с учетом эффективности, библиотека tf была использована для управления данными преобразования координат для роботов с более чем ста степенями свободы и частотой обновления сотен герц. Библиотека tf позволяет вам определять как статические преобразования, такие как камера, которая прикреплена к подвижной базе, так и динамические преобразования, такие как соединение в руке робота. Вы можете преобразовать данные датчика между любой парой координатных кадров в системе. Библиотека tf обрабатывает тот факт, что производители и потребители этой информации могут быть распределены по сети, и тот факт, что информация обновляется с различными скоростями.
Язык описания робота
Другая распространенная проблема робототехники, которую ROS решает для вас, — это как описать вашего робота машиночитаемым способом. ROS предоставляет набор инструментов для описания и моделирования вашего робота, чтобы его могли понять остальные части вашей системы ROS, включая tf, robot_state_publisher и rviz. Формат описания вашего робота в ROS — URDF (Unified Robot Description Format), который состоит из XML-документа, в котором вы описываете физические свойства вашего робота, от длины конечностей и размеров колес до расположения датчиков и внешний вид каждой части робота.
Определившись таким образом, ваш робот может быть легко использован с библиотекой tf, представлен в трех измерениях для приятной визуализации и использован с симуляторами и планировщиками движения.
Выносные дистанционные вызовы процедур
В то время как темы (анонимная публикация / подписка) и услуги (удаленные вызовы процедур) охватывают большинство случаев использования связи в робототехнике, иногда вам необходимо инициировать целенаправленное поведение, следить за его прогрессом, иметь возможность предупреждать его по пути, и получить уведомление, когда оно будет завершено.ROS предоставляет действия для этой цели. Действия похожи на сервисы, за исключением того, что они могут сообщать о прогрессе перед возвратом окончательного ответа, и вызывающий может их прервать. Так, например, вы можете дать указание своему роботу перемещаться в какое-то место, отслеживать его продвижение по мере того, как он пытается туда попасть, останавливать или перенаправлять его по пути, и сообщать, когда он добился успеха (или потерпел неудачу). Действие — это мощная концепция, которая используется во всей экосистеме ROS.
Диагностика
ROS предоставляет стандартный способ производства, сбора и агрегирования диагностики вашего робота, так что вы можете быстро увидеть состояние своего робота и определить, как решать проблемы по мере их возникновения.
Оценка позы, локализация и навигация
ROS также предоставляет некоторые возможности «с батарейками», которые помогут вам начать работу над проектом робототехники. Существуют пакеты ROS, которые решают основные проблемы робототехники, такие как оценка позы, локализация на карте, построение карты и даже мобильная навигация.
Независимо от того, являетесь ли вы инженером, стремящимся к быстрым исследованиям и разработкам, исследователем робототехники, желающим своевременно выполнить ваши исследования, или любителем, стремящимся узнать больше о робототехнике, эти готовые возможности помогут Вы делаете больше, с меньшими усилиями.
Инструменты
Одна из сильных сторон ROS — это мощный набор инструментов для разработки. Эти инструменты поддерживают анализ, отладку, построение графиков и визуализацию состояния разрабатываемой системы. Базовый механизм публикации / подписки позволяет вам самопроизвольно анализировать данные, проходящие через систему, облегчая понимание и устранение проблем по мере их возникновения. Инструменты ROS используют эту возможность самоанализа благодаря обширному набору графических утилит и утилит командной строки, которые упрощают разработку и отладку.
Инструменты командной строки
Вы проводите все свое время удаленно, войдя в систему с роботом? ROS можно использовать на 100% без графического интерфейса. Все основные функции и инструменты для самоанализа доступны через один из более чем 45 инструментов командной строки. Есть команды для запуска групп узлов; анализировать темы, услуги и действия; запись и воспроизведение данных; и множество других ситуаций. Если вы предпочитаете использовать графические инструменты, rviz и rqt предоставляют аналогичную (и расширенную) функциональность.
Риз
Пожалуй, самый известный инструмент в ROS, rviz обеспечивает универсальную трехмерную визуализацию многих типов данных датчиков и любого робота, описанного URDF.
rviz может визуализировать многие распространенные типы сообщений, предоставляемые в ROS, такие как лазерное сканирование, трехмерные облака точек и изображения с камер. Он также использует информацию из библиотеки tf для отображения всех данных датчика в общей системе координат по вашему выбору вместе с трехмерной визуализацией вашего робота.Визуализация всех ваших данных в одном приложении не только выглядит впечатляюще, но и позволяет быстро увидеть то, что видит ваш робот, и выявить такие проблемы, как смещение сенсора или неточность модели робота.
кв.
ROS предоставляет rqt, основанную на Qt инфраструктуру для разработки графических интерфейсов для вашего робота. Вы можете создавать пользовательские интерфейсы, составляя и настраивая обширную библиотеку встроенных плагинов rqt для вкладок, разделенного экрана и других макетов.Вы также можете представить новые компоненты интерфейса, написав свои собственные плагины rqt.
Плагин rqt_graph обеспечивает самоанализ и визуализацию работающей системы ROS, показывая узлы и соединения между ними, и позволяет вам легко отлаживать и понимать вашу работающую систему и ее структуру.
С помощью плагина rqt_plot вы можете отслеживать кодировщики, напряжения или что-либо, что может быть представлено в виде числа, которое изменяется во времени.Плагин rqt_plot позволяет вам выбрать бэкэнд для построения графиков (например, matplotlib, Qwt, pyqtgraph), который наилучшим образом соответствует вашим потребностям.
Для мониторинга и использования тем у вас есть плагины rqt_topic и rqt_publisher. Первый позволяет отслеживать и анализировать любое количество тем, публикуемых в системе. Последнее позволяет вам публиковать свои собственные сообщения на любую тему, облегчая проведение специальных экспериментов с вашей системой.
Для регистрации и воспроизведения данных ROS использует формат сумки.Файлы мешков могут быть созданы и доступны графически через плагин rqt_bag. Этот плагин может записывать данные в сумки, воспроизводить выбранные темы из сумки и визуализировать содержимое сумки, включая отображение изображений и отображение числовых значений во времени.
,ROS.org | Поддержка
Существует несколько механизмов для поддержки сообщества ROS, каждый со своей целью: вики, ответы ROS, средства отслеживания ошибок и список рассылки ros-users @. Важно правильно выбрать ресурс, чтобы сократить время отклика, избежать дублирования сообщений и способствовать обсуждению новых идей.
Когда что-то идет не так, вики — ваша первая остановка. В дополнение к официальной документации для пакетов ROS, вики содержит два ключевых ресурса, с которыми вам следует ознакомиться: руководство по устранению неполадок и FAQ.Решения многих распространенных проблем рассматриваются на этих двух страницах.
Если вики не решит вашу проблему, ответ ROS следующий. Мужайтесь: очень вероятно, что кто-то еще сталкивался с такой же проблемой раньше, и что она покрыта из более чем 10 000 вопросов в ROS Ответы. Начните с поиска вопросов, похожих на ваши; если ваш вопрос еще не задан, опубликуйте новый. Обязательно ознакомьтесь с рекомендациями о том, как подготовить свой вопрос перед публикацией.
Если вы обнаружили ошибку (например, в результате обсуждения в ROS Ответах) или когда вы хотите запросить новую функцию, перейдите к средствам отслеживания проблем. При сообщении об ошибке обязательно предоставьте подробное описание проблемы, среду, в которой она возникла, любые подробности, которые могут помочь разработчикам воспроизвести проблему, и, если возможно, отладочную трассировку.
Чтобы быть в курсе последних событий в сообществе ROS, вам нужно присоединиться к форумам ROS Discourse.Эти форумы являются местом для объявлений, новостей и обсуждений, представляющих общий интерес. ROS Discourse — это , а не , где можно задавать вопросы по устранению неполадок или сообщать об ошибках; пожалуйста, используйте другие ресурсы поддержки, перечисленные выше.
,ROS — Navio2 документы
ROS
Emlid Raspbian образ поставляется с предустановленной ROS.
Базовое понимание
Что такое АФК?
Robot Operating System — это попытка тысяч роботов по всему миру облегчить разработку новых роботов. ROS — это проект с открытым исходным кодом, который включает в себя массу полезных инструментов и делает процесс разработки более эффективным.Идея в том, что вам не нужно каждый раз переделывать колесо. Кто-то уже сделал это, и они, вероятно, сделали это лучше, чем вы, так что вы можете сосредоточить свою энергию на конкретной части, которую вы хотите построить.
Обзор
Здесь мы рассмотрим общую схему ROS, включенную в Emlid Raspbian. Сначала мы дадим общую концепцию ROS, а затем сделаем все шаг за шагом, чтобы быстро начать работу с некоторыми базовыми знаниями.
ОбразEmlid включает в себя предустановленную ROS, поэтому все, что нам нужно сделать, это запустить его после небольшой настройки (мы рассмотрим этот шаг ниже).После запуска ROS мы окажемся в ROS Master, месте, содержащем все сервисы, своего рода место встречи узлов . Теперь мы можем найти узлов и заставить их общаться друг с другом на вашем Raspberry Pi. На данный момент мы можем представить узел, например, как датчик IMU, который дает нам некоторые данные. В одном узле может быть другой набор драйверов.
Теперь мы идем немного глубже. Узлы могут находить друг друга и обмениваться данными.Эти данные, разделяемые между узлами, называются «Сообщения». Узлы могут публиковать сообщения в темах и могут подписываться на темы для получения сообщений.
Давайте учтем, что мы обычно запускаем ROS вместе с ardupilot. Для вашего удобства образ Emlid содержит предварительно установленный узел mavros. Этот узел предоставляет множество драйверов датчиков, драйвер связи для ardupilot и прокси для GCS.
Чтобы прояснить ситуацию, давайте перейдем к пошаговой ROS, в которой выполняются практические инструкции, которые помогут воспринять полученные знания.
Как получить: шаг за шагом
НастройкаROS
ROS нужно немного настроить перед запуском. А именно, это сводится к поиску специального сценария, предоставленного в / opt /
, и установке GeographicLib:
pi @ navio: ~ $ echo "source /opt/ros/kinetic/setup.bash" >> ~ / .bashrc pi @ navio: ~ $ sudo /opt/ros/kinetic/lib/mavros/install_geographiclib_datasets.sh
Приведенная выше команда заставит bash выполнить настройку ROS при каждом входе в систему, добавив строку в конец вашего bashrc
.
Начните смотреть учебник на asciinema.org.
Введение в tmux
Вам понадобится SSH
в Raspberry Pi с нескольких терминалов одновременно. Вот почему мы рекомендуем использовать терминальный мультиплексор типа , такой как tmux.
Для работы с tmux во время работы с ROS вы должны изучить некоторые основы.
Прежде чем разделить экран, мы должны создать новый сеанс $ tmux new -s session-name
Также могут быть полезны следующие команды:
Чтобы присоединить к существующему сеансу $ tmux a -t session-name
Отключиться от сеанса $ tmux detach
Для уничтожения сеанса $ tmux kill-session -t session-name
Внутри сессий мы должны как-то работать и ориентироваться с помощью ряда функций.Для этого Tmux имеет универсальных ярлыков , которые позволяют быстро выполнять множество задач.
Полезные ярлыки:
Ctrl + B
+ ?
, чтобы показать горячие клавиши
Ctrl + B
+ $
для переименования текущей сессии
Ctrl + b
+ %
для горизонтального разделения
Ctrl + B
+ "
для разделения по вертикали
Ctrl + B
+ o
для переключения между панелями
Ctrl + b
+ x
, чтобы убить текущую панель
Для получения дополнительной информации, пожалуйста, обратитесь к этому руководству.
Подготовка терминала
Создайте сеанс tmux под названием «ros»
pi @ navio: ~ $ tmux new -s ros
И разбить ваше окно на 4 панели, как это:
Мы рекомендуем вам не спеша и потренироваться в эффективном перемещении между панелями с помощью горячих клавиш.
Продолжайте смотреть учебник для этого шага.
Бегущий Роскоре
Теперь пришло время запустить ROS Master. Выберите верхнюю левую (неважно какая из них) панель и запустите roscore
Если вы успешны, Bash покажет вам следующее, и вы увидите, что Мастер запущен на Raspberry Pi.
Продолжайте смотреть учебник для этого шага.
roscore
является основой ROS. Это первое, что вы должны запустить при использовании ROS, потому что это жизненно важно для успешного выполнения узла и обеспечения работы архитектуры издатель-подписчик.
Бег ardupilot
Давайте запустим ArduPilot на другой панели, как указано здесь, указывая телеметрию на 127.0.0.1:14650 изменив / etc / default / ardu {copter, plane, rover}
в зависимости от того, какое транспортное средство вы используете.Допустим, у нас есть вертолет. Затем нам нужно ввести:
sudo nano / etc / default / arducopter
Затем введите:
pi @ navio: ~ $ sudo systemctl start arducopter
Эта команда запускает ArduPilot (одноразовая sudo systemctl позволяет arducopter
сделать его постоянным). Вы увидите, что ваш светодиод мигает.
Если вы вносите изменения в ArduPilot во время его работы, вам следует перезапустить:
pi @ navio: ~ $ sudo systemctl перезапустить arducopter
Продолжайте смотреть учебник для этого шага.
Запуск GCS
Запустите GCS (наземный пульт управления) по вашему выбору. На следующем шаге вы поймете, почему.
Бегущий узел mavros
Как мы уже обсуждали в пакете ROS, мы работаем с исполняемыми файлами, называемыми узлами. Каждый узел ROS содержит определенные функции и использует клиентскую библиотеку ROS для связи с другими узлами. Например, мы запустим mavros, который облегчает доступ к данным датчика из ArduPilot. Более того, согласно схеме из обзора, mavros станет мостом udp к наземной станции управления, которую мы запустили на предыдущем шаге.
Запустите эту команду на третьей панели:
pi @ navio: ~ $ rosrun mavros mavros_node \ _fcu_url: = udp: //: 14650 @ \ _gcs_url: = УДП: //: [email protected]: 14550
Убедитесь, что:
— 14650 — это тот же порт, который мы указали в / etc / default / ardupilot
— 192.168.1.189:14550 — это IP и порт компьютера, на котором запущен GCS.
Если вы испытываете энтузиазм, вы можете создать собственный файл .launch или отредактировать предустановленный файл, чтобы запустить все быстрее.Roslaunch автоматически запустит roscore, если он еще не запущен.
Примеры файлов запуска доступны в каталоге / opt / ros / kinetic / share / mavros / launch
.
Вам нужно изменить fcu_url
и gcs_url
в /opt/ros/kinetic/share/mavros/launch/apm.launch
и запустить:
roslaunch mavros apm.launch
Для запуска при загрузке вы можете создать простой сервис systemd. Создайте файл mavros.service в / lib / systemd / system
со следующим содержимым:
[блок] Описание = Mavros [Обслуживание] Тип = простой ExecStart = / bin / bash -c "source / opt / ros / kinetic / setup.Баш; / usr / bin / python / opt / ros / кинетическая / bin / roslaunch mavros apm.launch " Перезагрузка = на провал [Установить] WantedBy = multi-user.target
Затем запустите:
sudo systemctl daemon-reload
и включить его при загрузке:
sudo systemctl включить mavros.service
Наконец, после того, как все настроено, вы увидите что-то вроде этого:
Продолжайте смотреть учебник для этого шага.
Бег Ростопик
Инструменты Rostopic
позволяют получить информацию о темах ROS.
Чтобы узнать подкоманды для rostopic
, вы можете использовать опцию справки:
Если вы не используете GCS, но хотите получить данные из rostopic, вам нужно ввести следующую команду для установки скорости потока:
pi @ navio: ~ $ rosservice call / mavros / set_stream_rate 0 10 1
Для mavros мы запустим команду echo на последней панели, чтобы показать данные, опубликованные по теме.
pi @ navio: ~ $ rostopic echo / mavros / imu / data
После ввода rostopic echo / mavros /
вы можете нажать TAB, чтобы увидеть список существующих тем и проверить их, чтобы попрактиковаться.
Продолжайте смотреть учебник для этого шага.
Вы всегда можете более подробно изучить вики ROS, чтобы лучше понять ее концепцию.
,