forked from Drapegnik/bsu-science
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ros.tex
24 lines (16 loc) · 5.75 KB
/
ros.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
\chapter{ФРЭЙМВОРК ROBOT OPERATING SYSTEM}
\section{Определение}
Операционная система для роботов \textbf{ROS} -- распределенный фрэймворк для программирования роботов \hyperref[itm:ros]{[\ref{itm:ros}]}. ROS включает в себя основные функции операционной системы: аппаратную абстракцию, низкоуровневый доступ к устройствам, предоставление стандартных функций для простых задач, управление пакетами. Несмотря на это ROS нельзя назвать операционной системой в традиционном понимании этого определения. Можно сказать, что ROS -- это удобная архитектура, а также набор правил и пакетов для её построения. Включает огромное количество свободно распространяемых пакетов, комбинируя которые, можно строить сложные системы (навигация, планирование, восприятие, моделирование и др.). Поддерживается только на операционной системе Linux (Ubuntu).
Основные достоинства ROS:
\begin{enumerate}
\item Возможность абстрагироваться от конкретного робота и оборудования для него;
\item Возможность повторного использования кода следующим способом: вынесение его в пакет и использование как зависимость;
\item Удобная отладка и тестирование как на реальном роботе, так и с помощью симулятора;
\item Распределённость, с помощью которой достигается высокий коэффициент масштабирования;
\item Независимость от языка разработки программного обеспечения, поддерживаются такие языки как: C++, Python, Matlab и другие.
\end{enumerate}
\section{Архитектура системы}
В основе ROS лежит система графа. Обработка данных осуществляется в узлах (\textit{nodes}), которые связываются \quotes{рёбрами} -- сообщениями. Для осуществления коммуникаций в системе существует понятие каналов (\textit{topics}). Каждый узел может как подписаться на получение сообщений из какого-то канала, так и осуществлять публикацию новых каналов и сообщений. Все узлы имеют уникальные имена и могут находить друг друга через специальный сервис -- \textit{master}. Каждый узел может предоставлять свой сервис или пользоваться сервисом другого узла. В отличие от сообщений, которые реализуют связь один ко многим, сервис позволяет устанавливать соединение один к одному. Поэтому сервис ожидает подтверждения о получении сообщения от своего подписчика. Сообщения поддерживают вложенные структуры, массивы, имеют строгую типизацию. Всё это предоставляет дополнительные возможности для удобной передачи данных. Узлы связываются с внешним миром через стандартные потоки ввода и вывода (\textbf{stdin/stdout}), представленные в виде пакета \textbf{rosout}. Все системные узлы объединены в подграф, который называется \textbf{roscore}.
\section{Выводы}
Таким образом ROS обеспечивает очень удобную и расширяемую систему для программирования роботов. Например, за работу обычного робота может отвечать сразу несколько условно независимых узлов: один контролирует лазер, с помощью которого робот ищет препятствие, другой -- управляет колесами и приводом, ещё один отвечает за позиционирование, а следующий за планирование.
Такое чёткое следование принципу разделения ответственности (\textit{single responsibility}) ведёт к дополнительной отказоустойчивости: так как узлы изолированы, то выход из строя одного не должен касаться остальных. Также это упрощает структуру кода, так как сразу, на уровне архитектуры, декомпозирует задачи и позволяет узлам экспортировать минимальный набор программных интерфейсов.