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