write chapter_3

This commit is contained in:
2026-04-01 14:00:38 +03:00
parent 26f2fac07b
commit 2561ba1cbf
21 changed files with 557 additions and 18 deletions

View File

@@ -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 в объекте позиции.

View File

@@ -0,0 +1,5 @@
# 3.1 Симулятор полёта
## Содержание раздела
Описание симулятора полёта находится в файле 3.1_simulation_engine.md