Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баранов_В_С_Пояснительная_записка.docx
Скачиваний:
45
Добавлен:
03.07.2025
Размер:
9.83 Mб
Скачать

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, чтобы не превысить высоту.