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

Задача 5 — «Сервис планирования и распределения беспилотных авиационных работ»

Вся информация по задаче: ТЗ, матчасть, аналоги, предметная область, форматы, стек, решения и план. Точка входа — этот файл.

Что делаем. Веб-сервис, который по области съёмки, парку БВС, площадкам и ограничениям считает оптимальные полётные задания для группы бортов по одному из двух критериев (минимум времени работ / минимум суммарного налёта) и выгружает их в KML и GeoJSON.

Ключевая формулировка. Существующие наземные станции — Geoscan Planner, Mission Planner, QGroundControl — проектируют одну миссию для одного борта. Заказчик просит слой выше: распределение работ по группе разнотипных бортов с нескольких площадок. Мы не конкурируем с Planner, мы стоим над ним и отдаём ему готовые задания.

Главное организационное решение. Валидатор метрик пишется раньше продукта: 70-plan/01.

Что надо поправитьTODO.md (палитра, числа на макетах, чистка макетной вёрстки).

Код фронтендаsrc/frontend/: React + Vite + Module Federation + Ant Design, девять экранов на моках, расчёт по настоящим формулам.

Собранная продуктовая документация (91-doc)91-doc/README.md: бизнес, сценарии, архитектура, домен плана, эксплуатация. Симулятор — simulate/docs/91-doc/README.md.


Карта документов

00-brief — что просят

Документ Зачем открывать
01-tz.md (00-brief/01-tz.md) ТЗ дословно + таблица всех семи ссылок из него и что по ним сохранено
02-timeline-and-scoring.md (00-brief/02-timeline-and-scoring.md) Сроки, призовой фонд, что сдаём, как трактовать критерии оценки
03-glossary.md Глоссарий: ПАФС, ЛАФС, галс, ЛЗП, GSD, makespan + соответствия RU ↔ код
04-requirements-checklist.md (00-brief/04-requirements-checklist.md) Трассируемый чеклист R-xx: требование → где реализовано → каким тестом покрыто
05-questions-to-customer.md Вопросы «Геоскану» Q-01…Q-36: связь и онлайн-контур, птицы и препятствия, критерии заказчика, подтверждение допущений

10-hardware (10-hardware/) — матчасть

Документ Зачем открывать
README.md Три числа, задающие всю задачу
01-geoscan-201.md (10-hardware/01-geoscan-201.md) Самолёт: 180 мин, 210 км, 7–22 км². Плюс эксплуатационные ограничения
02-geoscan-801.md (10-hardware/02-geoscan-801.md) Мультиротор, единственный с тепловизором
03-geoscan-gemini.md (10-hardware/03-geoscan-gemini.md) Мультиротор, 144,7 Вт·ч, полные данные камер
04-fleet-reference.md (10-hardware/04-fleet-reference.md) Сводная таблица + справочно 401 и 701
05-payloads.md (10-hardware/05-payloads.md) Геометрия камер, коэффициенты GSD, матрица совместимости, допущения
fleet.yaml, payloads.yaml Машиночитаемо — источник правды для кода

20-analogs (20-analogs/) — аналоги ПО

Документ Зачем открывать
01-geoscan-planner.md (20-analogs/01-geoscan-planner.md) Полный разбор: ПАФС/ЛАФС, типы разворотов, перелёт, точка ожидания, посадка. Язык жюри
02-mission-planner.md (20-analogs/02-mission-planner.md) Модель «план = список MAVLink-команд», .waypoints, geofence
03-qgroundcontrol.md (20-analogs/03-qgroundcontrol.md) Survey/Corridor/Structure, CameraCalc, geoFence, rallyPoints
04-gap-analysis.md (20-analogs/04-gap-analysis.md) Матрица «что умеют они / что требует ТЗ» и где выигрываем
web-research/ (20-analogs/web-research/) Глубокий обход сайтов, вики и исходников (~190 URL): Geoscan Planner, Mission Planner, QGroundControl, ArduPilot Plane + разведка рынка multi-UAV. Индекс и выводы — README

30-domain — предметная область

Документ Зачем открывать
01-survey-geometry.md Формулы GSD, footprint, шага галсов + контрольные числа для тестов
02-survey-types.md (30-domain/02-survey-types.md) Пять типов съёмки: чем отличаются и почему нельзя свести к одной «площади»
03-coverage-path-planning.md Декомпозиция, выбор угла галсов с учётом ветра (с выводом), стоимость разворотов
04-fleet-routing.md (30-domain/04-fleet-routing.md) Постановка VRP, оба критерия ТЗ в OR-Tools, фронт Парето, масштабируемость
05-energy-and-wind.md Путевая скорость, энергомодель, резерв, оборот на площадке
06-airspace-ru.md (30-domain/06-airspace-ru.md) ФП-138, классы ВП, порог 150 м, зоны, модель данных

40-formats — форматы

Документ Зачем открывать
01-kml-geojson.md (40-formats/01-kml-geojson.md) Обязательные форматы: структура, altitudeMode, грабли, приёмочный тест
02-mavlink-qgc-plan.md (40-formats/02-mavlink-qgc-plan.md) .plan и .waypoints — бонус и эталон модели данных
03-our-mission-schema.md Наши схемы входа и выхода — пишутся первыми

50-stack — стек

Документ Зачем открывать
01-libraries.md (50-stack/01-libraries.md) Что берём, что пишем сами, таблица лицензий
02-llm-and-ml.md (50-stack/02-llm-and-ml.md) Где ИИ уместен (автодизайн эвристик) и где категорически нет
03-architecture-draft.md (50-stack/03-architecture-draft.md) Слои, API, экраны, порядок демо на защите
04-frontend-3d.md (50-stack/04-frontend-3d.md) Чем рисуется UI: «элемент макета → слой → библиотека», 3D-вкладка, редактирование полигонов, тайлы рельефа
05-service-architecture.md Принципы бэкенда A-01…A-15: NestJS-гейтвей + gRPC-домены, разрез на сервисы, полиглотный контур TS ↔ Python

