From 2561ba1cbf79db586e3bd8a64e3a34af569ba0ba Mon Sep 17 00:00:00 2001 From: russian_proger Date: Wed, 1 Apr 2026 14:00:38 +0300 Subject: [PATCH] write chapter_3 --- .../chapter_2/2.4_dataset/2.4_dataset.md | 44 +++++++++ dissertation/chapter_2/2.4_dataset/todo.md | 1 + .../3.1_simulation_engine.md | 56 +++++++++++ .../chapter_3/3.1_simulation_engine/readme.md | 5 + .../3.2_position_model/3.2_position_model.md | 92 +++++++++++++++++++ .../chapter_3/3.2_position_model/readme.md | 5 + .../3.3_vision_processing.md | 58 ++++++++++++ .../chapter_3/3.3_vision_processing/readme.md | 5 + .../chapter_3/3.4_autopilot/3.4_autopilot.md | 59 ++++++++++++ .../chapter_3/3.4_autopilot/readme.md | 5 + .../3.5_visualization/3.5_visualization.md | 41 +++++++++ .../chapter_3/3.5_visualization/readme.md | 5 + .../3.6_map_providers/3.6_map_providers.md | 50 ++++++++++ .../chapter_3/3.6_map_providers/readme.md | 5 + .../3.7_simulation_results.md | 45 +++++++++ .../3.7_simulation_results/readme.md | 5 + dissertation/chapter_3/_plan.md | 33 +++++++ dissertation/chapter_3/readme.md | 16 +++- dissertation/chapter_3/todo.md | 3 +- dissertation/instruction.md | 40 +++++--- dissertation/todo.md | 2 +- 21 files changed, 557 insertions(+), 18 deletions(-) create mode 100644 dissertation/chapter_2/2.4_dataset/todo.md create mode 100644 dissertation/chapter_3/3.1_simulation_engine/3.1_simulation_engine.md create mode 100644 dissertation/chapter_3/3.1_simulation_engine/readme.md create mode 100644 dissertation/chapter_3/3.2_position_model/3.2_position_model.md create mode 100644 dissertation/chapter_3/3.2_position_model/readme.md create mode 100644 dissertation/chapter_3/3.3_vision_processing/3.3_vision_processing.md create mode 100644 dissertation/chapter_3/3.3_vision_processing/readme.md create mode 100644 dissertation/chapter_3/3.4_autopilot/3.4_autopilot.md create mode 100644 dissertation/chapter_3/3.4_autopilot/readme.md create mode 100644 dissertation/chapter_3/3.5_visualization/3.5_visualization.md create mode 100644 dissertation/chapter_3/3.5_visualization/readme.md create mode 100644 dissertation/chapter_3/3.6_map_providers/3.6_map_providers.md create mode 100644 dissertation/chapter_3/3.6_map_providers/readme.md create mode 100644 dissertation/chapter_3/3.7_simulation_results/3.7_simulation_results.md create mode 100644 dissertation/chapter_3/3.7_simulation_results/readme.md create mode 100644 dissertation/chapter_3/_plan.md diff --git a/dissertation/chapter_2/2.4_dataset/2.4_dataset.md b/dissertation/chapter_2/2.4_dataset/2.4_dataset.md index 07eb693..9b75499 100644 --- a/dissertation/chapter_2/2.4_dataset/2.4_dataset.md +++ b/dissertation/chapter_2/2.4_dataset/2.4_dataset.md @@ -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. diff --git a/dissertation/chapter_2/2.4_dataset/todo.md b/dissertation/chapter_2/2.4_dataset/todo.md new file mode 100644 index 0000000..0a81ce7 --- /dev/null +++ b/dissertation/chapter_2/2.4_dataset/todo.md @@ -0,0 +1 @@ +- [x] Описать из datasets\ya_go_maps, как это сделано. Взяты lat и lon периметром 5 км какой-то области города, и образованы таким образом снимки. Написать эту подглаву \ No newline at end of file diff --git a/dissertation/chapter_3/3.1_simulation_engine/3.1_simulation_engine.md b/dissertation/chapter_3/3.1_simulation_engine/3.1_simulation_engine.md new file mode 100644 index 0000000..e3a3005 --- /dev/null +++ b/dissertation/chapter_3/3.1_simulation_engine/3.1_simulation_engine.md @@ -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 в объекте позиции. diff --git a/dissertation/chapter_3/3.1_simulation_engine/readme.md b/dissertation/chapter_3/3.1_simulation_engine/readme.md new file mode 100644 index 0000000..ff74c89 --- /dev/null +++ b/dissertation/chapter_3/3.1_simulation_engine/readme.md @@ -0,0 +1,5 @@ +# 3.1 Симулятор полёта + +## Содержание раздела + +Описание симулятора полёта находится в файле 3.1_simulation_engine.md diff --git a/dissertation/chapter_3/3.2_position_model/3.2_position_model.md b/dissertation/chapter_3/3.2_position_model/3.2_position_model.md new file mode 100644 index 0000000..d516087 --- /dev/null +++ b/dissertation/chapter_3/3.2_position_model/3.2_position_model.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} + +Эти операции используются при интерполяции траекторий и преобразовании координат. diff --git a/dissertation/chapter_3/3.2_position_model/readme.md b/dissertation/chapter_3/3.2_position_model/readme.md new file mode 100644 index 0000000..dd0351c --- /dev/null +++ b/dissertation/chapter_3/3.2_position_model/readme.md @@ -0,0 +1,5 @@ +# 3.2 Модель позиционирования + +## Содержание раздела + +Описание модели позиционирования находится в файле 3.2_position_model.md diff --git a/dissertation/chapter_3/3.3_vision_processing/3.3_vision_processing.md b/dissertation/chapter_3/3.3_vision_processing/3.3_vision_processing.md new file mode 100644 index 0000000..5bad359 --- /dev/null +++ b/dissertation/chapter_3/3.3_vision_processing/3.3_vision_processing.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$ — расстояние до второго ближайшего соседа. diff --git a/dissertation/chapter_3/3.3_vision_processing/readme.md b/dissertation/chapter_3/3.3_vision_processing/readme.md new file mode 100644 index 0000000..b260315 --- /dev/null +++ b/dissertation/chapter_3/3.3_vision_processing/readme.md @@ -0,0 +1,5 @@ +# 3.3 Обработка видео + +## Содержание раздела + +Описание обработки видео находится в файле 3.3_vision_processing.md diff --git a/dissertation/chapter_3/3.4_autopilot/3.4_autopilot.md b/dissertation/chapter_3/3.4_autopilot/3.4_autopilot.md new file mode 100644 index 0000000..d3cec0d --- /dev/null +++ b/dissertation/chapter_3/3.4_autopilot/3.4_autopilot.md @@ -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} diff --git a/dissertation/chapter_3/3.4_autopilot/readme.md b/dissertation/chapter_3/3.4_autopilot/readme.md new file mode 100644 index 0000000..28d8172 --- /dev/null +++ b/dissertation/chapter_3/3.4_autopilot/readme.md @@ -0,0 +1,5 @@ +# 3.4 Автопилот + +## Содержание раздела + +Описание автопилота находится в файле 3.4_autopilot.md diff --git a/dissertation/chapter_3/3.5_visualization/3.5_visualization.md b/dissertation/chapter_3/3.5_visualization/3.5_visualization.md new file mode 100644 index 0000000..50a7af2 --- /dev/null +++ b/dissertation/chapter_3/3.5_visualization/3.5_visualization.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`. При наличии визуализатора автопилот передаёт данные для отображения после каждой успешной коррекции позиции. diff --git a/dissertation/chapter_3/3.5_visualization/readme.md b/dissertation/chapter_3/3.5_visualization/readme.md new file mode 100644 index 0000000..d9e63b4 --- /dev/null +++ b/dissertation/chapter_3/3.5_visualization/readme.md @@ -0,0 +1,5 @@ +# 3.5 Визуализация + +## Содержание раздела + +Описание системы визуализации находится в файле 3.5_visualization.md diff --git a/dissertation/chapter_3/3.6_map_providers/3.6_map_providers.md b/dissertation/chapter_3/3.6_map_providers/3.6_map_providers.md new file mode 100644 index 0000000..25d325d --- /dev/null +++ b/dissertation/chapter_3/3.6_map_providers/3.6_map_providers.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`. diff --git a/dissertation/chapter_3/3.6_map_providers/readme.md b/dissertation/chapter_3/3.6_map_providers/readme.md new file mode 100644 index 0000000..5ddfd56 --- /dev/null +++ b/dissertation/chapter_3/3.6_map_providers/readme.md @@ -0,0 +1,5 @@ +# 3.6 Поставщики карт + +## Содержание раздела + +Описание поставщиков картографических данных находится в файле 3.6_map_providers.md diff --git a/dissertation/chapter_3/3.7_simulation_results/3.7_simulation_results.md b/dissertation/chapter_3/3.7_simulation_results/3.7_simulation_results.md new file mode 100644 index 0000000..af0e55f --- /dev/null +++ b/dissertation/chapter_3/3.7_simulation_results/3.7_simulation_results.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} diff --git a/dissertation/chapter_3/3.7_simulation_results/readme.md b/dissertation/chapter_3/3.7_simulation_results/readme.md new file mode 100644 index 0000000..6f4558f --- /dev/null +++ b/dissertation/chapter_3/3.7_simulation_results/readme.md @@ -0,0 +1,5 @@ +# 3.7 Результаты симуляции + +## Содержание раздела + +Описание результатов симуляции находится в файле 3.7_simulation_results.md diff --git a/dissertation/chapter_3/_plan.md b/dissertation/chapter_3/_plan.md new file mode 100644 index 0000000..8495886 --- /dev/null +++ b/dissertation/chapter_3/_plan.md @@ -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. Написать содержимое каждой подглавы diff --git a/dissertation/chapter_3/readme.md b/dissertation/chapter_3/readme.md index e176ce8..73999b3 100644 --- a/dissertation/chapter_3/readme.md +++ b/dissertation/chapter_3/readme.md @@ -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 @@ - **Модуль визуализации** — отображение траекторий, кадров и результатов - **Система захвата кадров** — формирование видеопоследовательности - **Обработка данных ИНС** — моделирование инерциальных измерений - -## Структура папки - -Содержимое и структура разделов будет добавлена в процессе написания. diff --git a/dissertation/chapter_3/todo.md b/dissertation/chapter_3/todo.md index 370943d..8c04e33 100644 --- a/dissertation/chapter_3/todo.md +++ b/dissertation/chapter_3/todo.md @@ -1 +1,2 @@ -В readme.md должно быть описание системы симуляции полета и в будущем \ No newline at end of file +- [x] описать эту главу с подглавами, исходя из того, что есть в коде. Каждая подглава - это папка. Пока предложить план _plan.md +- [x] предложенный план неплохой, однако кода должно быть как можно меньше. Реализуй! Старайся по аналогии с предыдущими главами \ No newline at end of file diff --git a/dissertation/instruction.md b/dissertation/instruction.md index bacd1bc..bdd6246 100644 --- a/dissertation/instruction.md +++ b/dissertation/instruction.md @@ -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/` -- Использовать ссылки на изображения в формате `![описание](../_media/image.png)` +- Главы содержат подпапки для крупных разделов -## Соглашения +## Соглашения по тексту - Аббревиатуры расшифровывать при первом упоминании -- Формулы нумеровать -- Рисунки подписывать +- Формулы нумеровать: `(1)`, `(2)` и т.д. +- Рисунки подписывать: `Рисунок 1 – Описание` +- Таблицы нумеровать и давать заголовки +- Ссылки на изображения: `![описание](../_media/image.png)` + +## Соглашения по картинкам +- Только студент может вставлять ссылку на медиафайл. +- Если нужно вставить картинку, то можно просто указать в угловых скобках описание картинки с пометкой, что это картинка: + + +## Соглашения по коду + +- Код оформлять в блоках с указанием языка +- Критичные параметры выделять + +## Чеклист перед завершением главы + +- [ ] Проверить связность текста +- [ ] Убедиться, что нет дублирования +- [ ] Обновить оглавление в readme.md +- [ ] Перенести выполненные задачи в backlog diff --git a/dissertation/todo.md b/dissertation/todo.md index 351df31..eafc74c 100644 --- a/dissertation/todo.md +++ b/dissertation/todo.md @@ -1,4 +1,4 @@ - [x] Переписать оглавление в readme.md в вид таблицы - [x] Пройтись по папкам и обновить readme.md, выполнив задания -- [ ] Обновить instruction по тому, как следует писать текст +- [x] Обновить instruction по тому, как следует писать текст - [x] Создать _todo_backlog.md