3.5 KiB
3.4 Автопилот
Автопилот является ключевым компонентом системы навигации БПЛА и реализован в файле autopilot.py. Класс AutoPilot наследуется от базового класса Pilot и обеспечивает управление полётом на основе визуальной одометрии.
\section{Структура автопилота}
Автопилот хранит следующие данные:
\begin{itemize} \item \textbf{Позиция} — текущее положение БПЛА (объект класса Position) \item \textbf{Ориентиры} — набор ключевых кадров (VisionChunk) с известными позициями \item \textbf{Целевой ориентир} — индекс текущего ориентира для коррекции \item \textbf{Предыдущий кадр} — последний обработанный кадр \end{itemize}
\section{Оптический поток}
Метод calculate_optical_flow вычисляет оптический поток между двумя последовательными кадрами с использованием алгоритма Лукаса-Канаде:
\begin{enumerate} \item Создание сетки точек для отслеживания (шаг 20 пикселей) \item Вычисление разреженного оптического потока \item Фильтрация по ошибке предсказания (порог 12.0) \item Центрирование координат относительно центра изображения \end{enumerate}
\section{Коррекция по ориентирам}
Метод get_position_by_chunk определяет позицию БПЛА путём сопоставления текущего кадра с ближайшим ориентиром:
\begin{enumerate} \item Поиск ближайшего ориентира по евклидову расстоянию \item Сопоставление ключевых точек между кадрами \item Оценка матрицы гомографии \item Проверка качества гомографии \item Обновление позиции при выполнении критериев \end{enumerate}
\section{Критерии качества}
Для принятия коррекции позиции используются следующие критерии:
\begin{itemize} \item Минимальное количество инлайеров (не менее 6) \item Доля инлайеров от общего числа сопоставлений (не менее 60%) \item Детерминант матрицы гомографии (от 0.1 до 10.0) \item Средняя ошибка репроекции (не более 3.0 пикселей) \end{itemize}
\section{Команды управления}
Автопилот формирует команды управления в виде объекта PilotCommand, содержащего:
\begin{itemize}
\item dangle — изменение угла курса
\item velocity — скорость движения
\item stop — флаг остановки
\item proccessing_time — время обработки кадра
\end{itemize}