60 lines
3.5 KiB
Markdown
60 lines
3.5 KiB
Markdown
# 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}
|