Skip to content

Commit

Permalink
add section about slam
Browse files Browse the repository at this point in the history
  • Loading branch information
Drapegnik committed Dec 11, 2017
1 parent deb2695 commit 9487959
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 6 deletions.
2 changes: 2 additions & 0 deletions literature.tex
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ \chapter*{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ}
% \item \label{itm:theia} Официальная документация библиотеки с открытым исходным кодом TheiaSfm [Электронный ресурс] / Chris Sweeney - 2016. - Режим доступа: \url{http://www.theia-sfm.org/}. - Дата доступа: 17.04.2017.

% \item \label{itm:last}\label{itm:qt} Официальный сайт C++ фрэймворка QT [Электронный ресурс] / The Qt Company - 2017. - Режим доступа: \url{https://www.qt.io/}. - Дата доступа: 20.04.2017.

\item \label{itm:cheeseman} Smith, R.C.; Cheeseman, P. On the Representation and Estimation of Spatial Uncertainty // The International Journal of Robotics Research - 1986. - no. 5 (4). - pp. 56–68.
\end{enumerate}

\newpage
2 changes: 1 addition & 1 deletion theory/bundle-adjustment.tex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
\section{Алгоритм \quotes{Bundle adjustment}}

\textbf{Bundle adjustment} (\quotes{\textit{регулировка пучков}}) - алгоритм проективной геометрии который, решая системы нелинейных уравнений (путем минимизации ошибки) находит 3d координаты ключевых точек в пространстве.
\textbf{Bundle adjustment} (дословно \quotes{\textit{регулировка пучков}}) - алгоритм проективной геометрии который, решая системы нелинейных уравнений (путем минимизации ошибки) находит 3d координаты ключевых точек в пространстве. Используется на последних этапах процесса Structure from Motion.

Одна трёхмерная точка в реконструируемой модели соответствует нескольким двухмерным точкам на исходных изображениях (потому что на снимках изображено одна и та же местность или объект с разных ракурсов). Если спроецировать 3d точку на изображения - лучи должны попасть в соответствующие ей 2d точки. И, в свою очередь, все лучи должны собраться в один \quotes{пучок} в точке на трёхмерной модели.

Expand Down
2 changes: 1 addition & 1 deletion theory/sfm.tex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
\section{Метод \quotes{Structure from Motion}}

\textbf{Structure from Motion} (\quotes{\textit{структура из движения}}, SFM) - техника построения трёхмерных структур из последовательности двухмерных изображений (фотографий, кадров видео) используемая в области компьютерного зрения. В биологии описывает феномен, позволяющий человеку восстанавливать трёхмерную структуру окружающего мира по двухмерным проекциям на сетчатку глаза.
\textbf{Structure from Motion} (дословно \quotes{\textit{структура из движения}}, SFM) - техника построения трёхмерных структур из последовательности двухмерных изображений (фотографий, кадров видео) используемая в области компьютерного зрения. В биологии описывает феномен, позволяющий человеку восстанавливать трёхмерную структуру окружающего мира по двухмерным проекциям на сетчатку глаза.

На рисунке \ref{fig:sfm} представлена схема, демонстрирующая процесс восстанавления 3d модели поверхности.

Expand Down
2 changes: 1 addition & 1 deletion theory/sift.tex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
\section{Алгоритм SIFT}

\textbf{Scale-invariant feature transform} (SIFT) - алгоритм компьютерного зрения для выделения ключевых точек и их дескрипторов. Алгоритм был разработан в Университете Британской Колумбии и опубликован Дэвидом Лоу (\textit{David G. Lowe}) в 1999 \hyperref[itm:lowe]{[\ref{itm:lowe}]}.
\textbf{Scale-invariant feature transform} (SIFT) - алгоритм компьютерного зрения для выделения ключевых точек и их дескрипторов. Алгоритм был разработан в Университете Британской Колумбии и опубликован Дэвидом Лоу (\textit{David G. Lowe}) в 1999 году \hyperref[itm:lowe]{[\ref{itm:lowe}]}.

На первом этапе часто производится предварительная обработка изображения в целях улучшения его качества для последующего анализа. Например, на фотографиях с камер возможно появление шумов. Чтобы их устранить используют гауссовское размытие с маленьким радиусом или медианные фильтры.

Expand Down
43 changes: 41 additions & 2 deletions theory/slam.tex
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
\section{Задача SLAM}
\section{Метод SLAM}

TODO
\textbf{Simultaneous Localization and Mapping (SLAM)} - Метод одновременной локализации и построения карты, первоначально предложенный Питером Чесманом (\textit{Peter Cheeseman}) и Рэндалом Смитом (\textit{Randall C. Smith}) для задачи ориентации колёсных роботов с лазерными сенсорами в плоских пространствах и опубликованный в 1986 \hyperref[itm:cheeseman]{[\ref{itm:cheeseman}]}.

В общем случае SLAM решает проблему построения или обновления карты неизвестной окружающей среды и одновременной навигации по ней. Используется в различных средах и с различными роботизированными устройствами, например: self-driving автомобили, домашние роботы (пылесосы), планетоходы, воздушные и даже подводные беспилотные аппараты.

Существует много различных реализаций и решений данной проблемы, это связано с тем фактором, что алгоритм сильно зависит от окружающей среды, в которой предполагается его использование. Так, например, выделяют среды з многочисленными ярко выраженными ориентирами (ландшафты с отдельно стоящими деревьями) и с их отсутствием (коридоры, комнаты). Так же алгоритмы разделяют по типу строящейся карты - плоская или трёхмерная. В первом случае может строиться карта препятствий - массив, где элементы, отражающие положение препятствий, имеют значение 1, а все остальные — 0, а во втором - облако точек описывающее окружающий мир.

SLAM представляет в себе \quotes{проблему курицы и яйца}: карта нужна для навигации по ней, но в то же время оценка текущего положения нужна для построения карты. Несмотря на это существуют алгоритмы, решающие эту проблему в реальном времени.

SLAM можно разбить на части:
\begin{enumerate}
\item Извлечение ориентиров (\textit{Landmarks extraction});
\item Объединение (сопостовление) ориентиров с разных позиций (\textit{Data association});
\item Оценка положения (\textit{State estimation});
\item Обновление положения и ориентиров (\textit{State and landmarks update}).
\end{enumerate}

Одной из важнейших состовляющих SLAM процесса, является получение сведений о текущей позиции робота через одометрию. Одометрия - использование данных о движении приводов, углах поворота колёс / лопастей, текущей скорости, показаний гироскопа для оценки перемещения. Одометрия даёт лишь приблизительное положение, которое SLAM и уточняет основываясь на ориентирах.

Следующие требования предъявляются к ориентирам:
\begin{enumerate}
\item Они должны быть легко выделятся с разных позиций используемым средством восприятия окружающей среды;
\item Они должны быть уникальны и легко отличимы друг от друга;
\item Их должно быть достаточное количество в окружающей среде;
\item Они должны быть стационарными.
\end{enumerate}

При использовании для навигации БПЛА камеры под все описанные требования подходят ключевые точки, которые мы рассматривали ранее. Они могут быть выделены и сопоставлены с помощью уже рассмотренных алгоритмов SIFT или ORB. В таком случае SLAM называют основанным на особых точках (\textit{feature based}).

Рассмотрим работу алгоритма на примере:
\begin{enumerate}
\item Робот выделяет ориентиры и их позиции;
\item Робот двигается. Через одометрию он вычисляет позицию в которой он \quotes{думает} что находится;
\item Робот опять оценивает положения ориентиров, но получает, что они находятся не там, где он \quotes{думает} они должны находится по расчётам. Это означает что положение полученное через одеметрию не точное;
\item Через данные о действительном расположении ориентиров обновляется позиция робота - таким образом происходит уточнение;
\item Положения ориентиров сохраняются для дальнейшей навигации по ним, алгоритм переходит на первый шаг.
\end{enumerate}

Для возможности работы алгоритма в реальном времени обработка каждой следующей порции данных (ориентиров, кадров с камеры) должна выполнятся до того, как будут получены новые данные. Это и отличает SLAM от рассмотренного ранее SFM, где на вход поступает сразу большое количество изображений и обрабатываются офлайн за большое количество времени.

Для триангуляции и расположения камер используется рассмотренный ранее Bundle Adjustment. Проблема в том что время его работы быстро растёт с увеличением размера построенной карты. Решается данная проблема с помощью разнесения задач локализации и построения карты по разным процессам. Ориентация происходит в реальном времени, а Bundle adjustment перестраивает карту в фоновом режиме. По завершению работы фоновый процесс обновляет карту для процесса ориентации, а тот, в свою очередь, добавляет новые ориентиры для уточнения карты и это повторяется бесконечно.
2 changes: 1 addition & 1 deletion theory/slams-comparison.tex
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
\section{Обзор различных реализаций решения задачи SLAM}
\section{Обзор различных SLAM-алгоритмов}

TODO

0 comments on commit 9487959

Please sign in to comment.