write chapter_3
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user