- •Аннотация
- •Содержание
- •Введение
- •Глава 1. Исследовательский раздел
- •Научная новизна и актуальность работы
- •Анализ современных методов построения авиационных маршрутов
- •Обзор существующих аналогов
- •4. Бпла delta-m (российская разработка)
- •5. Agisoft Metashape (ранее PhotoScan)
- •Постановка задачи
- •Описание модели взаимодействия пользователей с веб-интерфейсом
- •1. Общая структура интерфейса
- •2. Сценарии взаимодействия
- •Интеграция геопространственных данных в системы управления бпла
- •Перспективные направления исследований
- •Обзор структуры беспилотника
- •1. Входы (куда Pixhawk получает информацию)
- •2. Выходы (куда Pixhawk отправляет команды)
- •Глава 2. Реализация
- •2.1. Техническое задание
- •2.2. Построение ортодромии и локсодромии
- •2.3. Ручной ввод координат и параметров полета
- •1. Механизм ввода координат
- •2. Параметры полета
- •4. Обработка ошибок
- •2.4. Генерация kmz-файлов
- •2.5. Проверка пересечений с запретными зонами
- •1. Клиентская часть (JavaScript):
- •2. Серверная часть (Python/Flask):
- •2.6. Подключение и обзор беспилотника
- •2.7. Сервис высот
- •Глава 3. Испытательный раздел
- •3.1. Тестирование работы алгоритмов для программного комплекса на беспилотнике Holybro x500
- •3.2. Составление тест-кейсов для алгоритмов в совокупности с программным комплексом
- •3.3. Результаты тестирования
- •3.4. Опытная эксплуатация
- •Заключение
- •Список сокращений
- •Список использованных источников
2.5. Проверка пересечений с запретными зонами
При активации режима обхода запретных зон маршрут автоматически перестраивается с использованием алгоритма адаптивного смещения, что позволяет избежать пересечений с заданными полигонами.
Реализованные механизмы проверки
1. Клиентская часть (JavaScript):
Визуализация пересечений: При построении маршрута (buildRoute()) вызывается checkIntersections(coords), которая:
Проверяет каждый сегмент маршрута на пересечение с полигонами запретных зон.
Рисует белые линии в местах пересечения:
const intersectionLine = new ymaps.Polyline([...], {
strokeColor: '#FFFFFF', #белый цвет линии пересечения
strokeWidth: 4
});
Визуализация пересечений показана на (рис 2.5.1)
Рисунок 2.5.1 Визуализация пересечения маршрута с запретной зоной
Алгоритмы проверки:
isSegmentIntersectingPolygon(): Проверяет пересечение отрезка с полигоном.
isPointInPolygon(): Определяет, находится ли точка внутри зоны.
2. Серверная часть (Python/Flask):
Логика на сервере: Функция check_intersections() использует библиотеку shapely:
from shapely.geometry import LineString, Polygon
def check_intersections(route_coords, restricted_areas):
route_line = LineString(route_coords)
for area in restricted_areas:
if route_line.intersects(Polygon(area)):
return True
Эндпоинты:
/orthodrome: Возвращает ошибку при обнаружении пересечения.
/orthodrome_with_restrictions: Перестраивает маршрут в обход зон запрета (рис 2.5.2)
Рисунок 2.5.2 Обход маршрутом запретной зоны
Инициализация буферных зон
Вокруг каждой запретной зоны создается буферная область с начальным расстоянием (buffer_distance = 0.006°).
Буферные зоны формируются с использованием метода Polygon.buffer(), что позволяет увеличить "зону безопасности" вокруг препятствия.
Алгоритм адаптивного обхода запретных зон Для корректировки маршрута используется метод динамического смещения, основанный на топологическом анализе. Блок-схема алгоритма показана в приложении 3.
При обнаружении пересечения с буферной зоной:
Находится ближайшая точка на границе зоны.
Маршрут перенаправляется через эту точку.
Если алгоритм зацикливается (например, при множественных зонах), буферное расстояние увеличивается, а направление смещения выбирается случайно.
После обхода зоны проверяется возможность возврата к исходной траектории.
Ключевые компоненты системы можно увидеть в (таб. 2.5.1)
Таблица 2.5.1 Ключевые компоненты системы обхода запретных зон
Компонент |
Технологии |
Назначение |
checkIntersections() |
Яндекс.Карты API |
Визуализация пересечений на карте |
isSegmentInPolygon() |
JavaScript |
Проверка попадания отрезка в зону |
find_shortest_path_with_restrictions() |
Shapely (Python) |
Генерация обходного маршрута |
Polygon.intersects() |
Shapely |
Математическая проверка пересечений |
2.6. Подключение и обзор беспилотника
Интеграция программного комплекса с аппаратурой БПЛА реализована через протокол MAVLink — открытый стандарт для управления автономными системами. Это обеспечивает совместимость с большинством современных беспилотников (PX4, ArduPilot) и гибкость настройки.
Архитектура подключения
Транспортный уровень:
Связь осуществляется по UDP на порту 14550 (стандарт для наземных станций).
Для тестирования используется эмулятор QGroundControl или реальный БПЛА с автопилотом, поддерживающим MAVLink v2.
Программная реализация:
Библиотека pymavlink обрабатывает генерацию и парсинг MAVLink-сообщений.
Пример инициализации соединения:
from pymavlink import mavutil
connection = mavutil.mavlink_connection(‘udp:localhost:14550’)
Реализованные функции
Отправка параметров полета:
Скорость, высота и целевые координаты передаются через сообщение SET_POSITION_TARGET_GLOBAL_INT
Мониторинг состояния:
Получение телеметрии (координаты, заряд батареи, ошибки) через сообщения HEARTBEAT, GLOBAL_POSITION_INT, SYS_STATUS.
Обработка ошибок:
При потере связи интерфейс уведомляет пользователя и переводит систему в режим ожидания.
Интеграция с веб-интерфейсом
Кнопки управления:
<button onclick=”connectDrone()”>Подключиться</button>
<button onclick=”sendRoute()”>Отправить маршрут</button>
REST API:
Эндпоинт /api/drone/connect проверяет доступность БПЛА.
Эндпоинт /api/drone/send_route передает параметры полета в формате JSON.
Ключевые компоненты приведены в таблице 2.6.1
Таблица 2.6.1 Ключевые компоненты подключения БПЛА
Компонент |
Технологии |
Назначение |
MAVLink-драйвер |
pymavlink, UDP |
Обмен данными с автопилотом |
Веб-интерфейс |
JavaScript,REST API |
Управление через браузер |
Логирование |
Python logging |
Запись ошибок и статуса подключения |
Как происходит взаимодействие беспилотника с моей программой.
Формирование маршрута
Формат файла: KMZ/KML (создается через веб-интерфейс моей программы или GIS-инструменты).
Структура: включает точки пути, высоты, параметры обхода зон.
Файл сохраняется на SD-карту БПЛА или передается через QGroundControl
Моя программа взаимодействует с полетным контроллером Pixhawk — центральным компонентом, отвечающим за управление полетом, навигацию и исполнение команд.
Сохранение и передача маршрута
Вариант 1: через SD-карту (для автономных полетов):
Файл mission.kmz сохраняется в папку /missions , а потом файл можно загрузить на SD-карту или USB носитель.
При запуске БПЛА автоматически загружает миссию.
Вариант 2: через MAVLink (в реальном времени):
Программа отправляет точки маршрута напрямую в Pixhawk через сообщения MAV_CMD_NAV_WAYPOINT.
Процесс полета
Запуск программы и подключение
Программа устанавливает соединение с Pixhawk через UDP-порт 14550 (или USB).
процесс взаимодействия программы с Pixhawk 6C
1. Создание маршрута в веб-интерфейсе
Что видит пользователь: Карта (Yandex/Google Maps), где он кликает точки или вводит координаты вручную или выбирает их на карте. Настройки: высота полёта, скорость, зоны запрета.
Что происходит внутри программы: Координаты сохраняются в формате GeoJSON (пример): json { "type": "LineString", "coordinates": [ [37.6173, 55.7558, 100], // Москва, 100 м [30.3351, 59.9343, 150] // СПб, 150 м ] } Запретные зоны хранятся как полигоны в формате WKT (например, POLYGON((37.6 55.7, 37.7 55.8, ...))).
2. Конвертация маршрута в MAVLink-команды
Шаг 1: Программа разбивает маршрут на отдельные точки (waypoints). Шаг 2: Каждая точка конвертируется в сообщение MAV_CMD_NAV_WAYPOINT.
3. Упаковка команд в MAVLink-пакеты
Каждая команда скорость, высота, точка маршрута) — это бинарный пакет определенного формата. Заголовок: ID системы, длина данных, флаги. Полезная нагрузка: параметры команды (координаты, высота, скорость). Библиотека pymavlink сама упаковывает данные в правильный формат при вызове функций вроде mission_item_send().
4. Передача команд через TELEM1
Физически: Команды отправляются по UDP-протоколу на IP-адрес дрона (например, 192.168.1.1:14550).
Логически: Программа открывает сокет и начинает отправлять пакеты MAVLink. Pixhawk принимает их через телеметрический модуль (например, радиомодуль SiK).
5. Выполнение команд Pixhawk
Как Pixhawk обрабатывает команды:
Автопилот раскладывает маршрут на микрокоманды для моторов.
Рассчитывает траекторию.
Отправляет сигналы на ESC (регуляторы скорости моторов).
Пример: Если нужно подняться на 100 м: - Pixhawk увеличивает обороты всех моторов. - Следит за барометром и GPS, чтобы не превысить высоту.
