forked from Drapegnik/bsu-science
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webcam.tex
44 lines (31 loc) · 5.61 KB
/
webcam.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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
\chapter{ЭКСПЕРИМЕНТЫ С МЕТОДОМ SLAM}
Для проверки возможности использования метода SLAM совместно с методами построения и восстановления карты местности было решено имитировать поток данный с БПЛА с помощью внешней веб-камеры, подключённой к порту usb.
\section{Настройка и калибровка камеры}
Для работы с веб-камерой через ROS требуется использовать пакет \textbf{cv-camera}, который предоставляет узел, взаимодействующий с камерой и принимающий от неё поток видео.
Как и во всех задачах компьютерного зрения, перед началом работы требуется откалибровать камеру, то есть получить её внутренние и внешние параметры. С помощью калибровки получаются такие параметры, как фокусное расстояние, угол наклона, и принципиальная точка (точка соответствующая центру фотографии), которые образуют так называемую матрицу камеры и коэффициенты дисторсии (искажения).
На рисунке \ref{fig:chess} представлен процесс калибровки камеры.
\begin{figure}[h]
\centering
\includegraphics[width=0.9\textwidth]{images/chess.png}
\caption{Калибровка камеры с помощью изображения шахматной доски}
\label{fig:chess}
\end{figure}
Процедура калибровки представляет из себя следующее:
\begin{enumerate}
\item Выбор предмета с известной геометрией, обычно используется изображение шахматной доски;
\item Подготовка 30 или более изображений выбранного предмета с разных ракурсов и расстояний;
\item Определение ключевых точек на полученных фотографиях;
\item Определение коэффициентов дисторсии через минимизацию ошибки;
\item Нахождение остальных параметров -- через решение уравнений, полученных путем сопоставления изображений.
\end{enumerate}
Полученные параметры камеры экспортируются в файл и используются для конфигурации SLAM алгоритмов.
\section{Связывание через ROS}
Для связывания компонент приложения вместе и запуска их через ROS будем регистрировать и создавать новые узлы.
Для начала создадим новый узел, который будет отвечать за веб-камеру. Он будет принимать от неё видео поток и публиковать его в специальный канал \textbf{/cv\_camera/image\_raw}. В качестве альтернативы веб-камеры можно использовать снимки из датасетов, которые рассматривались ранее. Для этого напишем простой узел, в котором можно задать частоту кадров в секунду и директорию, в которой находятся снимки. Также можно указать имя канала, в который узел будет публиковать снимки с заданной частотой. Последний вариант предпочтительнее для отладки, так как не требует подключения веб-камеры и её перемещения в пространстве, что является утомительным занятием. Пример работы представлен на рисунке \ref{fig:ros-slam}.
\begin{figure}[h]
\centering
\includegraphics[width=0.83\textwidth]{images/ros-slam.png}
\caption{Пример работы SLAM с веб-камерой}
\label{fig:ros-slam}
\end{figure}
Далее SLAM запускается как отдельный узел и подписывается на канал с изображениями. После получения данных он отправляет их процессам позиционирования и построения карты ориентиров. При определении положения камеры SLAM публикует эти данные в следующий канал. На этот канал, в свою очередь, подписано приложение, которое при получении данных с камеры визуализирует их и наносит на карту траекторию движения. После этого полученные от SLAM данные используются для инициализации процесса Structure From Motion, что ускоряет процесс построения плотной карты местности.