1. Лекция 1. Общие сведения о курсе
«Аппаратные и программные средства СУ роботами».
Введение в ROS
Кабанов А.А.
2. Структура дисциплины
Курс
Семестр
Общий
объем,
ЗЕ
(ч)
Контактная работа, ч
Самостоятельная
работа,
ч
РГЗ,
контрольная
работа
курсовая
работа
Зачет
(семестр)
Экзамен
(семестр)
Лекции
Практические
занятия
Лабораторные
занятия
Очная форма обучения
1 1
6
(216)
18 36 0 126 + 36 – – - 1
1 2
4
(144)
18 36 0 90 - - 2 -
3. Структура дисциплины
Лекция
(4 часа)
Практическое
занятие
(8 часов)
Лекции
(16 часов)
Практические
занятия
(28 часов, 6
индивидуаль-
ных заданий)
Лекция
(2 часа)
Практические
занятия
(8 часов)
Лекции
(12 часов)
Практические
занятия
(26 часов)
Тема 1.1 Тема 1.2 Тема 2.1 Тема 2.2
Экзамен
Зачет
4. Структура дисциплины
Рассматриваемые темы в рамках изучения курса
Тема 1.1
• Общие сведения о ROS
• ROS архитектура и философия
• Файловая система ROS.
• Мастер, узлы и темы в ROS
• Консольные команды
Тема 1.2
• Рабочее пространство Catkin и система
сборки
• Структура пакета ROS
• Подписчики и издатели ROS
• Действия и сервисы ROS
• Сервер параметров ROS и время
• Launch-файлы
Тема 2.1
• Использование средств ROSToolbox
пакета Matlab
• Работа с основными сообщениями ROS
• Издатели и подписчики в ROSToolbox.
• Преобразования и системное время
ROS
• Работа с bak-файлами
• Действия и сервисы
• ROS и Simulink.
Тема 2.2
• Устройство и организация
микрокомпьютера RaspberryPI
• Операционная система.
• Сопряжение с ROS
5. Накопительная рейтинговая оценка
Максимальное количество рейтинговых баллов по дисциплине за семестр
составляет 100 баллов, из них:
• посещаемость – 20 баллов;
• текущий контроль (3 лабораторные работы) – 30 баллов;
• самостоятельная работа (выполнение практических заданий на занятии) –
20 баллов;
• дополнительные баллы (экзамен либо выполнение индивидуального
творческого задания) – 30 баллов.
Поощряется командная работа, но каждый студент должен показывать
результаты самостоятельно на ПК и оценивается индивидуально
Задания проверяются по мере готовности. Рекомендуемый срок сдачи
задания до либо в день выдачи следующего задания, в противном случае
оценка снижается.
6. Структура лекции Темы 1.1
• Общие сведения о Robot Operating System (ROS)
• ROS архитектура и философия
• Файловая система ROS
• ROS мастер, узлы и темы
• Консольные команды
7. Что такое ROS?
ROS (Robot Operating System) - это мета-операционная система с открытым
исходным кодом для разрабатываемых приложений робототехники. Он
предоставляет услуги, которые вы ожидаете от операционной системы, включая
аппаратную абстракцию, низкоуровневое управление устройствами, реализацию
часто используемых функций, обмен сообщениями между процессами и
управление пакетами. ROS также предоставляет инструменты и библиотеки для
получения, сборки, написания и запуска кода на нескольких компьютерах.
8. История ROS?
▪ Первоначально разработанный в 2007 году в
Стэнфордской лаборатории искусственного
интеллекта
▪ ROS 1.0 – 2010 год, Стэнфорд
▪ С 2013 года под управлением OSRF
▪ ROS Kinetik (LTS) – 2016
▪ ROS Lunar – 2017
▪ ROS Melodic Morenia - 2018
▪ Сегодня используется многими
университетами и компаниями
▪ Де-факто стандарт для программирования
роботов
9. Что такое ROS?
▪ Управление процессом
▪ Межпроцессное
взаимодействие
▪ Драйверы устройств
ROS = Robot Operating System
▪ Организация
пакетов
▪ Распространение
программного
обеспечения
▪ Документация
▪ Учебники и
документация
▪ Моделирование
▪ Визуализация
▪ Графический
пользовательский
интерфейс
▪ Регистрация данных
▪ Контроль
▪ Планирование
▪ Восприятие
▪ Картирование
▪ Манипулирование
Источник
-
http://ros.org/
10. Что такое ROS?
Платформы (фреймворки) в робототехнике
Программная платформа для роботов включает в себя набор инструментов, которые
используются для разработки ПО роботов.
Аппаратные платформы, включают в себя готовые исследовательские и образовательные
устройства (TurtleBot, TurtleBro). А также готовые промышленные системы.
MSRDS12 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
Наиболее активные платформы
11. Почему стоит начать с ROS
Преимущества
• Популярность
• Open source
• Кроссплатформенность
• Многопоточность
• Поддержка модульного тестирования
Недостатки:
• Высокий порог входа
• Кроссплатформенность
• Отсутствие поддержки Windows, OS X (есть в ROS 2)
13. ROS - это не ...
• ROS не является языком программирования. На самом деле программы ROS
обычно пишутся на C ++. Клиентские библиотеки также доступны для Python,
Java, Lisp и нескольких других языков.
• ROS - это не только библиотека. Хотя ROS включает в себя клиентские
библиотеки, он также включает в себя (помимо прочего) центральный сервер,
набор инструментов командной строки, набор графических инструментов и
систему сборки.
• ROS не является интегрированной средой разработки. Хотя ROS не предписан
на какую-либо конкретную среду разработки, он может использоваться с
большинством популярных IDE. Также вполне естественно использовать ROS из
текстового редактора и командной строки без какой-либо IDE.
14. ROS Философия
▪ Одноранговая связь (Peer to peer)
Отдельные программы взаимодействуют через определенный API (сообщения ROS,
сервисы и т. Д.).
▪ Распределенная работа
Программы могут запускаться на нескольких компьютерах и обмениваться данными по
сети.
▪ Многоязычность
Модули ROS могут быть написаны на любом языке, для которого существует клиентская
библиотека (C ++, Python, MATLAB, Java и т. Д.).
▪ Малый «вес»
Автономные библиотеки обернуты тонким слоем ROS.
▪ Бесплатный и с открытым исходным кодом
Большинство программного обеспечения ROS с открытым исходным кодом и бесплатное
использование.
15. ROS Философия
ROS имеет три уровня концепций:
• уровень файловой системы
• уровень графа вычислений
• уровень сообщества.
Помимо трех уровней концепций, ROS также определяет два типа имен
• имена ресурсов пакета
• имена ресурсов графа.
16. Уровень файловой системы ROS
Понятия уровня файловой системы в основном охватывают ресурсы ROS, с которыми вы
сталкиваетесь на диске, например:
Пакеты: Пакеты - это основная единица для организации программного обеспечения в
ROS.
Метапакеты: метапакеты - это специализированные пакеты, которые служат только для
представления группы связанных других пакетов
Манифесты пакетов: манифесты (package.xml) предоставляют метаданные о пакете,
включая его имя, версию, описание, информацию о лицензии, зависимости и другую
метаинформацию, такую как экспортированные пакеты. Манифест пакета package.xml
определен в REP-0127.
Репозитории: набор пакетов, которые используют общую систему VCS.
Типы сообщений (msg): описания сообщений, хранящиеся в my_package / msg /
MyMessageType.msg, определяют структуры данных для сообщений, отправляемых в ROS.
Типы служб (srv): описания служб, хранящиеся в my_package / srv / MyServiceType.srv,
определяют структуры данных запроса и ответа для служб в ROS.
18. Уровень графа вычислений ROS
Граф вычислений - это одноранговая сеть процессов ROS, совместно обрабатывающих
данные.
Узлы: узлы - это процессы, выполняющие вычисления.
Мастер: Мастер ROS обеспечивает регистрацию имени и поиск в остальной части графа
вычислений.
Сервер параметров: Сервер параметров позволяет хранить данные с помощью ключа в
центральном месте.
Сообщения: узлы общаются друг с другом, передавая сообщения. Сообщение - это просто
структура данных, состоящая из типизированных полей.
Темы: сообщения маршрутизируются через транспортную систему с семантикой
публикации / подписки. Узел отправляет сообщение, публикуя его в заданной теме.
Сервисы: модель публикации / подписки - очень гибкая парадигма коммуникации, но ее
односторонний транспорт «многие ко многим» не подходит для взаимодействий типа
«запрос / ответ», которые часто требуются в распределенной системе.
Пакеты: Пакеты - это формат для сохранения и воспроизведения данных сообщений ROS.
19. Базовые понятия ROS. Взаимодействие
узлов.
Более подробно на
http://wiki.ros.org/rosnode
20. Базовые понятия ROS. Тема и узел.
В робототехнике нам часто приходится взаимодействовать с реальным миром. Одним
из типов устройств, которые мы можем использовать для получения информации об
окружающей среде, является датчик (сенсор): мы можем определить требуемую
характеристику некоторого параметра из окружающей среды и преобразовать его в
данные.
Являются ли датчики примером узла ROS или темой ROS?
21. Уровень сообщества ROS
Концепции уровня сообщества ROS - это ресурсы ROS, которые позволяют отдельным
сообществам обмениваться программным обеспечением и знаниями. Эти ресурсы
включают:
Дистрибутивы: Дистрибутивы ROS - это наборы стека с поддержкой версий, которые
вы можете установить.
Репозитории: ROS полагается на объединенную сеть репозиториев кода, где различные
учреждения могут разрабатывать и выпускать свои собственные программные
компоненты для роботов.
Wiki ROS: Wiki сообщества ROS является основным форумом для документирования
информации о ROS.
Система сообщений об ошибках
Списки рассылки: список рассылки ros-users является основным каналом связи с
новыми обновлениями ROS, а также форумом, где можно задавать вопросы о
программном обеспечении ROS.
22. ROS Имена
Имена ресурсов графа предоставляют иерархическую структуру именования, которая
используется для всех ресурсов в графе вычислений ROS, таких как узлы, параметры,
темы и службы.
несколько примеров имен:
• / (the global namespace)
• /foo
• /stanford/robot/name
• /wg/node1
Имена ресурсов графа - важный механизм в ROS для обеспечения инкапсуляции.
Каждый ресурс определяется в пространстве имен, которое он может использовать
совместно со многими другими ресурсами.
Ресурсы могут создавать ресурсы в своем пространстве имен, и они могут получать
доступ к ресурсам внутри или выше своего собственного пространства имен.
Связи могут быть выполнены между ресурсами в разных пространствах имен, но
обычно это делается с помощью кода интеграции над обоими пространствами имен.
Эта инкапсуляция изолирует различные части системы от случайного захвата ресурса с
неправильным именем или глобального перехвата имен.
23. ROS Имена
Имена разрешаются относительно, поэтому ресурсам не нужно знать, в каком
пространстве имен они находятся.
Это упрощает программирование, поскольку узлы, которые работают вместе, могут
быть записаны так, как если бы они все находились в пространстве имен верхнего
уровня.
Когда эти узлы интегрированы в более крупную систему, они могут быть помещены в
пространство имен, которое определяет их набор кода.
Инструменты (например, визуализация графика), а также параметры (например,
demo_name), которые должны быть видимы для всего графа, могут быть созданы
узлами верхнего уровня.
Например, можно взять демонстрацию Stanford и демонстрацию Willow Garage и
объединить их в новую демонстрацию с подграфами stanford и wg. Если бы в обеих
демонстрациях был узел с именем «камера», они не конфликтовали бы.
24. ROS Имена
Допустимое имя имеет следующие характеристики:
• Первый символ - это альфа-символ ([a-z | A-Z]), тильда (~) или косая черта (/).
• Последующие символы могут быть буквенно-цифровыми ([0-9 | a-z | A-Z]),
подчеркиванием (_) или косой чертой (/).
Исключение: базовые имена (описанные ниже) не могут содержать в себе косую черту
(/) или тильды (~).
В ROS существует четыре типа имен ресурсов графа: базовые, относительные,
глобальные и частные, которые имеют следующий синтаксис:
• base
• relative/name
• /global/name
• ~private/name
По умолчанию разрешение выполняется относительно пространства имен узла.
Например, узел /wg/node1 имеет пространство имен /wg, поэтому имя node2 будет
преобразовано в /wg/node2.
25. ROS Имена
Имена без каких-либо квалификаторов пространства имен являются базовыми
именами. Базовые имена на самом деле являются подклассом относительных имен и
имеют те же правила разрешения. Базовые имена наиболее часто используются для
инициализации имени узла.
Имена, начинающиеся с «/», являются глобальными - они считаются полностью
разрешенными. По возможности следует избегать использования глобальных имен,
поскольку они ограничивают переносимость кода.
Имена, начинающиеся с "~", являются личными. Они преобразуют имя узла в
пространство имен. Например, node1 в пространстве имен / wg / имеет частное
пространство имен / wg / node1. Частные имена полезны для передачи параметров
определенному узлу через сервер параметров.
Вот несколько примеров разрешения имен:
26. ROS Имена
Имена ресурсов пакетов используются в ROS с концепциями уровня файловой системы,
чтобы упростить процесс обращения к файлам и типам данных на диске. Имена
ресурсов пакета очень просты: они представляют собой просто имя пакета, в котором
находится ресурс, плюс имя ресурса. Например, имя «std_msgs / String» относится к
типу сообщения «String» в пакете «std_msgs».
Некоторые файлы, связанные с ROS, на которые можно ссылаться с использованием
имен ресурсов пакета, включают:
• Типы сообщений (msg)
• Типы сервисов (SRV)
• Типы узлов
Имена ресурсов пакета очень похожи на пути к файлам, за исключением того, что они
намного короче.
Допустимое имя имеет следующие характеристики:
• Первый символ - это альфа-символ ([a-z | A-Z])
• Последующие символы могут быть буквенно-цифровыми ([0-9 | a-z | A-Z]),
подчеркиваниями (_) или косой чертой (/).
• Имеет не более одной косой черты ('/').
27. ROS Концепции более высокого уровня
Существует несколько стеков, таких как common, common_msgs и geometry, которые
предоставляют эти высокоуровневые концепции для использования с ROS.
Координатные системы / преобразования
Пакет tf предоставляет распределенную структуру на основе ROS для расчета позиций
нескольких систем координат во времени.
Действия / Задачи
Пакет actionlib определяет общий тематический интерфейс для вытесняемых задач в
ROS.
Онтология сообщений
Определено несколько классов сообщений, включая:
actionlib_msgs: сообщения для представления действий.
diagnostic_msgs: сообщения для отправки диагностических данных.
geometry_msgs: сообщения для представления общих геометрических примитивов.
nav_msgs: сообщения для навигации.
sensor_msgs: сообщения для представления данных датчика.
28. ROS Концепции более высокого уровня
Плагины
pluginlib предоставляет библиотеку для динамической загрузки библиотек в коде C ++.
Фильтры
Пакет фильтров предоставляет библиотеку C ++ для обработки данных с
использованием последовательности фильтров.
Модель робота
Пакет urdf определяет формат XML для представления модели робота и предоставляет
синтаксический анализатор C ++.
29. Клиентская библиотека ROS
Клиентская библиотека ROS - это набор кода, который упрощает работу программиста
ROS.
Основные клиентские библиотеки
roscpp: roscpp - это клиентская библиотека C ++ для ROS
rospy: rospy - это чистая клиентская библиотека Python для ROS
roslisp: roslisp - это клиентская библиотека для LISP, которая в настоящее время
используется для разработки библиотек планирования
Экспериментальные клиентские библиотеки
roseus: roseus - это клиентская библиотека для языка EusLisp.
rosgo: чистая реализация на Go
rosjava: rosjava - это реализация ROS на чистой Java с поддержкой Android.
rosnodejs: rosnodejs - это собственная клиентская библиотека ROS Javascript для Node.js
RobotOS.jl - это собственный пакет Julia, который обертывает rospy.
rosR: rosR - это расширение ROS для языка статистического программирования R
rosruby: поддержка ruby
Интерфейс ROS-MATLAB: библиотека функций для подключения к ROS из MATLAB® .
Интерфейс ROS-Simulink: набор блоков Simulink® для подключения к ROS и
развертывания узлов ROS из Simulink® .
30. Базовые понятия ROS. Мастер (Master)
Мастер имеет регистрационные API, которые позволяют узлам регистрироваться
в качестве издателей, подписчиков и поставщиков услуг. Мастер имеет URI и
хранится в переменной среды ROS_MASTER_URI. Этот URI соответствует host: port
сервера XML-RPC, на котором он работает. По умолчанию мастер будет привязан
к порту 11311.
Мастер выполняет роль сервера имен для возможности подключения между
собой различных нод. Команда roscore запускает сервер мастера, и после этого к
нему могут подключиться и зарегистрироваться ноды ROS. Связь между нодами
(обмен сообщениями), невозможна без запущенного мастера.
При запуске ROS roscore, мастер будет запущен по адресу URI, установленным в
переменной окружения ROS_MASTER_URI. По умолчанию адрес использует IP-
адрес локального ПК и номер порта 11311
Запустить сервер мастера с помощью команды
Более подробно на
http://wiki.ros.org/Master
31. Базовые понятия ROS. Узел (Node).
Понятие узла, относится к наименьшей
"рабочей" единицы используемой в ROS.
Можно провести аналогию с одной
исполняемой программой. ROS рекомендует
создать один узел для каждой задачи, что
позволить легче использовать его в других
проектах.
При запуске узел регистрирует информацию о
себе на мастере (название узла, типы
обрабатываемых сообщений).
Зарегистрированный узел может
взаимодействовать с другими узлами (получать
и отправлять запросы).
Более подробно на
http://wiki.ros.org/Master
32. Базовые понятия ROS. Узел (Node).
Узел ROS имеет несколько API:
• Подчиненный API - это XMLRPC API, который
выполняет две роли: получение обратных
вызовов от мастера и согласование
соединений с другими узлами.
• Тематическая реализация транспортного
протокола. Узлы устанавливают
тематические связи друг с другом, используя
согласованный протокол. Самый общий
протокол - TCPROS, который использует
постоянные соединения сокетов TCP / IP с
отслеживанием состояния.
• API командной строки. Каждый узел должен
поддерживать аргументы переназначения
командной строки, которые позволяют
настраивать имена внутри узла во время Более подробно на
http://wiki.ros.org/Master
33. Базовые понятия ROS. Тема.
Тема (Topic), модель Издатель и Подписчик
Тема (Topic), это один из видов обмена сообщениями.
Узел издателя (publisher) сначала регистрирует свою тему на мастере, а затем начинает
публикацию сообщений в эту тему (топик). Узлы подписчиков, которые хотят получать
информацию из этой темы (типика) при помощи мастера получают адрес этой темы и
далее получают сообщения из нее.
Издатель (Publisher)
Издателем называется процесс, который рассылает сообщения в рамках созданного
топика для других узлов. Один узел может содержать несколько издателей,
публикующих данные в разные топики.
Подписчик (Subscriber)
Подписчиком (Subscriber) называется процесс, который получает сообщения из
определенной темы (Topic). Подписчик (Subscriber) регистрируется на Мастере (Master),
указывая какие темы Подписчик хочет получать. После этого Издатель (Publisher)
начинает отправлять сообщения подписчику. Связь с темой для подписчика является
асинхронной (издатель публикует сообщения в не зависимости от статуса
подписчиков).
34. Базовые понятия ROS. Тема.
Модель работы в режиме Topic, подразумевает использование одного типа сообщения
как для Издателя (Publisher) и подписчика (Subscriber).
Модель Topic являются однонаправленной и подразумевает непрерывную отправку
или получение сообщений. Такой способ коммуникации подходит для датчиков,
которым требуются периодическая передача данных. Несколько подписчиков могут
получать сообщения от одного издателя и наоборот (возможна работа несколько
издателей).
35. Базовые понятия ROS. Тема и узел.
Узлы и темы вместе образуют основу любого приложения ROS. Важно знать, как они
работают вместе!
Сколько узлов могут публиковать сообщения в одной теме?
36. Создание собственных приложений
ROS. Подписчики и издатели.
Является ли следующее утверждение Истинным или Ложным:
Тема ROS может быть опубликована без инициализации узла ROS.
37. Базовые понятия ROS. Сообщение.
Сообщение (Message)
Узлы отправляют и принимают данные
между собой, согласно заданного
формата. Эти данные называют
Сообщения, а описание Типом
Сообщения.
Сообщения могут быть простых типов
(integer, float, boolean) так и могут
состоять из сложных структур,
содержать вложенных сообщения и
массивы сообщений).
Более подробно на
http://wiki.ros.org/Messages
38. Базовые понятия ROS. Сообщение.
Более подробно на
http://wiki.ros.org/Messages
Структура данных, определяющая тип
темы:
▪ Состоит из вложенной структуры целых
чисел, чисел с плавающей точкой,
логических значений, строк и массивов
объектов
▪ Определена в * .msg файлах
Посмотреть тип темы
Опубликовать сообщение в теме
39. Базовые понятия ROS
Более подробно на
http://wiki.ros.org/Messages
Например для сообщение с координатами объекта (XYZ) есть существующий тип
сообщения geometry_msgs/Point.msg который описывается:
40. Базовые понятия ROS. Более подробно
о сообщениях.
Сообщение представляет собой структуры данных, которая используется при обмене данных
между узлами.
Топики (Topic), службы (Services) и Действия (Actions) используют сообщения для взаимодействия
между собой. Сообщения могут включать в себя как базовые типы (целое число, число с
плавающей точкой, логические и тд), так и массивы сообщений.
Помимо этого, сообщения могут инкапсулировать в себе другие существующие типы сообщений и
специальные заголовки.
Сообщения описываются в файлах .msg как пары значений: тип поля и имя поля.
fieldtype fieldname
fieldtype1 fieldname1
Для реального примера, сообщение может выглядеть так:
int32 x
int32 y
41. Базовые понятия ROS.
Базовые типы ROS
В таблице ниже описаны базовые типы ROS и их представление в языках С++ и Python
в ROS для C++ для Python
bool uint8_t bool
int8 int8_t int
uint8 uint8_t int
int16 int16_t int
uint16 uint16_t int
int32 int32_t int
uint32 uint32_t int
int64 int64_t long
uint64 uint64_t long
float32 float float
float64 double float
string std::string str
time ros::Time rospy.Time
duration ros::Duration rospy.Duration
Наследование типов сообщений
Сообщения могу содержать не только базовые
типы, но и использовать заново уже созданные
типы сообщений. Например сообщение типа
geometry_msgs/Pose описывается
конфигурацией
Point position
Quaternion orientation
где Point и Quaternion это существующие типы
сообщений.
42. Полезные ссылки
ROS Wiki
▪ http://wiki.ros.org/
Установка
▪ http://wiki.ros.org/ROS/Installation
Учебные материалы
▪ http://wiki.ros.org/ROS/Tutorials
Доступные пакеты
▪ http://www.ros.org/browse/
Шпаргалки (Cheat Sheet) ROS
▪ https://www.clearpathrobotics.com/ros-robot-operating-system-cheat-sheet/
▪ https://kapeli.com/cheat_sheets/ROS.docset/Contents/Resources/Documents/index
ROS Best Practices
▪ https://github.com/leggedrobotics/ros_best_practices/wiki
ROS Package Template
▪ https://github.com/leggedrobotics/ros_best_practices/tree/master/ros_package_template