Files
2026-04-01 14:00:38 +03:00

4.9 KiB
Raw Permalink Blame History

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