60-decisions (60-decisions/) — решения и идеи

Документ Зачем открывать
01-why-task-5.md (60-decisions/01-why-task-5.md) Ход мысли: почему выбрана эта задача и что из этого следует для метода работы
02-ideas-backlog.md (60-decisions/02-ideas-backlog.md) Все идеи с оценкой «стоимость / эффект» и рекомендованным порядком
03-rejected-and-risks.md (60-decisions/03-rejected-and-risks.md) Что отвергли и почему + реестр рисков
04-transcript-digest.md (60-decisions/04-transcript-digest.md) Дайджест исходного транскрипта: хронология, факты, цитаты, термины

70-plan — план работ

Документ Зачем открывать
01-validator-first.md Метод работы. Что считает валидатор, формат отчёта, регрессионные тесты
02-test-scenarios.md (70-plan/02-test-scenarios.md) Десять сценариев s01–s10 с ожидаемыми результатами
03-schedule.md (70-plan/03-schedule.md) Раскладка на 15 дней с критериями готовности этапов

80-design (80-design/) — интерфейс

Документ Зачем открывать
01-stitch-prompts.md (80-design/01-stitch-prompts.md) Промпты для Google Stitch: преамбула с дизайн-системой + 11 промптов по экранам, готовы к вставке
02-storyboards.md (80-design/02-storyboards.md) Раскадровки K01–K13 с вайрфреймами, реальными подписями и состояниями + раскадровка демо на защите
03-mockups-inventory.md (80-design/03-mockups-inventory.md) Разбор 38 отрисованных макетов: инвентаризация, что в объёме ТЗ и что вне, дизайн-система и её конфликты, расхождения с матчастью, 8 экранов на MVP

assets (assets/) — первоисточники

Все материалы по ссылкам из ТЗ, скачанные локально: 4 PDF и 4 HTML-снапшота. См. assets/README.md.

93-review — ревью реализации (2026-09-16)

Сводный чеклист выполнения требований со статусами и доказательствами — 93-review/00-checklist.md; отчёты по специальностям и дефекты — 93-review/README.md.

95-deploy — раскатка на стенд

Документ Зачем открывать
frontend-on-aerozveno.md Фронтенд на https://aerozveno.ff: раскладка бандла, S3, nginx, таблица расхождений форматов фронт ↔ API, дословные проверки

95-manual — руководство и запуск (R-DOC)

Документ Зачем открывать
00-index.md (95-manual/00-index.md) Таблица R-DOC-1…6 → где лежит артефакт и статус на дату
01-user-guide.md Руководство пользователя (R-DOC-5): сквозной сценарий, метрики, 422, проверки G1–G6
02-quickstart.md (95-manual/02-quickstart.md) Инструкция по запуску (R-DOC-3): uv, Node, docker-compose, что работает сегодня
03-limitations.md Перечень известных ограничений (R-DOC-6)

Если читать по одному документу

Вопрос Куда
Что именно требуется? 00-brief/01-tz.md
С чего начинать код? 70-plan/01-validator-first.md
Как считать высоту и шаг галсов? 30-domain/01-survey-geometry.md
Чем мы лучше существующего ПО? 20-analogs/04-gap-analysis.md
Что делать в первую очередь? 60-decisions/02-ideas-backlog.md
Какие термины употреблять? 00-brief/03-glossary.md
Что спросить у заказчика? 00-brief/05-questions-to-customer.md

Десять фактов, которые определяют решение

  1. Окно разработки — 15 дней (15–29.09.2026), а не 48 часов. Формат вознаграждает доведённость.
  2. Обязательные форматы выгрузки — KML и GeoJSON. MAVLink .plan — бонус, но Geoscan Planner импортирует именно KML.
  3. Разброс по запасу хода в парке — 4,5× (180 против 40 мин). Равное деление площади проигрывает примерно во столько же раз; оно же — наш бейзлайн для сравнения.
  4. Матрица совместимости «борт ↔ нагрузка» разреженная. ИК летит только на 801; LiDAR и геофизики нет ни у одного борта из выданных.
  5. Галсы поперёк ветра быстрее галсов вдоль ветра ровно в 1/sqrt(1−(W/V_a)²) раз — при 8 м/с для Gemini это 18 %. В Planner угол выбирается вручную бегунком; у нас — автоматически.
  6. Время галса ≠ длина / скорость. Радиус разворота самолёта ~137 м при шаге галсов 70–120 м — отсюда «разворот с выходом на ЛЗП» с петлёй и его цена.
  7. Заряд АКБ Gemini — 105 минут против 40 минут полёта. Оборот на площадке меняет makespan в разы на длинных сценариях.
  8. Оба критерия ТЗ — штатные настройки OR-Tools. Суммарный налёт — обычная стоимость дуг, makespan — SetGlobalSpanCostCoefficient.
  9. Порог 150 м из ФП-138 достижим не всегда: GSD 3 см камерой PF1B требует 153 м. Сервис должен об этом предупреждать.
  10. Нет LLM, решающей эту задачу. Зато есть автодизайн эвристик (ReEvo, EoH), которому нужен ровно наш валидатор.

Собрано 15.09.2026. Источники: ТЗ и все семь ссылок из него, документация QGroundControl и ArduPilot, руководство по эксплуатации Геоскан 201, спецификации Геоскан 801 и Gemini, литература по CPP/VRP, нормативка по использованию воздушного пространства РФ, транскрипт сессии выбора задачи.