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