Перейти к содержанию

Руководство пользователя

Для внешнего пилота и члена жюри, которые открывают сервис впервые. Термины — отраслевые (ПАФС, ЛАФС, галс, ЛЗП, GSD, ВПП) по глоссарию.

Интерфейс описан по коду src/frontend/apps/** (маршруты shell, подписи левого рельса). Макеты в docs/task5/80-design/ могут отличаться — список расхождений в приложении.


Что делает сервис

Геоскан · Планировщик принимает:

  • область площадной аэрофотосъёмки (ПАФС) — один или несколько полигонов;
  • парк БВС с выбранными полётными заданиями (ПЗ) на каждый борт;
  • взлётно-посадочные пункты (ВПП) и при необходимости резервные площадки;
  • тип съёмки (RGB, мультиспектр, ИК и др.), требуемый GSD;
  • границы разрешённого воздушного пространства и бесполётные зоны;
  • ветер (скорость и направление).

На выходе — согласованные маршруты: галсы, перелёты, вылеты с учётом запаса хода, плюс выгрузка KML и GeoJSON (и дополнительные форматы в интерфейсе).

Критерий оптимизации на выбор:

  • Время работ (makespan) — когда последний борт завершил работу;
  • Суммарный налёт — сумма лётного времени всех бортов;
  • Мультикритериальный анализ — компромисс по параметру λ на экране Парето.

Чего сервис не делает

  • Не заменяет Geoscan Planner, Mission Planner или QGroundControl: не ведёт один борт по MAVLink в полёте, а планирует распределение работ по группе бортов.
  • Не подтягивает актуальные NOTAM, зоны из СППИ и карты ограничений Росавиации — зоны задаёт оператор вручную (см. 03-limitations.md).
  • Не гарантирует выполнимость в реальном полёте без вашей проверки: расчёт сверяется валидатором по модели из документации, а не по бортовым логам.
  • Не подбирает борт под LiDAR и геофизику, если в парке нет совместимой нагрузки.

Карта интерфейса

Левый рельс (постоянные режимы):

Пункт URL Назначение
Сценарии / Старт: мастер, импорт, таблица s01–s10
Область съёмки и парк /scenario Полигоны ПАФС, задания, парк, критерий, ветер
Воздушное пространство и БПЗ /airspace Разрешённое ВП, бесполётные зоны, эшелоны
План полётов /plan Карта галсов, метрики, диаграмма Ганта
Мультикритериальный анализ /pareto Фронт Парето makespan ↔ налёт
Отчёт валидатора /validator Независимые проверки и «готовность к вылету»
Экспорт и импорт /export KML, GeoJSON, QGC .plan, CSV
3D-пролёт /viewer3d Просмотр траекторий в 3D

Верхняя строка: имя сценария, вкладки Сценарий / План / 3D-пролёт, статус расчёта, кнопки Сбросить, Экспорт, Рассчитать.


Сквозной сценарий

1. Выбрать или создать сценарий

На Сценариях (/):

  • Новый сценарий (карточка «Мастер») или Демо-сценарии — открывают готовый шаблон (в коде по умолчанию ведёт на s04);
  • Импорт проекта — файл GeoJSON/KML с полигонами WGS 84;
  • таблица s01–s10 — тестовые сценарии с кнопкой Открыть (двойной щелчок по строке тоже открывает).

Рекомендация для первого знакомства: s01 (один борт, эталон арифметики) или s04 (несколько бортов).

2. Область съёмки, тип съёмки, GSD

Экран Область съёмки и парк (/scenario):

  • на карте — полигоны заданий ПАФС; инструменты рисования для новой области и бесполётной зоны;
  • в боковой панели — список заданий: тип съёмки, GSD (см), перекрытия, расчётная высота и шаг галсов (считаются из камеры и GSD, не вводятся «с потолка»);
  • парк БВС: какие борта участвуют, какая нагрузка установлена на каждом (важно для ИК и мультиспектра).

3. Воздушное пространство и бесполётные зоны

Экран Воздушное пространство и БПЗ (/airspace):

  • контур разрешённого ВП (вершины, азимуты, длины сторон);
  • бесполётные зоны с высотными слоями и буфером;
  • проверки пересечений зон на карте.

Площадки старта/посадки отображаются на карте сценария; убедитесь, что они внутри разрешённого ВП.

4. Ветер и критерий

На /scenario в блоке оптимизации:

  • Время работ / Суммарный налёт / режим Парето (ползунок λ);
  • Резерв энергии, буфер от запреток, режим разворота (с выходом на ЛЗП или пролётом);
  • поле ветра (скорость и направление).

При сильном ветре часть парка может стать недоступной до расчёта — см. раздел про 422 ниже.

5. Рассчитать план

Нажмите Рассчитать вверху (или на пустом экране плана — Рассчитать план). Статус в шапке:

  • Черновик — плана ещё нет;
  • Расчёт… — идёт расчёт;
  • План рассчитан — можно смотреть метрики и экспорт;
  • Требует пересчёта — сценарий меняли после расчёта;
  • код ошибки — если расчёт невозможен (в режиме API — см. HTTP 422).

После успешного расчёта откроется План полётов (/plan).

6. Прочитать план

На /plan:

  • карта: галсы по цветам бортов, перелёты, полосы захвата, точки съёмки (переключаются в HUD «Слои плана»);
  • диаграмма Ганта — вылеты по времени, воспроизведение;
  • панель бортов — налёт, дистанция, число галсов и вылетов;
  • кнопка с иконкой молнии — смоделировать выбытие борта и пересчитать (локальный replan без отдельного API в мок-режиме);
  • блок Нераспределённые галсы — если решатель не назначил часть работ.

7. Отчёт валидатора

Отчёт валидатора (/validator) — отдельный счётчик метрик по геометрии плана. Статус Готово к вылету / Есть блокирующие нарушения. У части предупреждений есть кнопки коррекции (например, ослабить GSD при превышении порога 150 м).

В браузерном dev-контуре отчёт строится пакетом @geoscan/domain (группы «эшелонирование», «рельеф» и т.д.). На сервере действует тот же смысл проверок, но с кодами G1–G6 — см. ниже.

8. Мультикритериальный анализ

/pareto — кривая компромисса между временем работ и суммарным налётом для текущего сценария.

9. Экспорт

Экспорт и импорт (/export):

Формат Назначение
KML Geoscan Planner, Google Earth (relativeToGround, AGL)
GeoJSON ГИС, веб-карты
QGC .plan QGroundControl (бонус)
CSV Сверка путевых точек

В режиме подключения к API KML запрашивается с GET /api/plans/{id}/export/kml; GeoJSON и остальное может собираться локально или с API в зависимости от настройки dataSource в приложении.


Как читать числа

В интерфейсе (панель «Метрики плана»)

Показатель Смысл
Время работ Makespan — секунды до окончания работы последнего борта (формат ЧЧ:ММ:СС в UI).
Суммарный налёт Сумма длительностей полётов всех бортов (может быть больше makespan при параллельных вылетах).
Покрытие Доля площади заданий, закрытая галсами (1,0 = 100 %). Ниже ~99 % — повод проверить НФЗ, ветер или неназначенные галсы.
Нарушений Сводка счётчиков нарушений в объекте плана (ноль — хороший знак, но валидатор может найти иное).

Сравнение «Против наивного деления» — выигрыш по времени работ относительно равного деления площади между бортами.

В API и JSON плана (snake_case)

Те же величины: makespan_s, total_flight_time_s, coverage_fraction, total_distance_m, uav_used, sorties. Подробнее — 91-system/03-public-api.md и контракт волны M1 (API-CONTRACT.md).

«Борт не назначен» — unassigned

Если галс не попал ни в одно ПЗ, в плане появляется запись в unassigned[]:

  • transect_id — идентификатор галса;
  • task_id — задание ПАФС;
  • reason — машинный код причины (в UI выводится как текст).
Код reason Что означает для оператора
no_compatible_payload Нет борта с подходящей установленной нагрузкой (например, ИК только на 801).
endurance_exceeded Галс или цепочка не укладывается в запас хода с резервом энергии.
outside_allowed_airspace Геометрия галса выходит за разрешённое ВП.
inside_no_fly_zone Галс попадает в бесполётную зону.
wind_above_limit Ветер выше wind_max борта или недопустимая боковая составляющая.
time_window_missed Не уложились в допустимое окно времени (если задано в сценарии).
solver_time_limit Решатель остановлен по лимиту времени — план может быть неполным.
transect_too_short Отрезок после нарезки слишком короткий для осмысленного прохода.

Источник кодов: geoscan_contracts.enums.UnassignedReason в репозитории.


Когда сервис отвечает «нерешаемо» (HTTP 422)

При работе через gateway постановка задачи с невыполнимыми ограничениями даёт 422 и тело { "errorCode", "message", "details?" } (не 500).

Типовые ситуации:

Ситуация Пример кода / причины
Требуемый GSD требует высоты выше потолка борта или ниже минимума ALTITUDE_ABOVE_MAX, ALTITUDE_BELOW_MIN, GSD_UNREACHABLE
Для GSD нужна высота > 150 м AGL — нужно разрешение на ИВП предупреждение валидатора G1-05, не всегда блокирует API
Нет борта под тип съёмки PAYLOAD_INCOMPATIBLE, no_compatible_payload в плане
ВПП или галс вне разрешённого ВП нарушение G1-02, outside_allowed_airspace
Ветер wind_above_limit, проверки G4-01…G4-03
Боковой ветер ≥ воздушной скорости CROSSWIND_EXCEEDS_AIRSPEED

Что делать: ослабить GSD, сменить борт/нагрузку, увеличить парк, ослабить ветер в сценарии (если это прогноз), расширить разрешённое ВП или убрать конфликтующую НФЗ, уменьшить область съёмки.


Частые ошибки оператора

Ниже — проверки серверного валидатора (validator/checks/g1g6). При срабатывании жёсткой проверки план не допускается (admitted: false), даже если в сводке «нарушения: нет».

G1 — воздушное пространство

ID Суть
G1-01 Траектория заходит в бесполётную зону (длина внутри > 0).
G1-02 Траектория вне разрешённого ВП.
G1-03 Полёт вне высотного слоя зоны.
G1-04 Нарушен буфер безопасности у границ зон.
G1-05 Высота выше 150 м — предупреждение про разрешение на ИВП (ФП-138).

G2 — высота

ID Суть
G2-01 Превышен потолок борта.
G2-02 Ниже минимальной безопасной высоты.
G2-03 Полёт ниже точки старта, если борт этого не допускает.
G2-04 Недостаточный запас над рельефом (модель рельефа — см. ограничения).

G3 — энергия и вылеты

ID Суть
G3-01 Превышен бюджет вылета с учётом резерва.
G3-02 Неполный вылет (нет взлёта/перелёта/посадки в бюджете).
G3-03 Не учтён оборот на площадке.
G3-04 Несогласованность доли израсходованной энергии в метриках плана.

G4 — ветер

ID Суть
G4-01 Ветер выше предела борта.
G4-02 Слишком большая поперечная составляющая.
G4-03 Путевая скорость неположительна (ветер слишком сильный для курса).

G5 — назначение

ID Суть
G5-01 Тип съёмки галса не совпадает с установленной нагрузкой.
G5-02 Галс пройден больше одного раза или без идентификатора.
G5-03 В unassigned нет кода причины (ошибка качества плана).
G5-04 Один галс и в полёте, и в unassigned.

G6 — покрытие и время

ID Суть
G6-01 Покрытие площади не сходится с геометрией.
G6-02 Время без учёта разворотов (занижение).
G6-03 Доля времени на разворотах не сходится с планом.
G6-04 Makespan и суммарный налёт несогласованы с длительностями бортов.

Коды ошибок API (gateway)

При работе с REST полезны коды из реестра gateway: SCHEMA_VALIDATION_FAILED, SCENARIO_NOT_FOUND, PLAN_NOT_FOUND, PLAN_NOT_READY, PLAN_FAILED, GSD_UNREACHABLE, PAYLOAD_INCOMPATIBLE, UPSTREAM_UNAVAILABLE (planner/validator недоступны), QUEUE_FULL, SOLVER_INTERRUPTED.


Приложение: расхождения с макетами

В макетах / ожидании В коде сейчас
Единый «мастер» по шагам Стартовые карточки ведут на сценарий; пошагового wizard-роутинга нет
Подпись «VRP-Opt» как продакшен-решатель На стартовом экране: VRP-Opt v0.1 (мок) — в dev расчёт в @geoscan/domain
Иконки «Единицы, CRS» и «Масштаб 1:25 000» в рельсе Отображаются, но не кликабельны (нет экрана настроек)
PDF-отчёт валидатора Кнопка PDF-отчёт на /validator без привязки к выгрузке файла в коде
Аватар пользователя в шапке Декоративный «АВ», входа в систему нет
KML только с бэкенда В мок-режиме часть форматов собирается локально в браузере (ExportScreen)

Полный инвентарь макетов: 80-design/03-mockups-inventory.md (../80-design/03-mockups-inventory.md).