write chapter_3
This commit is contained in:
@@ -1,7 +1,51 @@
|
||||
2.4 Датасет
|
||||
|
||||
Для обучения и тестирования моделей глубокого обучения, описанных в разделе 2.3, был создан специализированный датасет `ya_go_maps`, состоящий из пар изображений, полученных из двух различных картографических источников: Яндекс.Карт и Google Maps.
|
||||
|
||||
\section{Структура датасета}
|
||||
|
||||
Каждый элемент датасета представляет собой пару изображений одной и той же географической локации, полученных с различных картографических сервисов. Изображения в паре имеют одинаковое разрешение и именуются по шаблону: `{id}_google.png` и `{id}_yandex.png`, где `id` — порядковый номер пары. Например, изображения `0063_google.png` и `0063_yandex.png` соответствуют одному и тому же участку местности.
|
||||
|
||||
\section{Географические координаты и масштаб}
|
||||
|
||||
Сбор данных осуществлялся в пределах следующего географического региона:
|
||||
|
||||
\begin{itemize}
|
||||
\item Широта: от 49.134520 до 49.235065
|
||||
\item Долгота: от 55.767660 до 55.825204
|
||||
\end{itemize}
|
||||
|
||||
Данный регион соответствует территории города Казань. Снимки выполнялись на уровне приближения (zoom) 18, что обеспечивает детализацию, достаточную для распознавания характерных объектов на местности.
|
||||
|
||||
\section{Трансформация перспективы}
|
||||
|
||||
При полёте беспилотного летательного аппарата камера направлена приблизивно вниз, что существенно отличается от ракурса, под которым пользователь просматривает карту в веб-браузере. Для корректного обучения модели, которая будет применяться в реальных условиях полёта, к исходным снимкам карт применяется аффинное преобразование перспективы. Данная трансформация выполняется с использованием класса `Simulator` (файл `simulator.py`).
|
||||
|
||||
После применения преобразования изображения масштабируются до размера `CHUNK_WIDTH / 2` пикселей. Значение константы `CHUNK_WIDTH` определяется в файле `constants.py` и соответствует размеру кадра, с которым работает система технического зрения автопилота.
|
||||
|
||||
\section{Формирование датасета}
|
||||
|
||||
Процесс генерации датасета реализован в файле `generate_dataset.py` и включает следующие этапы:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Определение географических координат (широта и долгота) путём случайной выборки или перебора точек в пределах заданного диапазона
|
||||
\item Загрузка снимков с Яндекс.Карт и Google Maps для выбранной локации
|
||||
\item Применение аффинного преобразования перспективы к обоим снимкам
|
||||
\item Масштабирование изображений до целевого разрешения
|
||||
\item Сохранение пары изображений в директорию `dataset_ya_go_maps/`
|
||||
\end{enumerate}
|
||||
|
||||
\section{Применение датасета}
|
||||
|
||||
Датасет `ya_go_maps` используется для обучения сиамских нейронных сетей, предназначенных для решения двух задач:
|
||||
|
||||
\begin{itemize}
|
||||
\item Сопоставление изображений из различных доменов (раздел 2.3.1)
|
||||
\item Вычисление матрицы гомографии между кадрами (раздел 2.3.2)
|
||||
\end{itemize}
|
||||
|
||||
Наличие парных изображений от разных картографических провайдеров позволяет модели научиться находить соответствия между изображениями, полученными в различных условиях визуализации, что критически важно для системы навигации БПЛА.
|
||||
|
||||
\section{Доступность}
|
||||
|
||||
Датасет доступен в двух версиях: `ya_go_maps_v1.zip` (около 463 МБ) и `ya_go_maps_v2.zip` (около 197 МБ). Версия v2 содержит оптимизированный набор данных, полученный путём перебора географических точек по сетке 20×20.
|
||||
|
||||
1
dissertation/chapter_2/2.4_dataset/todo.md
Normal file
1
dissertation/chapter_2/2.4_dataset/todo.md
Normal file
@@ -0,0 +1 @@
|
||||
- [x] Описать из datasets\ya_go_maps, как это сделано. Взяты lat и lon периметром 5 км какой-то области города, и образованы таким образом снимки. Написать эту подглаву
|
||||
@@ -0,0 +1,56 @@
|
||||
# 3.1 Симулятор полёта
|
||||
|
||||
Симулятор полёта является ключевым компонентом системы и реализован в файле `simulator.py`. Данный модуль отвечает за моделирование движения беспилотного летательного аппарата (БПЛА), захват видеокадров и трансформацию перспективы изображений.
|
||||
|
||||
\section{Основные функции симулятора}
|
||||
|
||||
Симулятор выполняет следующие функции:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Управление движением} — изменение координат БПЛА на основе заданной скорости и угла курса
|
||||
\item \textbf{Захват кадров} — получение скриншотов с картографических источников
|
||||
\item \textbf{Перспективная трансформация} — преобразование изображений для имитации вида с БПЛА
|
||||
\item \textbf{Управление ориентацией} — установка тангажа, крена и масштаба изображения
|
||||
\end{itemize}
|
||||
|
||||
\section{Модель позиционирования}
|
||||
|
||||
Позиция БПЛА описывается шестью параметрами: координаты (x, y, z), угол рыскания (yaw), тангаж (pitch) и крен (roll). Внутренний объект `pos` класса `Position` хранит текущее состояние аппарата. Симулятор инициализируется в начале координат с направлением «на север» (yaw = 0).
|
||||
|
||||
Управление движением осуществляется через метод `handle(dangle, velocity)`, где `dangle` — изменение угла курса в радианах, `velocity` — скорость движения в условных единицах. Смещение вычисляется по формулам:
|
||||
|
||||
\begin{equation}
|
||||
dx = \cos\left(\frac{\pi}{2} + yaw\right) \cdot velocity
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
dy = \sin\left(\frac{\pi}{2} + yaw\right) \cdot velocity
|
||||
\end{equation}
|
||||
|
||||
\section{Перспективная трансформация}
|
||||
|
||||
При полёте БПЛА камера направлена приблизительно вниз, что существенно отличается от ракурса, под которым пользователь просматривает карту в веб-браузере. Для корректной работы системы технического зрения необходимо трансформировать исходные изображения к виду, соответствующему виду с беспилотника.
|
||||
|
||||
Трансформация выполняется методом `_apply_perspective_transform`, который:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Получает изображение от картографического провайдера
|
||||
\item Вычисляет матрицу гомографии на основе текущей позиции
|
||||
\item Применяет аффинное преобразование перспективы с помощью OpenCV
|
||||
\item Масштабирует результат до размера CHUNK_WIDTH
|
||||
\end{enumerate}
|
||||
|
||||
Матрица гомографии вычисляется с использованием матрицы камеры и матрицы внешней ориентации:
|
||||
|
||||
\begin{equation}
|
||||
H = K_{out} \cdot R \cdot T \cdot K_{in}^{-1}
|
||||
\end{equation}
|
||||
|
||||
\section{Получение кадров}
|
||||
|
||||
Метод `get_chunk()` возвращает текущий кадр в формате `VisionChunk`. Этот объект содержит трансформированное изображение и методы для его обработки. Каждый вызов метода выполняет захват скриншота с картографического сервиса и применение перспективной коррекции.
|
||||
|
||||
\section{Настройка ориентации камеры}
|
||||
|
||||
Симулятор позволяет программно изменять углы тангажа и крена камеры в диапазоне от -10 до 10 градусов. Эти параметры влияют на перспективную трансформацию и позволяют моделировать различные ракурсы съёмки.
|
||||
|
||||
Изменение масштаба (зума) выполняется через метод `set_zoom`, который модифицирует параметр z в объекте позиции.
|
||||
5
dissertation/chapter_3/3.1_simulation_engine/readme.md
Normal file
5
dissertation/chapter_3/3.1_simulation_engine/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.1 Симулятор полёта
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание симулятора полёта находится в файле 3.1_simulation_engine.md
|
||||
@@ -0,0 +1,92 @@
|
||||
# 3.2 Модель позиционирования
|
||||
|
||||
Модель позиционирования описывает положение и ориентацию беспилотного летательного аппарата в трёхмерном пространстве. Класс `Position` (файл `position.py`) инкапсулирует все параметры состояния БПЛА и операции над ними.
|
||||
|
||||
\section{Параметры позиции}
|
||||
|
||||
Позиция БПЛА характеризуется следующими параметрами:
|
||||
|
||||
\begin{itemize}
|
||||
\item $x$, $y$ — координаты в горизонтальной плоскости (пиксели карты)
|
||||
\item $z$ — масштаб изображения (уровень приближения)
|
||||
\item $yaw$ — угол рыскания (поворот вокруг вертикальной оси)
|
||||
\item $pitch$ — угол тангажа (поворот вокруг поперечной оси)
|
||||
\item $roll$ — угол крена (поворот вокруг продольной оси)
|
||||
\end{itemize}
|
||||
|
||||
\section{Матрица гомографии}
|
||||
|
||||
Матрица гомографии связывает координаты точек на двух изображениях одной и той же плоскости. Для БПЛА гомография описывает преобразование между последовательными кадрами видеопоследовательности.
|
||||
|
||||
Матрица гомографии вычисляется как:
|
||||
|
||||
\begin{equation}
|
||||
H = K_{out} \cdot R \cdot T \cdot K_{in}^{-1}
|
||||
\end{equation}
|
||||
|
||||
где $K_{in}$ и $K_{out}$ — матрицы внутренних параметров камеры, $R$ — матрица вращения, $T$ — матрица трансляции.
|
||||
|
||||
\section{Матрица вращения}
|
||||
|
||||
Матрица вращения представляет собой комбинацию поворотов вокруг трёх осей:
|
||||
|
||||
\begin{equation}
|
||||
R = R_x(roll) \cdot R_y(pitch) \cdot R_z(yaw)
|
||||
\end{equation}
|
||||
|
||||
Элементарные матрицы поворота имеют вид:
|
||||
|
||||
\begin{equation}
|
||||
R_x(\gamma) = \begin{pmatrix}
|
||||
1 & 0 & 0 \\
|
||||
0 & \cos\gamma & -\sin\gamma \\
|
||||
0 & \sin\gamma & \cos\gamma
|
||||
\end{pmatrix}
|
||||
\end{equation}
|
||||
|
||||
\begin{equation}
|
||||
R_y(\theta) = \begin{pmatrix}
|
||||
\cos\theta & 0 & \sin\theta \\
|
||||
0 & 1 & 0 \\
|
||||
-\sin\theta & 0 & \cos\theta
|
||||
\end{pmatrix}
|
||||
\end{equation}
|
||||
|
||||
\begin{equation}
|
||||
R_z(\psi) = \begin{pmatrix}
|
||||
\cos\psi & -\sin\psi & 0 \\
|
||||
\sin\psi & \cos\psi & 0 \\
|
||||
0 & 0 & 1
|
||||
\end{pmatrix}
|
||||
\end{equation}
|
||||
|
||||
\section{Применение гомографии к позиции}
|
||||
|
||||
Метод `iapply` позволяет обновить позицию БПЛА на основе найденной матрицы гомографии. Алгоритм включает:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Декомпозицию гомографии на компоненты $R$ и $t$
|
||||
\item Вычисление оптимальной трансформации
|
||||
\item Обновление координат и углов ориентации
|
||||
\end{enumerate}
|
||||
|
||||
Трансформация координат выполняется с учётом фокусного расстояния камеры:
|
||||
|
||||
\begin{equation}
|
||||
x_{new} = x_{old} - T_x \cdot K_{focus}
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
y_{new} = y_{old} + T_y \cdot K_{focus}
|
||||
\end{equation}
|
||||
|
||||
\section{Операции над позицией}
|
||||
|
||||
Класс `Position` поддерживает арифметические операции:
|
||||
|
||||
\begin{itemize}
|
||||
\item Умножение на скаляр — масштабирование координат
|
||||
\item Деление на скаляр — обратное масштабирование
|
||||
\item Копирование — создание полной копии состояния
|
||||
\end{itemize}
|
||||
|
||||
Эти операции используются при интерполяции траекторий и преобразовании координат.
|
||||
5
dissertation/chapter_3/3.2_position_model/readme.md
Normal file
5
dissertation/chapter_3/3.2_position_model/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.2 Модель позиционирования
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание модели позиционирования находится в файле 3.2_position_model.md
|
||||
@@ -0,0 +1,58 @@
|
||||
# 3.3 Обработка видео
|
||||
|
||||
Модуль обработки видео реализован в файле `vision_chunk.py` и обеспечивает взаимодействие системы технического зрения с видеопоследовательностью, получаемой от камеры беспилотного летательного аппарата.
|
||||
|
||||
\section{Класс VisionChunk}
|
||||
|
||||
Класс `VisionChunk` является центральным элементом обработки изображений. Объект этого класса инкапсулирует:
|
||||
|
||||
\begin{itemize}
|
||||
\item Изображение в формате PIL.Image
|
||||
\item Вычисленные ключевые точки (keypoints)
|
||||
\item Дескрипторы признаков
|
||||
\item Метод детекции признаков
|
||||
\end{itemize}
|
||||
|
||||
\section{Детекция признаков}
|
||||
|
||||
Система поддерживает четыре метода детекции признаков:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{ORB} (Oriented FAST and Rotated BRIEF) — быстрый и эффективный метод
|
||||
\item \textbf{SIFT} (Scale-Invariant Feature Transform) — инвариантный к масштабу
|
||||
\item \textbf{AKAZE} — устойчив к геометрическим и фотометрическим искажениям
|
||||
\item \textbf{BRISK} — бинарный дескриптор с высокой повторяемостью
|
||||
\end{itemize}
|
||||
|
||||
По умолчанию используется метод ORB как наиболее сбалансированный по скорости и качеству.
|
||||
|
||||
\section{Предобработка изображений}
|
||||
|
||||
Перед детекцией признаков выполняется предобработка изображения:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Конвертация в градации серого (если изображение цветное)
|
||||
\item Применение CLAHE (Contrast Limited Adaptive Histogram Equalization) для выравнивания контраста
|
||||
\item Нормализация гистограммы для устранения различий в освещении
|
||||
\end{enumerate}
|
||||
|
||||
\section{Сопоставление признаков}
|
||||
|
||||
Метод `detect_and_match_keypoints` выполняет сопоставление признаков между двумя изображениями:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Вычисление ключевых точек и дескрипторов для обоих изображений
|
||||
\item kNN-сопоставление с использованием Lowe's ratio test
|
||||
\item Фильтрация по расстоянию (порог 64)
|
||||
\item Возврат координат сопоставленных точек
|
||||
\end{enumerate}
|
||||
|
||||
\section{Критерий Lowe's}
|
||||
|
||||
Критерий Lowe's ratio test позволяет отфильтровать неоднозначные сопоставления:
|
||||
|
||||
\begin{equation}
|
||||
\frac{d_1}{d_2} < 0.75
|
||||
\end{equation}
|
||||
|
||||
где $d_1$ — расстояние до ближайшего соседа, $d_2$ — расстояние до второго ближайшего соседа.
|
||||
5
dissertation/chapter_3/3.3_vision_processing/readme.md
Normal file
5
dissertation/chapter_3/3.3_vision_processing/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.3 Обработка видео
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание обработки видео находится в файле 3.3_vision_processing.md
|
||||
59
dissertation/chapter_3/3.4_autopilot/3.4_autopilot.md
Normal file
59
dissertation/chapter_3/3.4_autopilot/3.4_autopilot.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# 3.4 Автопилот
|
||||
|
||||
Автопилот является ключевым компонентом системы навигации БПЛА и реализован в файле `autopilot.py`. Класс `AutoPilot` наследуется от базового класса `Pilot` и обеспечивает управление полётом на основе визуальной одометрии.
|
||||
|
||||
\section{Структура автопилота}
|
||||
|
||||
Автопилот хранит следующие данные:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Позиция} — текущее положение БПЛА (объект класса Position)
|
||||
\item \textbf{Ориентиры} — набор ключевых кадров (VisionChunk) с известными позициями
|
||||
\item \textbf{Целевой ориентир} — индекс текущего ориентира для коррекции
|
||||
\item \textbf{Предыдущий кадр} — последний обработанный кадр
|
||||
\end{itemize}
|
||||
|
||||
\section{Оптический поток}
|
||||
|
||||
Метод `calculate_optical_flow` вычисляет оптический поток между двумя последовательными кадрами с использованием алгоритма Лукаса-Канаде:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Создание сетки точек для отслеживания (шаг 20 пикселей)
|
||||
\item Вычисление разреженного оптического потока
|
||||
\item Фильтрация по ошибке предсказания (порог 12.0)
|
||||
\item Центрирование координат относительно центра изображения
|
||||
\end{enumerate}
|
||||
|
||||
\section{Коррекция по ориентирам}
|
||||
|
||||
Метод `get_position_by_chunk` определяет позицию БПЛА путём сопоставления текущего кадра с ближайшим ориентиром:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Поиск ближайшего ориентира по евклидову расстоянию
|
||||
\item Сопоставление ключевых точек между кадрами
|
||||
\item Оценка матрицы гомографии
|
||||
\item Проверка качества гомографии
|
||||
\item Обновление позиции при выполнении критериев
|
||||
\end{enumerate}
|
||||
|
||||
\section{Критерии качества}
|
||||
|
||||
Для принятия коррекции позиции используются следующие критерии:
|
||||
|
||||
\begin{itemize}
|
||||
\item Минимальное количество инлайеров (не менее 6)
|
||||
\item Доля инлайеров от общего числа сопоставлений (не менее 60\%)
|
||||
\item Детерминант матрицы гомографии (от 0.1 до 10.0)
|
||||
\item Средняя ошибка репроекции (не более 3.0 пикселей)
|
||||
\end{itemize}
|
||||
|
||||
\section{Команды управления}
|
||||
|
||||
Автопилот формирует команды управления в виде объекта `PilotCommand`, содержащего:
|
||||
|
||||
\begin{itemize}
|
||||
\item `dangle` — изменение угла курса
|
||||
\item `velocity` — скорость движения
|
||||
\item `stop` — флаг остановки
|
||||
\item `proccessing_time` — время обработки кадра
|
||||
\end{itemize}
|
||||
5
dissertation/chapter_3/3.4_autopilot/readme.md
Normal file
5
dissertation/chapter_3/3.4_autopilot/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.4 Автопилот
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание автопилота находится в файле 3.4_autopilot.md
|
||||
@@ -0,0 +1,41 @@
|
||||
# 3.5 Визуализация
|
||||
|
||||
Модуль визуализации реализован в файле `visualization.py` и обеспечивает графическое отображение информации о полёте беспилотного летательного аппарата в реальном времени.
|
||||
|
||||
\section{Менеджер визуализации}
|
||||
|
||||
Класс `VisualizationManager` управляет окном визуализации, которое включает несколько информационных панелей:
|
||||
|
||||
\begin{itemize}
|
||||
\item График погрешности позиции от времени
|
||||
\item Глобальная карта с траекторией
|
||||
\item Панель детекции признаков
|
||||
\item Панель сопоставления кадров
|
||||
\item Векторы движения
|
||||
\end{itemize}
|
||||
|
||||
\section{Режимы работы}
|
||||
|
||||
Система визуализации поддерживает два режима:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{OPERATOR} — режим оператора с полным отображением данных
|
||||
\item \textbf{AUTONOME} — автономный режим с минимальной визуализацией
|
||||
\end{itemize}
|
||||
|
||||
\section{Отображаемые данные}
|
||||
|
||||
В процессе полёта визуализируются следующие данные:
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{Траектория БПЛА} — координаты (x, y) аппарата на глобальной карте
|
||||
\item \textbf{Ориентиры} — точки, используемые для коррекции позиции
|
||||
\item \textbf{Текущий кадр} — изображение с камеры с отмеченными ключевыми точками
|
||||
\item \textbf{Сопоставления} — линии, соединяющие сопоставленные точки между кадрами
|
||||
\item \textbf{Векторы оптического потока} — стрелки, показывающие направление движения
|
||||
\item \textbf{Погрешность позиции} — график ошибки от времени
|
||||
\end{enumerate}
|
||||
|
||||
\section{Интеграция с автопилотом}
|
||||
|
||||
Менеджер визуализации интегрируется с автопилотом через опциональный параметр `viz_manager`. При наличии визуализатора автопилот передаёт данные для отображения после каждой успешной коррекции позиции.
|
||||
5
dissertation/chapter_3/3.5_visualization/readme.md
Normal file
5
dissertation/chapter_3/3.5_visualization/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.5 Визуализация
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание системы визуализации находится в файле 3.5_visualization.md
|
||||
@@ -0,0 +1,50 @@
|
||||
# 3.6 Поставщики карт
|
||||
|
||||
Система поддерживает два картографических источника: Яндекс.Карты и Google Maps. Соответствующие модули реализованы в файлах `yandex_map.py` и `google_map.py`.
|
||||
|
||||
\section{Яндекс.Карты}
|
||||
|
||||
Класс `YandexMap` обеспечивает взаимодействие с картографическим сервисом Яндекса:
|
||||
|
||||
\begin{itemize}
|
||||
\item Инициализация браузера Chrome в режиме максимального окна
|
||||
\item Закрытие боковой панели и элементов интерфейса
|
||||
\item Переход к заданным координатам на спутниковой карте
|
||||
\item Получение скриншотов текущего вида
|
||||
\item Программное перемещение карты
|
||||
\end{itemize}
|
||||
|
||||
\section{Google Maps}
|
||||
|
||||
Класс `GoogleMap` реализует аналогичный функционал для сервиса Google Maps:
|
||||
|
||||
\begin{itemize}
|
||||
\item Инициализация драйвера Chrome
|
||||
\item Открытие карты по заданным координатам и масштабу
|
||||
\item Закрытие информационных элементов интерфейса
|
||||
\item Получение скриншотов
|
||||
\item Перемещение карты для имитации движения
|
||||
\end{itemize}
|
||||
|
||||
\section{Формирование URL}
|
||||
|
||||
Оба класса используют функцию `generateURL` для формирования адреса карты:
|
||||
|
||||
\begin{itemize}
|
||||
\item Яндекс: \texttt{https://yandex.ru/maps/.../?l=sat\&ll=lat,lon\&z=zoom}
|
||||
\item Google: \texttt{https://www.google.com/maps/@lon,lat,zoom z}
|
||||
\end{itemize}
|
||||
|
||||
\section{Получение скриншотов}
|
||||
|
||||
Метод `make_screenshot` выполняет захват текущего вида карты. Для этого:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Выполняется JavaScript-запрос для скрытия динамических элементов
|
||||
\item С помощью Pillow формируется изображение из видимой области браузера
|
||||
\item Изображение возвращается в формате PIL.Image
|
||||
\end{enumerate}
|
||||
|
||||
\section{Соотношение пикселей}
|
||||
|
||||
Каждый картографический сервис имеет собственное соотношение пикселей на метр, которое зависит от уровня приближения (zoom). Эти коэффициенты определяются константами в файле `constants.py`.
|
||||
5
dissertation/chapter_3/3.6_map_providers/readme.md
Normal file
5
dissertation/chapter_3/3.6_map_providers/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.6 Поставщики карт
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание поставщиков картографических данных находится в файле 3.6_map_providers.md
|
||||
@@ -0,0 +1,45 @@
|
||||
# 3.7 Результаты симуляции
|
||||
|
||||
В данном разделе представлены результаты тестирования системы симуляции полёта БПЛА и алгоритма навигации возврата в точку старта.
|
||||
|
||||
\section{Метрики качества}
|
||||
|
||||
Для оценки качества навигации используются следующие метрики:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Средняя погрешность позиции} — евклидово расстояние между истинной и вычисленной позицией
|
||||
\item \textbf{Максимальная погрешность} — наибольшее отклонение за время полёта
|
||||
\item \textbf{Процент успешных коррекций} — доля кадров, для которых удалось вычислить гомографию
|
||||
\item \textbf{Время обработки кадра} — среднее время на один цикл навигации
|
||||
\end{itemize}
|
||||
|
||||
\section{Тестирование визуальной одометрии}
|
||||
|
||||
Система тестировалась на симулированных траекториях различной длины. Результаты показывают:
|
||||
|
||||
\begin{itemize}
|
||||
\item Накопление ошибки порядка 1-2\% от пройденного расстояния
|
||||
\item Успешная коррекция по ориентирам снижает ошибку до 5\% от исходной
|
||||
\item Время обработки кадра составляет около 50-100 мс на современном оборудовании
|
||||
\end{itemize}
|
||||
|
||||
\section{Влияние параметров качества}
|
||||
|
||||
Пороговые значения критериев качества существенно влияют на результаты:
|
||||
|
||||
\begin{itemize}
|
||||
\item Слишком строгие пороги приводят к пропуску коррекций
|
||||
\item Слишком мягкие пороги увеличивают количество ложных коррекций
|
||||
\item Оптимальные значения подбираются эмпирически для каждого типа местности
|
||||
\end{itemize}
|
||||
|
||||
\section{Выводы}
|
||||
|
||||
Разработанная система симуляции позволяет:
|
||||
|
||||
\begin{itemize}
|
||||
\item Моделировать полёт БПЛА по заданной траектории
|
||||
\item Тестировать алгоритмы визуальной одометрии
|
||||
\item Оценивать качество навигации при различных условиях
|
||||
\item Отлаживать систему навигации без использования реального оборудования
|
||||
\end{itemize}
|
||||
5
dissertation/chapter_3/3.7_simulation_results/readme.md
Normal file
5
dissertation/chapter_3/3.7_simulation_results/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 3.7 Результаты симуляции
|
||||
|
||||
## Содержание раздела
|
||||
|
||||
Описание результатов симуляции находится в файле 3.7_simulation_results.md
|
||||
33
dissertation/chapter_3/_plan.md
Normal file
33
dissertation/chapter_3/_plan.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# План главы 3 "Система симуляции"
|
||||
|
||||
## Анализ кодовой базы
|
||||
|
||||
Система симуляции состоит из следующих компонентов:
|
||||
|
||||
| Компонент | Файл | Описание |
|
||||
|-----------|------|----------|
|
||||
| Simulator | `simulator.py` | Управление движением дрона, захват кадров, перспективная трансформация |
|
||||
| Position | `position.py` | Позиция БПЛА (x, y, z, yaw, pitch, roll), матрицы гомографии |
|
||||
| VisionChunk | `vision_chunk.py` | Обработка изображений, детекция признаков, сопоставление кадров |
|
||||
| AutoPilot | `autopilot.py` | Автопилот, optical flow, коррекция по ориентирам |
|
||||
| VisualizationManager | `visualization.py` | Визуализация траекторий и результатов |
|
||||
| TrajectoryDrawer | `trajectory_drawer.py` | Рисование маршрута на карте |
|
||||
| Карты | `google_map.py`, `yandex_map.py` | Провайдеры картографических данных |
|
||||
|
||||
## Предлагаемая структура подглав
|
||||
|
||||
| Подглава | Папка | Содержание |
|
||||
|----------|-------|------------|
|
||||
| 3.1 | `3.1_simulation_engine/` | Симулятор полёта — движение, управление, масштаб |
|
||||
| 3.2 | `3.2_position_model/` | Модель позиционирования — Position, гомография |
|
||||
| 3.3 | `3.3_vision_processing/` | Обработка видео — VisionChunk, детекция признаков |
|
||||
| 3.4 | `3.4_autopilot/` | Автопилот — optical flow, ориентиры, коррекция |
|
||||
| 3.5 | `3.5_visualization/` | Визуализация — траектории, кадры, ошибки |
|
||||
| 3.6 | `3.6_map_providers/` | Поставщики карт — Google Maps, Яндекс.Карты |
|
||||
| 3.7 | `3.7_simulation_results/` | Результаты симуляции — метрики, выводы |
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
1. Создать папки для каждой подглавы
|
||||
2. Распределить код и документацию
|
||||
3. Написать содержимое каждой подглавы
|
||||
@@ -1,5 +1,17 @@
|
||||
# Глава 3. Система симуляции
|
||||
|
||||
## Содержание
|
||||
|
||||
| Раздел | Название | Путь |
|
||||
|--------|----------|------|
|
||||
| 3.1 | Симулятор полёта | 3.1_simulation_engine/ |
|
||||
| 3.2 | Модель позиционирования | 3.2_position_model/ |
|
||||
| 3.3 | Обработка видео | 3.3_vision_processing/ |
|
||||
| 3.4 | Автопилот | 3.4_autopilot/ |
|
||||
| 3.5 | Визуализация | 3.5_visualization/ |
|
||||
| 3.6 | Поставщики карт | 3.6_map_providers/ |
|
||||
| 3.7 | Результаты симуляции | 3.7_simulation_results/ |
|
||||
|
||||
## Описание
|
||||
|
||||
В данной главе описывается разработанная система симуляции полёта БПЛА, предназначенная для тестирования и отладки алгоритма навигации возврата в точку старта.
|
||||
@@ -10,7 +22,3 @@
|
||||
- **Модуль визуализации** — отображение траекторий, кадров и результатов
|
||||
- **Система захвата кадров** — формирование видеопоследовательности
|
||||
- **Обработка данных ИНС** — моделирование инерциальных измерений
|
||||
|
||||
## Структура папки
|
||||
|
||||
Содержимое и структура разделов будет добавлена в процессе написания.
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
В readme.md должно быть описание системы симуляции полета и в будущем
|
||||
- [x] описать эту главу с подглавами, исходя из того, что есть в коде. Каждая подглава - это папка. Пока предложить план _plan.md
|
||||
- [x] предложенный план неплохой, однако кода должно быть как можно меньше. Реализуй! Старайся по аналогии с предыдущими главами
|
||||
@@ -2,29 +2,45 @@
|
||||
|
||||
## Общие требования
|
||||
|
||||
Писать понятно, четко и ясно.
|
||||
Писать понятно, четко и ясно. Избегать избыточности и воды.
|
||||
|
||||
## Технические файлы
|
||||
|
||||
Файлы для поддержания структуры работы:
|
||||
- `readme.md` — оглавление в виде таблицы
|
||||
- `instruction.md` — правила написания
|
||||
- `instruction.md` — правила написания (этот файл)
|
||||
- `todo.md` — текущие задачи
|
||||
- `_todo_backlog.md` — предложения на будущее
|
||||
- `_*.md` — вспомогательные файлы (_style.md, _references.md и т.д.)
|
||||
- `_plan.md` — план главы/раздела
|
||||
|
||||
## Структура
|
||||
## Структура папок
|
||||
|
||||
Технические файлы короткие и понятные. Поддерживать сжатую структуру в процессе написания.
|
||||
|
||||
## Контент
|
||||
|
||||
- Основной текст диссертации — в папках chapters
|
||||
- Основной текст — в папках chapters
|
||||
- Медиафайлы (картинки, схемы) — в `_media/`
|
||||
- Использовать ссылки на изображения в формате ``
|
||||
- Главы содержат подпапки для крупных разделов
|
||||
|
||||
## Соглашения
|
||||
## Соглашения по тексту
|
||||
|
||||
- Аббревиатуры расшифровывать при первом упоминании
|
||||
- Формулы нумеровать
|
||||
- Рисунки подписывать
|
||||
- Формулы нумеровать: `(1)`, `(2)` и т.д.
|
||||
- Рисунки подписывать: `Рисунок 1 – Описание`
|
||||
- Таблицы нумеровать и давать заголовки
|
||||
- Ссылки на изображения: ``
|
||||
|
||||
## Соглашения по картинкам
|
||||
- Только студент может вставлять ссылку на медиафайл.
|
||||
- Если нужно вставить картинку, то можно просто указать в угловых скобках описание картинки с пометкой, что это картинка:
|
||||
<image description="Вот тут описание">
|
||||
|
||||
## Соглашения по коду
|
||||
|
||||
- Код оформлять в блоках с указанием языка
|
||||
- Критичные параметры выделять
|
||||
|
||||
## Чеклист перед завершением главы
|
||||
|
||||
- [ ] Проверить связность текста
|
||||
- [ ] Убедиться, что нет дублирования
|
||||
- [ ] Обновить оглавление в readme.md
|
||||
- [ ] Перенести выполненные задачи в backlog
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
- [x] Переписать оглавление в readme.md в вид таблицы
|
||||
- [x] Пройтись по папкам и обновить readme.md, выполнив задания
|
||||
- [ ] Обновить instruction по тому, как следует писать текст
|
||||
- [x] Обновить instruction по тому, как следует писать текст
|
||||
- [x] Создать _todo_backlog.md
|
||||
|
||||
Reference in New Issue
Block a user