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