Симулятор «мир БВС» — бизнес-требования (головной документ)¶
Свод по восьми доменным документам simulate/docs/ и трём ревью 80-review/. Здесь сняты
противоречия между доменами, расставлены уровни зрелости M0/M1/M2 и зафиксирован объём сдачи
к 29.09.2026. Полный трассируемый реестр всех требований — 02-requirements-registry.md (02-requirements-registry.md).
Порядок работ — 03-next-steps.md (03-next-steps.md).
Единицы: время — с/мин, скорость — м/с, длина и высота — м, площадь — км², энергия — Вт·ч,
GSD — см/пикс, объём данных — МБ/ГБ/ТБ. Терминология — docs/task5/00-brief/03-glossary.md.
ТТХ — docs/task5/10-hardware/fleet.yaml и payloads.yaml, единственный источник правды.
1. Резюме на одну страницу¶
Что это. Отдельный веб-сервис-симулятор «мир БВС»: 3D-модель реальной местности в настоящих
географических координатах, в которой борта из парка Геоскан (201 / 801 / Gemini) исполняют
полётное задание, выданное планировщиком geoscan, под действием ветра, погоды, отказов связи и
бортовых отказов. На выходе — факт: сколько на самом деле длился вылет, какая доля площади
реально снята кадрами, где траектория прошла ниже 100 м над рельефом, куда снесло парашют, где
борт вышел из связи.
Кому. Первичный потребитель — команда проекта и жюри: симулятор даёт числа, которыми доказывается качество планировщика (критерии ТЗ «обоснованность подхода», «эффективность маршрутов и масштабируемость», «качество демонстрации»). Вторичный — оператор/планировщик работ заказчика: приёмка чужого плана до выезда на площадку.
Какую проблему решает. План планировщика арифметически корректен (длина / скорость + запас), но
проверить его сегодня можно только вылетом. Вылет необратим: у Геоскан 201 после перевода в режим
«Катапульта» «запрещается брать в руки и переносить БВС» (РЭ-201), ресурс — ТО через 80 полётов,
АКБ ≥80 циклов, резервного борта в парке из трёх нет. Двенадцать классов ошибок (P-01…P-12,
00-brief/02) расчётом не ловятся вообще: клиренс 100 м против перепада рельефа 50 м на полигоне
5×5 км даёт фактические 50 м и GSD вдвое мельче расчётного; радиус разворота 137 м против шага
галсов 41–123 м; 40 мин полёта Gemini против 105 мин заряда; 210 км маршрута 201 при 40 км
радиодальности.
Чем измеряется успех. Пять чисел:
| Метрика | Целевое значение | Почему это и есть успех |
|---|---|---|
violations_found |
> 0 на наборе s01–s10 при violations = 0 у валидатора |
симулятор нашёл то, чего расчёт не видит — иначе он не окупился |
| детерминизм | бит-в-бит при повторе (world_snapshot_id, plan, seed), 100 % запусков |
числа, которые нельзя воспроизвести, ничего не доказывают |
plan_fact_divergence |
дельта makespan_s разложена по вкладам, сумма = дельта ±1 с |
«факт на 12 % больше» без разбора бесполезен планировщику |
| негативный контроль | все 12 мутантов стартового набора детектируются, ложных срабатываний на эталонном корректном плане — 0 | кто сторожит сторожа |
| офлайн-старт | docker compose up без сети, 0 исходящих обращений |
на защите интернета нет |
Честная граница достоверности. Симулятор доказуем максимум до уровня V5 (негативный контроль). Реальной телеметрии полётов не существует (Q-BIZ-02), поэтому формулировка, которую используем всюду: «модель сверена с руководством по эксплуатации и с независимой геометрией; с реальным полётом не сверялась». Любая формулировка сильнее — вранье.
Решение о запуске работ. Запускать стоит, если принимаются три условия: (1) объём сдачи — уровень M1 из §5, а не полный набор требований; (2) симулятор не блокирует сдачу планировщика — планировщик сдаётся целиком и самостоятельно; (3) первым пишется валидатор модели (эталонные кейсы V-1…V-14 и тест детерминизма), а не движок.
2. Контекст и связь с основным сервисом geoscan¶
Симулятор — второй сервис рядом с планировщиком (задача 5 ЛЦТ, docs/task5/), а не его часть.
| Что | Планировщик geoscan |
Симулятор (этот продукт) |
|---|---|---|
| Вопрос | как разложить работы по парку оптимально | что получится, если этот план действительно облететь |
| Выход | план в KML/GeoJSON + расчётные метрики | факт + дельта «план↔факт» + находки |
| Рамка ТЗ | браузер на ПК, два критерия оптимизации | 3D-мир, батч-прогоны, headless |
| Зависимость | не знает о симуляторе | читает выход планировщика |
Направление зависимости строго одностороннее. Симулятор не импортирует код планировщика
(coverage/, routing/) — общий код воспроизвёл бы общую ошибку и промолчал. Правило унаследовано
от метода проекта «валидатор пишется раньше продукта» (docs/task5/70-plan/01-validator-first.md).
Интеграция — файловая: план скачивается из UI планировщика и загружается в симулятор
(SIM-PLT §1). Прямой API-вызов «симулятор тянет план по id» — открытый вопрос Q-PLT-02.
Что симулятор возвращает планировщику (числа, которых у того нет):
coverage_fraction_actual, t_out_of_link_max_s, endurance_actual_s, resurvey_required_km2,
makespan_delta_s с разложением по вкладам, min_clearance_m, parachute_drift_m,
min_separation_m, queue_wait_total_s.
3. Роли и сценарии использования¶
Сценарии U-01…U-12 описаны в 00-brief/02-vision-and-business.md §3. Здесь — сводка с честной
пометкой, у кого из ролей есть живой потребитель до 29.09 (по ревью 1 §2).
| Роль | Сценарии | Потребитель до 29.09 | Решение по объёму |
|---|---|---|---|
| Разработчик алгоритмов планировщика, CI | U-04 регрессия 100 сценариев | да | ядро, M1 |
| Команда → жюри | U-05 демо, U-12 перечень ограничений | да | ядро, M1 |
| Планировщик работ | U-02 сравнение планов, U-06 потеря связи, U-09 отказ борта | да (роль исполняет команда) | U-02 — M1; U-06 — M1; U-09 — M2 |
| Заказчик съёмки | U-11 покрытие по кадрам и GSD | артефакт нужен жюри | M1 |
| Внешний пилот / оператор | U-01 приёмка плана, U-07 старт под ветер, U-08 клиренс | нет (операторов в контуре нет, Q-BIZ-04 не отвечен) | U-08 — M1; U-07 — M1 (дёшев); U-01 — M1, но выход — отчёт о находках, не вердикт GO (см. §6, BR-19) |
| Обучаемый оператор | U-03 учебный режим | нет (Q-BIZ-06 не отвечен; A-BIZ-09: РЭ требует обучения только у производителя) | M2, режется первым |
| Разработчик симулятора | U-10 калибровка по телеметрии | заблокирован (логов нет, Q-BIZ-02) | COULD, вне M1/M2 |
4. Объём продукта¶
| Область | В объёме | Вне объёма | Обоснование границы |
|---|---|---|---|
| Динамика борта | L1: кинематическая точка с ограничениями по скорости, скороподъёмности, крену + постоянные времени | L2 (точка-масса), L3 (6-DOF аэродинамика) | В РЭ-201 нет ни поляры, ни площади крыла, ни крена, ни скороподъёмности (сплошной поиск по 117 стр.). Модель L3 на выдуманных коэффициентах точнее не будет — будет убедительнее выглядеть |
| Энергия | эмпирическая модель по двум якорным точкам: Gemini 144,7 Вт·ч / 217 Вт; 201 740 Вт·ч / 246,7 Вт | физика расхода из поляры | те же данные отсутствуют; у 801 Вт·ч нет вообще — модель по времени |
| Автопилот | воспроизведение документированного поведения РЭ-201: коды отказов, пороги возврата 16,5–20,75 В, «Возврат» на текущей высоте, спираль, точка ожидания 300 с | HIL/SITL с реальной прошивкой | прошивка недоступна; SITL ArduPilot воспроизводит другую логику (НАРУШЕНИЕ ЗОНЫ: РЭ — камера off + полёт на посадку; ArduPilot — GUIDED + барражирование) |
| Графика | 3D-сцена в реальных координатах: рельеф, объёмные зоны, борт, полоса захвата, вид из камеры борта | фотореализм уровня Unreal, Google Photorealistic 3D Tiles | у Google три независимых блокера: покрытие РФ ≈ 0, ToS запрещает кэш, Google Cloud закрыт для РФ с 20.03.2024. Плюс требование офлайн-старта |
| Камера | геометрия кадра (footprint, GSD, перекрытие, смаз) + синтетический рендер по классу поверхности | физическая радиометрия, дисторсия, шум матрицы, ИК-радиометрия | радиометрия и дисторсия в источниках отсутствуют полностью; NETD 40 мК нечем питать |
| Метрики качества плана | факт и дельта план↔факт | coverage_fraction, makespan_s как оценка плана |
их считает валидатор планировщика; дублирование ломает независимость |
| Планирование | нет | построение маршрутов, раскладка галсов, назначение бортов | это работа планировщика; иначе симулятор перестаёт быть независимой проверкой |
| Управление | приём плана из файла, прогон, выдача чисел | выдача команд на реальную НСУ, MAVLink в реальный канал | безопасность полётов; сервис не сертифицирован |
| Метео | ветер полем W(x,y,z,t), температура, пороги допуска; осадки/гроза/обледенение — как параметрические события |
физически корректная метеомодель, CFD | слов «дождь», «снег», «туман», «обледенение», «молния», «гроза» в РЭ-201 нет ни разу; все пороги — назначенные |
| Данные | GLO-30/90, ArcticDEM 10 м, WorldCover, ETH canopy, OSM, ERA5/Open-Meteo | FABDEM (CC BY-NC-SA), ArcticDEM 2 м (education/research), Mapbox/Cesium ion (токен + ToS), НСПД (только ЕСИА) | лицензионные и санкционные блокеры, разобраны в 10-world/01 §4 |
| LiDAR / геофизика | явная ошибка «нагрузки нет ни у одного борта»; режим terrain-following — COULD | виртуальный LiDAR-сенсор как рабочая нагрузка | payloads.yaml раздел gaps: носителя нет. Дорисовывать сенсор — обманывать жюри |
| Восстановление прогона | падение воркера не теряет уже записанное | checkpoint/resume с точки останова | дорого для окна 14 дней; повтор = новый run_id (SIM-PLT-25) |
5. Уровни зрелости M0 / M1 / M2¶
Это ответ на блокер Б-1 / Д-01 всех трёх ревью. 338 требований (из них ~250 в исходной редакции — MUST) на 14 дней не сходятся ни в какой продукт. Правило свода:
MUST разрешён только для M0 и M1. Всё, что отнесено к M2, переведено в SHOULD или COULD. Уровень каждого требования проставлен в реестре
02-requirements-registry.md, колонка «Уровень».
После расстановки: M0 — 67 требований (все MUST), M1 — 157 требований (из них MUST 153), M2 — 111 требований (MUST среди них — ноль). Объём сдачи к 29.09 — 224 требования вместо 338; MUST — 220 вместо ~250 в исходной редакции.
Честная оговорка к этим числам: сокращение MUST на 12 % само по себе проблему не решает — многие
требования атомарны и являются свойствами одного и того же кода («0 литералов ТТХ», «0 рёбер
импорта», «один sha256»). Настоящее сокращение в другом: 111 требований официально не блокируют
сдачу, каждый MUST теперь привязан к вехе, а M0 (67 требований) — это отдельно проверяемый
первый работающий кусок. И единственный честный измеритель объёма в этом проекте — не число
требований, а агенто-заходы и итерации ревью: 52 базовых захода, ≈130 с итерациями, 20–25 часов
ревью (03-next-steps.md).
M0 — доказуемое ядро¶
| Что умеет | headless-прогон одной командой; один борт (Gemini + PF1B — единственная честная энергомодель парка); рельеф GLO-30 в локальной ENU через ECEF (не UTM — см. §6/BR-06); ветер константой + профиль по высоте; исполнение плана по фазам takeoff…landing; факт по времени, длине, энергии; покрытие по полосам; отчёт «план / факт / дельта» одной таблицей; манифест прогона |
| Чего не умеет | 3D-фронт, кадры камеры, отказы, метео-события, несколько бортов, препятствия |
| Критерий выхода | s01 (Gemini + PF1B, прямоугольник 1×1 км, GSD 3 см, штиль) прогоняется одной командой; два прогона с одним seed дают бит-в-бит одинаковый журнал (sha256); площадь полигона в проекции против геодезической ≤ 0,1 %; round-trip WGS84→ENU→WGS84 ≤ 0,01 м; ветровой треугольник V_g = √(V_a²−W⊥²)+W∥ воспроизводится ≤ 0,5 %; эталоны V-1…V-4, V-7, V-8, V-12, V-13, V-14 — PASS |
M1 — сдаваемое 29.09¶
| Что умеет | всё из M0 + три борта парка со своими ТТХ; препятствия (здания, мачты, связные пролёты ЛЭП) и клиренс с маской качества ЦМР; покрытие по кадрам, карта фактического GSD, список пропусков; катапультный старт против ветра и парашютная посадка со сносом; два failsafe — порог напряжения и потеря связи с LOS по рельефу; 3D-сцена с объёмными зонами, планом/фактом двумя линиями и видом из камеры борта; кадр в «сухом» геометрическом режиме для всех кадров + растр для подвыборки GUI; батч s01–s10; мутационный набор из 12 планов; fidelity_class на каждом числе; docker compose up офлайн; комплект документации по п. 5 ТЗ; подготовленный демо-полигон и сценарий защиты |
| Критерий выхода | docker compose up без интернета и без ключей поднимает стенд; батч s01–s10 проходит за ≤ 30 мин; демо-прогон 5 мин воспроизводится по (world_snapshot_id, plan, seed) — журнал и числа бит-в-бит, картинка «визуально та же» по тесту SIM-UX-03 (позиции бортов ≤ 0,1 м); числа на экране совпадают с fact_report до последнего знака; все 12 мутантов детектируются, ложных срабатываний на эталонном плане 0; доля выходных величин без fidelity_class — 0 %; эталоны V-1…V-14 — PASS; на s01–s10 найдено ≥1 нарушение, невидимое валидатору |
| Что НЕ входит | гроза, осадки, обледенение, ротор, турбулентность; учебный режим и интервенции; branch/replay; SSE-телеметрия; сравнение по 20 сидам; деконфликтация; тепловизор и потоковый режим 801; EXIF/TIFF-контракты кадров; 100 сценариев за ночь; редактор зон как GIS-инструмент |
M2 — после хакатона¶
| Что умеет | 100 сценариев sc-* за ночь; грозовая зона, шквал, осадки, видимость, обледенение, орографический ротор, турбулентность; деконфликтация; эллипс сноса с полученным от заказчика коэффициентом; очередь на площадке и фактический оборот; SSE-телеметрия и интерактивный режим; учебный режим с интервенциями и branch; сравнение планов по 20 парным сидам; отчёт чувствительности к допущениям; авто-генерация перечня ограничений; синтетический тепловизор; полный контракт файлов кадров |
| Критерий выхода | 100 сценариев за ≤ 8 ч при ≥4 параллельных прогонах; каждое допущение имеет измеренную чувствительность выходных метрик к ±20 %; при наборе ≥20 мутантов детекция ≥95 % |
Что понижено по итогам ревью и почему¶
| Что понижено | Было | Стало | Почему |
|---|---|---|---|
| Учебный режим: SIM-BIZ-24, интервенции SIM-MIS-38/39, branch, keyframes SIM-MIS-27, инъекция событий в идущий прогон | SHOULD/MUST, M1 | COULD, M2 | роли не существует (Q-BIZ-06 без ответа), A-BIZ-09 признаёт противоречие с РЭ («обучение только на базе ООО „Геоскан“»); формат interventions[] как детерминированный вход оставлен (дёшев) |
| Гроза: SIM-ENV-18/19/20/21 | MUST | SHOULD, M2 | вся модель стоит на ДОП-ENV-11 (радиус 10 км — из авиационной практики, не от заказчика); трактовка «молния → грозовая зона» не подтверждена заказчиком (Q-NEW-01) |
| Осадки и видимость: SIM-ENV-12/13 | MUST (6 полей) | MUST только temperature_c и ветер; остальное SHOULD, M2 |
в РЭ-201 порогов нет ни одного; шесть полей как MUST — обязательство без основания |
| Обледенение, ротор, турбулентность, оптическое позиционирование: SIM-ENV-06/07/08/14/17 | SHOULD/COULD | M2 | подтверждено как не входящее в сдачу |
| Контракты файлов кадра: SIM-CAM-19 (EXIF/XMP), SIM-CAM-20 (TIFF16×5) | MUST | SHOULD, M2 | доказательную ценность (покрытие, GSD, дыры) даёт «сухой» режим SIM-CAM-24; файлы с EXIF — витрина, хватает сотен кадров демо |
| Тепловизор и потоковый 801: SIM-CAM-16/21 | SHOULD | M2 | заведомо нефизичная картинка по WorldCover не добавляет доказательной силы; матрицу совместимости закрывает SIM-CAM-17 |
| Редактор зон: SIM-WORLD-27 (undo 50 шагов, snap, коридоры) | MUST | SHOULD, M2; в M1 — только правка вертикальных границ и фрейма зоны | дублирует вход планировщика; инструменту независимой проверки нужен импорт + валидация (SIM-WORLD-25/26), а не второй GIS-редактор |
| SSE-телеметрия: SIM-PLT-15/16 | MUST/SHOULD | SHOULD, M2 | для демо достаточно воспроизведения журнала (SIM-UX-33, MUST и надёжнее вживую) |
| Сравнение по 20 сидам: SIM-MIS-40 | SHOULD | M2 | для U-02 на защите хватает 1 seed при общих потоках ГПСЧ |
| Деконфликтация: SIM-UAV-36 | MUST | SHOULD, M2 | чисел D_min нет ни в ТЗ, ни в РЭ (A-17); симулятор измеряет и сообщает, критерия безопасности нет |
| 30 FPS на встроенной графике: SIM-UX-24 | MUST | SHOULD, M1 | «Intel Iris Xe или аналог» — референсное железо не определено, критерий неизмерим; мерим на конкретной машине с указанием модели в отчёте |
| Дашборды Grafana в день релиза: SIM-PLT-30 | MUST в таблице продукта | правило инфраструктуры, из продуктовой таблицы убрано | требование корневого CLAUDE.md, не продуктовое требование |
| 100 сценариев за ночь: SIM-BIZ-07 | MUST | SHOULD, M2 | бюджет выведен из одного примера makespan_s = 5280; в M1 батч — s01–s10 (≤30 мин) |
| Отчёт чувствительности и авто-перечень ограничений: SIM-BIZ-15/33 | SHOULD | M2; в M1 перечень ограничений составляется вручную по реестру допущений | автогенерация требует готового отчёта чувствительности, которого в M1 нет |
| Второй проход сокращения — ещё 42 требования переведены в M2, из них 28 с MUST на SHOULD: импорт данных заказчика (SIM-GEO-03/06/07/20, SIM-WORLD-08, SIM-PLT-34), API-поверхность сверх минимума (SIM-PLT-03/05/06/07/11/14/24), правила инфраструктуры (SIM-PLT-29/30/31/35), второстепенная физика и каталоги (SIM-ENV-11/22/27/28/33/34/36/37, SIM-CAM-23/26/28, SIM-UAV-14/34), режимы и экраны сверх демо (SIM-MIS-08/18/37, SIM-UX-07/18/24, SIM-WORLD-14/22), SIM-BIZ-08/17/21, SIM-FIN-18 | MUST/SHOULD, M1 | SHOULD/COULD, M2 | причина у каждого требования записана в колонке «Статус» реестра: либо нет входных данных (топосъёмка, МСК-ключи, ортофото заказчика), либо возможность обслуживает функцию, уже отнесённую к M2, либо это правило инфраструктуры, а не продуктовое требование |
6. Ключевые бизнес-требования верхнего уровня¶
25 требований. Каждое — обобщение доменных ID; доменные критерии приёмки не дублируются, а наследуются. Приоритет и уровень — итоговые после ревью.
| ID | Требование | Приор. | Уровень | Критерий приёмки | Доменные ID |
|---|---|---|---|---|---|
| BR-01 | Вход прогона — комплект (scenario, plan, world_snapshot_id, run_config); план без сценария не исполняется |
MUST | M0 | запуск с одним KML без сценария возвращает SCENARIO_MISSING и код выхода ≠ 0 |
SIM-MIS-01, SIM-BIZ-01 |
| BR-02 | Приём выхода планировщика без ручной правки в трёх форматах: наша схема JSON, GeoJSON RFC 7946, KML OGC 2.2 | MUST | M1 | три формата одного плана дают идентичный список путевых точек и метрики, расходящиеся ≤ 0,1 %; KML без altitudeMode даёт ALT_FRAME_MISSING, а не молчаливое обнуление высот |
SIM-BIZ-01, SIM-MIS-02/03/08 |
| BR-03 | Детерминизм: результат однозначно определяется (world_snapshot_id, plan, seed, run_config, interventions) |
MUST | M0 | 10 повторов подряд дают один sha256 журнала; добавление четвёртого борта не меняет траекторию первых трёх; три режима часов дают байт-идентичный журнал | SIM-BIZ-03, SIM-MIS-18/19/20/21, SIM-ENV-35, SIM-WORLD-37, SIM-UAV-04 |
| BR-04 | Headless-режим: полный прогон одной командой, без GUI, без GPU и без сети | MUST | M0 | docker compose up + одна команда на изолированной машине; исходящих сетевых обращений — 0; кадры в headless выдаются в «сухом» геометрическом режиме |
SIM-BIZ-02/09, SIM-GEO-16, SIM-MIS-33, SIM-PLT-17, SIM-CAM-11/24 |
| BR-05 | ТТХ борта и нагрузки читаются только из fleet.yaml / payloads.yaml; в коде нет ни одного числового литерала ТТХ |
MUST | M0 | правка airspeed_cruise Gemini на 12 м/с меняет длительность эталонного вылета без единой правки кода; uav_model_version = хеш обоих YAML |
SIM-BIZ-26, SIM-UAV-05, SIM-MIS-04, SIM-PLT-27 |
| BR-06 | Рабочая СК движка — локальная геодезическая ENU через ECEF во всех доменах (физика, ветер, коллизии, LOS); UTM — только хранение растров и обмен | MUST | M0 | round-trip WGS84→ENU→WGS84 в радиусе 200 км ≤ 0,01 м; точка в 100 км от origin имеет z = −785 ± 5 м; ни один домен не считает физику в UTM |
SIM-WORLD-02/03/04, снято противоречие с SIM-ENV §1.2 и SIM-UAV §2.1 |
| BR-07 | Клиренс над рельефом и над точечными/линейными препятствиями с дискретизацией ≤ 10 м, с маской качества ЦМР и признаком полноты слоя препятствий | MUST | M1 | для geoscan_201 клиренс < 100 м → violations.altitude с координатой; полоса [клиренс−LE90, клиренс], пересекающая 100 м, даёт warning CLEARANCE_MARGIN_BELOW_GEOREF, не violation; число над заполненной ячейкой ЦМР несёт terrain_quality ≠ measured; отчёт содержит obstacle_layer_completeness |
SIM-WORLD-06/16/17/28, SIM-GEO-11/12, SIM-UAV-11, SIM-FIN-17 |
| BR-08 | Зоны: шесть типов, обе геометрии (призма и объём), временнóе действие, обязательный фрейм высот с документированным дефолтом; длина траектории внутри зоны считается аналитически | MUST | M1 | зона без altitude_frame принимается с дефолтом AMSL, warning ZONE_ALT_FRAME_DEFAULTED и пометкой зависящих величин fidelity_class: assumed; в --strict — отказ ZONE_ALT_FRAME_REQUIRED; траектория, задевающая угол NFZ на 3 м, даёт violations.nfz ≠ 0 |
SIM-WORLD-18/19/20/21/22/23, SIM-MIS-01 |
| BR-09 | Модель борта — L1 (кинематика с ограничениями и постоянными времени); погрешность по длительности вылета ≤ 5 %, по энергии ≤ 10 % | MUST | M0 | все эталоны V-1…V-14 PASS в объявленных допусках; отчёт содержит колонку «отклонение, %»; ни одна строка не превышает порог | SIM-UAV-01/02/38 |
| BR-10 | Энергомодель калибруется по двум якорным точкам парка; ветер входит через путевую скорость; холод — единой кривой дерейтинга | MUST | M1 | Gemini 40,0 ± 2,0 мин и 201 180 ± 9 мин при 19,4 м/с в штиль при +20 °C; встречный ветер 12 м/с даёт удельный расход на км пути ×1,76 ± 0,05 для 201; Gemini при −10 °C — 30,0 ± 0,5 мин (единая кусочно-линейная кривая в env_profile.yaml) |
SIM-UAV-21/22, SIM-ENV-15, снято противоречие SIM-UAV-07 × SIM-ENV-15 |
| BR-11 | Исполнение по фазам плана с фактической длительностью каждой и дельтой «план − факт» по фазам | MUST | M0 | таблица фаз с planned_s, actual_s, delta_%; сумма фаз = длительности вылета ± 1 с |
SIM-UAV-15, SIM-MIS-06/13 |
| BR-12 | Ветер — поле W(x, y, z, t), а не скаляр; допуск к вылету проверяется по фактическому ветру на высоте полёта |
MUST | M1 | ветер 8 м/с на 10 м при α = 0,143 даёт 11,1 м/с на 100 м и не допускает 801/Gemini (wind_max 10), хотя скаляр сценария 8 м/с; высота нормирования wind_max помечена как ДОПУЩЕНИЕ (в РЭ не указана) |
SIM-ENV-01/02/09/10, SIM-WORLD-33 |
| BR-13 | Связь: радиовидимость по рельефу с зоной Френеля, потеря связи не прерывает задание, возврат только по таймеру «Время автономного полёта» | MUST | M1 | на сценарии с грядой 80 м связь рвётся на 12 км вместо 40 км; 201 проходит 170 из 210 км вне связи и выполняет задание целиком; отчёт содержит t_out_of_link_max_s; таймер — обязательный параметр без дефолта, запуск без него → AUTONOMOUS_TIME_REQUIRED |
SIM-ENV-23/24/25, SIM-WORLD-31, SIM-UAV-32, снято противоречие с ДОП-ENV-20 |
| BR-14 | Покрытие считается по фактическим кадрам, а не по полосам; выдаются карта фактического GSD и список пропусков с кодом причины | MUST | M1 | coverage_fraction_actual = объединение footprint ∩ полигон; отчёт содержит _planned, _actual, delta; сумма площадей пропусков + coverage_actual × area сходится с площадью полигона ≤ 0,1 %; доля площади вне ±10 % от заданного GSD показана числом |
SIM-BIZ-18, SIM-CAM-07/08/10/29/30/31 |
| BR-15 | Изображение из камеры борта: «сухой» геометрический режим — для 100 % кадров всегда; растровый кадр — для GUI и подвыборки, без требования GPU в headless | MUST | M1 | headless-прогон на 153 000 расчётных кадров выдаёт 100 % метаданных и 0 растров; GUI-прогон выдаёт растры с потолком ≤ 5000 кадров с равномерным прореживанием; растр помечен source_mode: synthetic_render, фотореализм явно не заявляется |
SIM-CAM-11/12/18/24/25, SIM-PLT-12/23, SIM-MIS-33 |
| BR-16 | Каждая выходная величина несёт value, unit, fidelity_class, depends_on, validation_level; для величин, зависящих от слоя данных, — ещё и полноту слоя |
MUST | M1 | схема выхода отвергает величину без любого из пяти полей; доля величин без fidelity_class = 0 %; величина с fidelity_class: assumed не может быть основанием вердикта |
SIM-BIZ-04, SIM-FIN-17 |
| BR-17 | Отчёт «план / факт / дельта» именами метрик валидатора планировщика; дельта makespan раскладывается на компоненты |
MUST | M1 | diff имён полей отчёта симулятора и валидатора пуст; сумма компонент = полной дельте ± 1 с (ветер / развороты / набор / оборот / contingency / прочее) | SIM-MIS-28/29/30, SIM-BIZ-06 (переписан с «≤5 %» на «±1 с») |
| BR-18 | «Находки»: случаи, где план валиден у валидатора, а факт — нет, выделены отдельным разделом с местом, временем и ссылкой на журнал | MUST | M1 | на сценарии с перепадом рельефа ≥ 50 м отчёт даёт cfit_events > 0 при violations.altitude = 0 у валидатора; пакетный прогон возвращает код выхода ≠ 0 при появлении таких находок |
SIM-MIS-31/35 |
| BR-19 | Вердикт приёмки плана — трёхзначный: NO-GO / UNRESOLVED / NO-FINDINGS, с указанием полноты данных; бинарный GO не выдаётся |
MUST | M1 | NO-GO — нарушение на величине класса measured/derived; UNRESOLVED — проверка упирается в assumed или в слой неизвестной полноты, с перечнем причин; NO-FINDINGS — формулировка «нарушений не найдено на данных полноты X», где X — доля объектов слоя препятствий с известной высотой |
SIM-FIN-16, снят блокер Б-3 ревью 1 |
| BR-20 | Достоверность доказывается пирамидой V1…V5 с негативным контролем; V6 объявлен недостижимым | MUST | M1 | 9 тождеств V1 в допусках; 7 инвариантов V2; сверка V3 с валидатором по длине маршрута ≤ 1 %; 100 % документированных порогов РЭ покрыты тестами V4; все 12 мутантов стартового набора детектируются при 0 ложных срабатываний | SIM-BIZ-10/11/12/13/14, SIM-UAV-38 |
| BR-21 | Независимость от планировщика: симулятор не импортирует его код и не считает метрики качества плана | MUST | M0 | CI-проверка графа импортов: 0 рёбер из simulate/ в coverage/, routing/; в выходе метрики валидатора присутствуют только в колонках «план / факт / дельта», не как собственная оценка плана |
SIM-BIZ-05/27 (переформулирован), SIM-MIS-28 |
| BR-22 | Паспорт прогона и манифест мира обязательны и неполны быть не могут | MUST | M0 | по паспорту прогон воспроизводится на другой машине с тем же образом бит-в-бит; манифест мира содержит источник, релиз, дату, bbox, CRS, вертикальный датум, sha256 каждого слоя, georef_ce90_m/georef_le90_m |
SIM-BIZ-32, SIM-PLT-26, SIM-GEO-17, SIM-WORLD-05/36 |
| BR-23 | 3D-интерфейс: объёмные зоны, план и факт двумя линиями, полоса захвата по рельефу, вид из камеры борта по расчётному FOV, зона связи по фактической LOS, а не кругом | MUST | M1 | все четыре элемента (3D, карта, телеметрия, таймлайн) видны одновременно на 1366×768; поверхность связи строится по link_quality/blocking_point из журнала, круг радиуса radio_range_km показывается только как справочный максимум с подписью; вид из камеры Pollux — диагональный FOV 43,0° ± 0,5°, горизонтальный 34,5° |
SIM-UX-08/09/10/17/19/20/22, снят блокер Б-4 ревью 2 |
| BR-24 | Единый бюджет производительности: прогон однопоточный и детерминированный, параллелизм — только по независимым прогонам | MUST | M1 | 1 борт-час модельного времени ≤ 60 с реального на одном ядре; отсюда прогон из 3 бортов идёт ≥ 20× реального времени, из 20 бортов × 3 ч — ≤ 3600 с на ядре; батч s01–s10 ≤ 30 мин; ≥ 4 параллельных прогона на узле | SIM-PLT-21/22 (владелец числа), SIM-MIS-34, SIM-UAV-35 (переписан), SIM-BIZ-07 |
| BR-25 | Комплект сопроводительной документации по п. 5 ТЗ: архитектура, алгоритм, инструкция по запуску, описание API, руководство пользователя, перечень известных ограничений | MUST | M1 | все шесть артефактов существуют в репозитории; инструкция по запуску проверена на чистой машине; перечень ограничений содержит все величины fidelity_class: assumed из сквозного реестра допущений |
SIM-FIN-03/04/05, SIM-BIZ-29/33, §11 этого документа |
7. Достоверность симулятора: чем доказываем, что его числам можно верить¶
Симулятор, которому нельзя верить, хуже отсутствия симулятора: он даёт ложную уверенность, и его числа попадают в презентацию. Поэтому достоверность — не свойство, а иерархия уровней с явными критериями перехода, и каждое выходное число знает свой уровень.
7.1 Пирамида V1…V6¶
| Уровень | Что доказывает | Порог приёмки | Доступен |
|---|---|---|---|
| V1. Аналитические тождества | модель воспроизводит формулы с закрытым решением | ошибка ≤ 0,5 % (GSD и площадь — ≤ 0,1 %, round-trip СК — ≤ 0,01 м) | да, M0 |
| V2. Инварианты и консервация | модель не течёт и не дрейфует | детерминизм бит-в-бит; дрейф ≤ 1 м на 100 кругов; невязка энергобаланса ≤ 0,1 %; V_g > 0 и T > L/V_g строго; dt → dt/2 меняет makespan ≤ 0,5 % и coverage ≤ 0,2 п.п. |
да, M0 |
| V3. Независимая перепроверка | геометрия факта считается двумя независимыми путями | длина маршрута расходится с валидатором ≤ 1 %; множество нарушений симулятора ⊇ множества нарушений валидатора | да, M1 |
| V4. Сверка с первоисточником | поведение борта соответствует РЭ, а не нашим представлениям | 100 % документированных порядков и порогов РЭ-201 покрыты тестом со ссылкой на пункт | да, M1 |
| V5. Негативный контроль | симулятор ловит плохие планы, а не просто не падает | все 12 мутантов стартового набора детектируются, ложных срабатываний 0 | да, M1 |
| V6. Сверка с реальностью | модель совпадает с фактическим полётом | ошибка по времени вылета ≤ 5 %, по длине трека ≤ 2 % | нет — телеметрии не существует (Q-BIZ-02) |
7.2 Максимальный достижимый уровень по классам величин¶
Ответ на находку Д-1 ревью 1: V3 покрывает только геометрию, и это надо показывать таблицей, а не по одному числу за раз.
| Класс выходных величин | Пример | Макс. уровень сегодня | Почему выше нельзя |
|---|---|---|---|
| Геометрия плана и траектории | total_distance_m, transects_total, площадь полигона |
V3 | считается независимо валидатором и симулятором |
| Геометрия кадра | gsd_actual_cm, footprint_polygon, перекрытие |
V3 | сверяется с контрольными числами 30-domain/01 и с полосным расчётом валидатора |
| Время вылета и makespan | makespan_s, turn_time_fraction |
V2 + V4 | независимого счётчика времени нет; пороги фаз сверены с РЭ |
| Клиренс над рельефом | min_clearance_m, cfit_events |
V2, до V3 после сверки GLO-30 против ArcticDEM/ALOS (SIM-FIN-18) | эталонной ЦМР на демо-полигон нет (QW-02) |
| Клиренс над препятствиями | obstacle_clearance_m |
V1 + признак полноты слоя | полнота OSM не квантифицирована; «0 столкновений» на неполном слое — derived-число, вводящее в заблуждение сильнее assumed |
| Энергия и остаток хода | energy_remaining_wh, endurance_actual_s |
V1 (две якорные точки) + V4 | независимой перепроверки нет; поляра отсутствует |
| Дерейтинг по холоду | 30,0 мин Gemini при −10 °C | V2 (циркулярный) | тест проверяет реализацию собственного допущения ДОП-ENV-19; в отчёте помечается validation_level: V2 и не подаётся как сверенный с источником |
| Профиль ветра по высоте | wind_at_position |
V2 (циркулярный) | 1,40 и 1,99 — проверка формулы против самой себя; α и z0 — ДОП-ENV-01 |
| Время вне связи | t_out_of_link_max_s |
V1 + V4 | геометрия LOS проверяема, пороги Френеля и рефракции — ДОП-W-07/08/09 |
| Снос парашюта | parachute_drift_m |
V1 при fidelity_class: assumed |
коэффициента сноса нет ни в одном источнике (A-10, Q-ENV-08); скорость снижения 5 м/с — A-05 |
| Цена contingency | resurvey_required_km2, Δ_contingency |
V2 | зависит от таймеров и порогов, которых в РЭ нет |
| Пороги грозы/осадков/обледенения | safety_radius_m, precip_rate |
V0 — параметрическое допущение | слов «гроза», «снег», «обледенение» в РЭ-201 нет ни разу; не используются в вердиктах |
Правило. Величина с fidelity_class: assumed или validation_level ≤ V2 не может быть
основанием для вердикта NO-GO — она выводится, помечается и попадает в перечень ограничений.
Вердикты опираются только на measured/derived с validation_level ≥ V3.
7.3 Негативный контроль — кто сторожит сторожа¶
Симулятор, который «всё прогнал и ничего не нашёл», неотличим от симулятора, который ничего не
проверяет. Стартовый набор — 12 мутантов заведомо корректного плана (00-brief/02 §6.2/V5):
галс внутрь NFZ; высота 60 м AGL над холмом; подмена AGL на AMSL без пересчёта; курс старта по
ветру; turnaround_time_min: 1 для Gemini; ИК на Gemini; убранный маршрут посадки из 3 точек;
вылет 201 на 200 мин; ветер 13 м/с; точка посадки под ЛЭП; интервал затвора вдвое реже нужного;
шаг галсов 200 м при футпринте 117 м.
Порог формулируется честно (снята находка Д-3 ревью 1 / С-5 ревью 2): все 12 мутантов стартового набора детектируются; ложных срабатываний на эталонном корректном плане — 0. Процентный порог ≥ 95 % применяется только при наборе ≥ 20 мутантов. Каждый реальный дефект, который симулятор пропустил, превращается в нового мутанта.
7.4 Что говорим на защите дословно¶
«Модель сверена с руководством по эксплуатации Геоскан 201 и с независимой геометрией валидатора; с реальным полётом она не сверялась — реальных логов у нас нет. Достоверность доказана до уровня V5 включительно. Числа, которые зависят от допущений, помечены и перечислены в разделе известных ограничений.»
8. Критерии приёмки продукта в целом¶
Продукт принят, если все строки ниже дают PASS на одном прогоне сборки.
| # | Критерий | Число | Проверка |
|---|---|---|---|
| A-01 | Офлайн-старт | 0 исходящих сетевых обращений при docker compose up |
сетевой трейс на изолированной машине |
| A-02 | Детерминизм | 10 повторов → один sha256 телеметрии и fact_report; манифест идентичен после исключения generated_at из хэшируемой части |
sim run --seed 42 ×10 |
| A-03 | Независимость от шага | dt → dt/2: \|Δmakespan\| ≤ 0,5 %, \|Δcoverage\| ≤ 0,2 п.п. |
автотест сходимости |
| A-04 | Тождества V1 | все 9 (V1-01…V1-09) в допусках: ветровой треугольник ≤ 0,5 %, GSD ≤ 0,1 %, площадь ENU/геодезическая ≤ 0,1 %, round-trip СК ≤ 0,01 м, R = 136,4 ± 0,5 м | sim validate --reference |
| A-05 | Эталоны модели борта | V-1…V-14 PASS; Gemini 40,0 ± 2,0 мин; 201 180 ± 9 мин при 19,4 м/с; 7,3 и 22,0 км² воспроизводятся из независимых параметров; Gemini при −10 °C = 30,0 ± 0,5 мин | тот же прогон |
| A-06 | Сверка V3 с валидатором | длина маршрута ≤ 1 %; violations симулятора ⊇ violations валидатора на всех s01–s10 |
сравнение двух отчётов |
| A-07 | Трассировка V4 | 100 % документированных порогов РЭ-201 из таблицы §6.2/V4 покрыты тестом со ссылкой на пункт | отчёт покрытия |
| A-08 | Негативный контроль V5 | 12 из 12 мутантов детектированы; 0 ложных срабатываний на эталонном плане | sim mutate --set base |
| A-09 | Полезность | M1: на s01–s10 (когда каталог полон) найдено ≥ 1 нарушение, невидимое валидатору, с координатой и временем; предусловия: SIM-BIZ-12, фикстуры s02…s10 | раздел «находки» отчёта |
| A-10 | Разложение дельты | сумма компонент Δ_wind + Δ_turns + Δ_climb + Δ_turnaround + Δ_contingency + Δ_other = полной дельте ± 1 с |
автотест |
| A-11 | Покрытие по кадрам | сумма площадей пропусков + coverage_actual × area = площади полигона ± 0,1 % |
автотест на s01 и на полигоне с перепадом ≥ 50 м |
| A-12 | Маркировка достоверности | доля выходных величин без fidelity_class — 0 %; ни один вердикт не опирается на assumed |
схема выхода + автотест |
| A-13 | Производительность | батч s01–s10 ≤ 30 мин; 1 борт-час ≤ 60 с на ядре | замер в CI |
| A-14 | Независимость кода | 0 рёбер AST из geoscan_sim.validator в engine/, mission/, uav/, camera/, env/; 0 рёбер симулятора в coverage/, routing/ планировщика |
CI-проверка графа импортов (SIM-BIZ-05) |
| A-15 | Демо | 5-минутный прогон воспроизводится по паспорту: журнал и числа бит-в-бит, позиции бортов при повторном рендере ≤ 0,1 м | sim replay + тест SIM-UX-03 |
| A-16 | Документация | 6 артефактов п. 5 ТЗ существуют; инструкция по запуску проверена на чистой машине | ручная проверка по чеклисту |
9. Риски и решения, принятые вопреки риску¶
Сводно по ревью 3 §4. «Принято вопреки» — там, где риск осознан и не устраняется.
| # | Риск | Вер-ть | Последствие | Что делаем |
|---|---|---|---|---|
| R-01 | Объём не влезает в 14 дней | была высокая | нет ни M1, ни честного M0 | устранён: §5 — каждое требование привязано к вехе; 111 требований отнесены к M2 и официально не блокируют сдачу; MUST в M2 — ноль; объём выражен в агенто-заходах (52 базовых, ≈130 с итерациями) |
| R-02 | Планировщик не даёт планы вовремя; схема 40-formats/03 плывёт |
средняя–высокая | нечего исполнять, V3 невозможна | заморозка schema_version: 1; рукописные планы-фикстуры s01/s04/s07 в репозитории симулятора (SIM-FIN-08) |
| R-03 | Внешние геоданные/погода недоступны из контура (CDS/ERA5, dataspace.copernicus.eu, бакеты AWS) |
средняя | мир не из чего собирать | выгрузка зеркала демо-района первым шагом (SIM-FIN-07); ERA5 понижен до SHOULD/M2, manual-ветер остаётся MUST |
| R-04 | Headless-рендер кадра без GPU не спроектирован | была высокая | SIM-CAM-11 невыполним | устранён решением: «сухой» геометрический режим — MUST и дефолт headless; растр — только GUI/подвыборка (BR-15) |
| R-05 | Ресурсы узла n2 неизвестны числом (Q-PLT-05) | средняя | ночное окно срывается, демо тормозит | kubectl --context n2 describe node — шаг 0 плана; при <8 ядрах батч уменьшается до s01–s10 |
| R-06 | Противоречия MUST между доменами доживают до кода | была высокая | несовместимые модули | устранён: §13 — все 10 противоречий сняты правкой проигравшего требования |
| R-07 | Бит-в-бит детерминизм не достигается в выбранном рантайме | средняя | падает главное продающее свойство | рантайм с управляемой FP-семантикой выбирается решением SIM-FIN-15; тест детерминизма — первый написанный тест |
| R-08 | Демо-полигон без нужных данных (нет ЛЭП в OSM, нет перепада ≥50 м) | средняя | «находки» пустые: план валиден, факт совпал | подбор полигона по чеклисту свойств (SIM-FIN-06); при бедном OSM — препятствия вносятся как source: operator |
| R-09 | Переформулировка «молнии» не принята заказчиком | низкая–средняя | претензия «требование не выполнено» | вопрос Q-NEW-01 уходит в первом батче; на защите показывается и W-14 (буквальный удар как терминальная инъекция), и грозовая зона |
| R-10 | 61 вопрос заказчику при отсутствии канала Q&A | высокая | ключевые числа остаются assumed |
топ-12 §10 уходит первым батчем; остальное фоном |
| R-11 | Итерации движка делают старые журналы нечитаемыми | средняя | сравнение с baseline ломается молча | log_schema_version + смоук «открой журнал недельной давности» (SIM-FIN-11) |
| R-12 | Порог V5 не достигается к сроку | средняя | «сторож не сторожит» | порог — цель, не гейт сдачи; в отчёт идёт фактическое число детекции |
Принято вопреки риску¶
| Решение | Риск, который принимается | Почему принято |
|---|---|---|
| Строить мир только на открытых данных (GLO-30 4 м LE90 / 6 м CE90) | клиренс доказуем лишь до самосогласованности; эталонной ЦМР нет | топосъёмки заказчика нет и не обещано; альтернатива — не строить мир вообще. Суррогат эталона — сверка GLO-30 против ArcticDEM/ALOS на демо-полигоне (SIM-FIN-18) |
| Отказ от фотореализма кадра | претензия «картинка не похожа на снимок» | радиометрии и дисторсии в источниках нет; Google 3D Tiles заблокированы трижды. Кадр служит проверкой геометрии покрытия, и это написано в метаданных каждого кадра |
| Модель L1 вместо L2/L3 | эксперт спросит про аэродинамику | данных нет: ни поляры, ни площади крыла, ни крена. L3 на выдуманных коэффициентах точнее не станет |
| Вся логика деградаций 801/Gemini — экстраполяция РЭ-201 | реакции мультироторов могут быть другими | РЭ на 801 и Gemini нет. Каждая строка таблицы реакций несёт пометку ДОПУЩЕНИЕ (SIM-FIN-14) + вопрос Q-NEW-02 |
| «Время автономного полёта» — параметр без дефолта | прогоны W-19/W-20 не стартуют без явного значения | значения в РЭ нет вообще; молчаливый дефолт превратил бы допущение в факт. Симулятор гоняет параметр развёрткой |
| Бит-в-бит гарантия — в пределах x86-64 и одного образа | прогоны на ARM дадут расхождение в младших разрядах | порядок FMA не контролируется кросс-архитектурно; ограничение объявлено явно, а не замалчивается |
| Симулятор не реализует checkpoint/resume | падение длинного прогона = полный перезапуск | дорого для окна; повтор детерминирован, поэтому дёшев |
10. Открытые вопросы к заказчику, по влиянию на объём работ¶
61 уникальный вопрос после дедупликации 77 собранных (ревью 3 §5). Первым батчем уходят 12.
| Ранг | Вопрос | Что меняет в объёме работ |
|---|---|---|
| 1 | Q-BIZ-10. Симулятор — отдельный продукт или внутренний инструмент проверки планировщика? | судьба API, ролей, половины SIM-UX и SIM-PLT; при «инструмент» весь фронт уходит в демо-режим |
| 2 | Q-CAM-01 (+Q-UX-03). Достаточен ли геометрически верный кадр с текстурой по классу поверхности, или нужен фотореализм? | исход развилки стека SIM-UX §6 и весь пайплайн рендера |
| 3 | Q-UX-05. Экраны разбора и сравнения прогонов обязательны для защиты? | 2 экрана из 7 и SIM-UX-31/32/33 — MUST или SHOULD |
| 4 | Q-01 (+Q-MIS-08). Живой контур «сервер ↔ НСУ ↔ борт» или офлайн «файл → Planner»? | появление/отсутствие целого слоя исполнения |
| 5 | Q-ENV-03. Значение и диапазон «Времени автономного полёта»; тот же это таймер, что порождает ОШИБКА КРЛ, или другой? | вся модель U-06 / W-19 / W-20; сейчас параметр без значения, вердикты по потере связи — только сравнительные |
| 6 | Q-BIZ-07. Что для вас достаточное доказательство, что симулятор не врёт: совпадение с РЭ, с Geoscan Planner или с реальным полётом? | целевой уровень пирамиды V1…V6 = объём работ по валидации |
| 7 | Q-MIS-10 (+Q-BIZ-02). Есть ли записанный реальный полёт (трек + паспорта фотографий + журнал отказов)? | единственный путь V5 → V6; один такой файл ценнее десяти синтетических сценариев |
| 8 | Q-ENV-05. Какие метеопороги сверх ветра 12 м/с применяются на практике (дождь, мокрый снег, туман, обледенение)? | весь раздел осадков SIM-ENV из assumed в derived |
| 9 | Q-BIZ-03. Время полного цикла подготовки 201 (сборка ПУ, укладка парашюта, натяжение жгутов) и оборота между вылетами? | makespan многовылетных планов — один из двух критериев ТЗ; дефолт turnaround_time_min: 10 для катапультного борта заведомо недостижим |
| 10 | Q-UAV-07 (+Q-UAV-01). Максимальный эксплуатационный крен и фактический радиус разворота 201; реальные крейсерские скорости? | R = V²/(g·tanφ): при 20° R = 216 м, при 45° — 79 м, разброс ×2,7 — центральное число модели галса |
| 11 | Q-NEW-02. Бортовая логика failsafe у 801 и Gemini (потеря связи, низкий заряд, geofence) — есть ли РЭ или параметры автопилота? | модель половины парка в демо-сценариях s04/s05 |
| 12 | QW-08 (+Q-25). Реальный максимум района работ: площадь, число зон, площадок, бортов в одном задании? | все бюджеты производительности SIM-WORLD §7 и SIM-PLT §5 |
Новые вопросы, которых не было ни в одном доменном списке: Q-NEW-01 (принимается ли трактовка
«эмуляции молнии» как грозовой обстановки), Q-NEW-02 (failsafe мультироторов), Q-NEW-03
(есть ли канал Q&A и лимит вопросов), Q-NEW-04 (появится ли носитель LiDAR/геофизики и нужен ли
режим полёта с огибанием рельефа), Q-ENV-12 (на какой высоте нормируется wind_max — в РЭ
высота измерения не указана), Q-MIS-11 (семантика speed_ms в плане: воздушная или путевая).
11. Перечень известных ограничений¶
Обязательный раздел сопроводительной документации по п. 5 ТЗ хакатона
(hackathon/5. Геоскан.html). Написан честно: по этому разделу отличают инженерную работу от
демонстрации. Формат: что НЕ моделируется или моделируется упрощённо → чем это грозит при
интерпретации результатов → что нельзя утверждать на основании прогонов.
11.1 Модель борта и полёта¶
| Что упрощено | Чем грозит при интерпретации | Что нельзя утверждать |
|---|---|---|
| Динамика — L1 (кинематическая точка), без аэродинамики: нет поляры, площади крыла, срыва, реакции на порыв быстрее постоянной времени | Переходные процессы учтены константами; поведение на пределе крена и при сваливании не моделируется вообще | Что борт «выполнит этот манёвр». Симулятор говорит только о времени и геометрии, не об управляемости |
Крейсерские скорости всех трёх бортов — ДОПУЩЕНИЕ (airspeed_cruise_source: assumed): 27,8 / 10 / 10 м/с |
Ошибка крейсера 20 % даёт ~20 % по времени вылета и ~25 % по радиусу разворота (R ∝ V²) |
Что makespan точен до процентов. Он точен до класса «±5 % при верном крейсере» |
| Максимальный крен 201 — ДОПУЩЕНИЕ 30°; в РЭ крена нет | R = 136,4 м при 30°, 216 м при 20°, 79 м при 45° — разброс ×2,7. Это самое дорогое допущение проекта |
Что разворот при шаге галсов 41 м выполним/невыполним. Можно утверждать только «при крене 30°» |
| Скороподъёмность 201 и 801 — ДОПУЩЕНИЕ (1,5 и 5 м/с); физический потолок 201 = 220 Вт/(8,5 кг·9,81) = 2,64 м/с | Время набора смещено; на 150 м это ±40 с на вылет (<1 % от 180 мин) | Ничего существенного — риск умеренный, но число помечено |
| Энергомодель 801 — по времени, не по энергии: Вт·ч в буклете нет | Влияние ветра и набора высоты на продолжительность 801 не моделируется | Что «801 хватит энергии». Для 801 есть только endurance_remaining_s; energy_left_wh возвращается как null |
| Средняя мощность 201 (246,7 Вт) больше паспортных 220 Вт двигателя | Либо 220 Вт — номинал вала без авионики, либо 180 мин и 740 Вт·ч несовместимы | Что энергобаланс 201 согласован с паспортом. Калибровка ведётся по паре (энергия, продолжительность) |
endurance_max = 180 мин и range_max = 210 км совместно дают 19,4 м/с — ниже принятого крейсера |
Оба предела одновременно достижимы только на 19,4 м/с | Что 201 пролетит 210 км за 180 мин на крейсере. Симулятор сообщает, какой предел сработал |
| Отказоустойчивость мультироторов при отказе двигателя не задокументирована | Принято: терминальный отказ | Что 801/Gemini «сядут на трёх» или «упадут» — данных нет |
| Логика failsafe 801 и Gemini — экстраполяция РЭ-201 | РЭ на эти борта нет; каждая строка таблицы реакций — допущение | Что мультиротор поведёт себя именно так при потере связи или низком заряде |
| Режим terrain-following (постоянный AGL с огибанием рельефа) отсутствует | Геофизический профиль ТЗ (1,5–5 м AGL) неисполним даже при появлении носителя | Что сервис поддержит геофизическую съёмку |
11.2 Мир, рельеф, препятствия¶
| Что упрощено | Чем грозит | Что нельзя утверждать |
|---|---|---|
| Рельеф — Copernicus GLO-30: 4 м LE90 / 6 м CE90, шаг 30 м. Это ЦМП (DSM), лес и застройка включены со сглаживанием 30-метровой ячейки | 4 м LE90 против допуска клиренса 100 м — 4 %; отдельная опора ЛЭП в такой сетке не видна вообще | Что клиренс измерен. Он возвращается интервалом значение ± LE90, и это не одно и то же |
Слой препятствий — OSM + Microsoft ML Footprints; полнота не квантифицирована; объекты без height=* получают дефолт с пометкой height_source: assumed |
«0 столкновений» на неполном слое — derived-число, вводящее в заблуждение сильнее любого assumed |
Что маршрут безопасен по препятствиям. Можно утверждать только «столкновений не найдено на слое полноты X %» |
| Провис провода ЛЭП по цепной линии не моделируется: пролёт задан «стеной» до высоты меньшей из опор | Препятствие завышено (консервативно), часть допустимых траекторий отвергается | Что все отвергнутые траектории действительно опасны |
| Дыры в ЦМР заполняются: ≤ 8 ячеек — интерполяцией, больше — из GLO-90/ArcticDEM; вода — плоской поверхностью на медиане береговой линии | На протяжённых реках с уклоном появляется ступенька; число над заполненной ячейкой не измерено | Что клиренс над заполненной ячейкой достоверен. Он несёт terrain_quality ≠ measured |
| Балтийская 1977 без модели квазигеоида не пересчитывается; PROJ-data не содержит модели для РФ | Импорт слоя в БСВ-77 отклоняется или требует пользовательского сдвига-константы (assumed) |
Что высоты приведены к государственной системе высот |
| Бит-в-бит воспроизводимость гарантируется в пределах x86-64 и одного образа контейнера | На ARM возможно расхождение в младших разрядах из-за порядка FMA | Что результат воспроизводим на любой машине |
| Приграничная полоса 25 км и район аэродрома 5 км автоматически не строятся — приходят зонами на вход | Реестра аэродромов и границы в контуре нет | Что сервис сам проверит регуляторные зоны |
Актуализация бесполётных зон с fpln.ru отсутствует — API нет |
Зоны приходят из сценария либо рисуются оператором; источник фиксируется полем source |
Что зоны актуальны на дату прогона |
11.3 Камера и покрытие¶
| Что упрощено | Чем грозит | Что нельзя утверждать |
|---|---|---|
| Рендер кадра — не фотореалистичный: текстура по классу ESA WorldCover (общая точность 76,7 %) + отмывка рельефа. Нет микротекстуры, фасадов, техники, состояния поверхности | Кадр пригоден для проверки геометрии покрытия, не для оценки дешифровочных свойств | Что снимок выглядит как реальный. Каждый кадр несёт source_mode: synthetic_render |
| Радиометрия, дисторсия, шум матрицы, атмосферное рассеяние не моделируются; ИК — статичная температура по классу поверхности без физики теплопереноса; NETD 40 мК не воспроизводится | ИК-кадр различает типы поверхности, но не является измерением температуры | Что тепловой контраст соответствует реальному |
Минимальный интервал срабатывания затвора не указан ни для одной нагрузки — ограничение V_g ≤ Bx/Δt_min не проверяется |
Реальный борт может быть вынужден лететь медленнее расчётного; продольное перекрытие 70/80 % может быть недостижимо | Что заданное продольное перекрытие физически достижимо на расчётной скорости |
| Выдержка Pollux, тепловизора и 801 EO не задокументирована; смаз считается на допущении | При более длинной реальной выдержке смаз занижен | Что заявленный GSD достигается в плохих условиях освещения |
| Смещение оптического центра камеры относительно точки телеметрии (lever arm) неизвестно ни для одного борта | Принято «точка съёмки = точка телеметрии» | Субпиксельную точность геопривязки кадра |
| Углы подвеса Gemini не задокументированы; принята жёсткая надирная установка | Ненадирные сценарии для Gemini не проверены | Что Gemini может/не может снимать под углом |
| Кросс-GPU бит-идентичность растра не гарантируется (только метаданных и геометрии кадра) | Картинка на разных машинах может отличаться в младших битах | Что изображение воспроизводится пиксель-в-пиксель |
| Мультиспектральный профиль Pollux на 22 км² требует ≈1420 км суммарной длины галсов при дальности 201 в 210 км | Паспортные «7–22 км² за вылет», видимо, калиброваны под RGB-профиль | Что 22 км² мультиспектра снимаются за один вылет 201 |
11.4 Среда, связь, отказы¶
| Что упрощено | Чем грозит | Что нельзя утверждать |
|---|---|---|
Слов «дождь», «снег», «туман», «обледенение», «молния», «гроза» в РЭ-201 нет ни разу. Все пороги по осадкам, видимости, обледенению, грозе — назначенные, в env_profile.yaml с тегом assumed |
Доля «нелётных» окон целиком определяется нашими числами | Что вылет допустим/недопустим по погоде сверх ветра и температуры |
| «Эмуляция молнии» переформулирована в грозовую обстановку: динамическая запретная зона + шквал + электростатика; прямой удар — терминальное событие с вероятностью 0 | Трактовка не подтверждена заказчиком (Q-NEW-01) | Что вероятность поражения борта молнией оценена |
| Профиль ветра по высоте — степенной (α = 0,143) либо логарифмический по классу WorldCover | При α = 0,25 ветер 8 м/с на 10 м даёт 14,2 м/с на 100 м — за пределом всех трёх бортов | Что фактический ветер на высоте съёмки известен. Это модель, а не измерение |
Высота нормирования wind_max (12 / 10 / 10 м/с) в РЭ не указана; принято «на высоте полёта» |
Радикально меняет допуск к вылету: прогноз 7,2 м/с на 10 м уже отсекает мультироторы | Что порог производителя применяется именно так |
| Турбулентность — модель Драйдена (MIL-F-8785C), созданная для пилотируемой авиации | Для БВС массой 1,5–8,5 кг масштабы могут быть меньше, турбулентность заметнее | Что отклонение от ЛЗП оценено консервативно |
| Орографика — параметрическая модель, не CFD (k_s = 2,0, длина ротора 3·H_ridge, w = −0,3·v) | В сложном рельефе форма и положение ротора будут отличаться | Что подветренный склон безопасен |
| Дальность командного канала 801 неизвестна: 10 км — дальность видеоканала Full HD | Принято равенство каналов | Что 801 управляем на 10 км |
| Зона Френеля считается на 869,75 МГц (середина диапазона 201); частот каналов 801 и Gemini в источниках нет | Для 801 и Gemini расчёт Френеля не имеет основания | Что зона связи мультироторов рассчитана |
| Коэффициент рефракции k = 4/3 и критерий 0,6·F₁ — стандартная радиоинженерная практика, в источниках проекта отсутствуют | Граница «видно / не видно» смещается на единицы процентов, при инверсии — больше | Что дальность связи предсказана точно |
| Коэффициент сноса парашюта отсутствует полностью; скорость снижения 5 м/с — допущение | При 3 м/с снос при W = 12 м/с растёт со 168 до 280 м — это меняет вывод «сядет в водоём / не сядет» | Что точка приземления 201 предсказана. Эллипс сноса — целиком наша модель |
| Интервалы деконфликтации (150 м горизонтально, 50 м вертикально) — не нормативные | Служат порогом отчётности | Что борта разведены безопасно. Симулятор измеряет и сообщает, не разводит |
| Реакции на коды НЕТ ДВИГ, ОШИБКА АКСЕЛ, ОШИБКА ГИРОСКОПА, ПЕРЕЗАГРУЗКА — инженерная догадка (РЭ предписывает «свяжитесь со службой поддержки», что в полёте неисполнимо) | Поведение борта при этих отказах не проверяемо | Что живучесть плана оценена по всем отказам |
11.5 Продукт и контур¶
| Что упрощено | Чем грозит | Что нельзя утверждать |
|---|---|---|
| Симулятор не сверялся с реальным полётом — реальных логов не существует (Q-BIZ-02); достоверность доказана до V5 | Все числа — модельные | «Симулятор соответствует реальности» |
| Симулятор не управляет реальными бортами и не подключается к НСУ; интерфейсов к железу и MAVLink-выхода в реальный канал нет | — | Что сервис пригоден для оперативного управления полётами |
| Симулятор не планирует: он только исполняет чужой план | — | Что сервис может заменить планировщик |
Checkpoint/resume не реализован: повтор — новый run_id |
Падение длинного прогона = полный перезапуск | — |
| Один сервисный ключ на всех, пользовательской аутентификации нет; квот на очередь прогонов нет | Любой потребитель может насытить очередь | Что сервис многопользовательский |
| Разбор входных файлов ограничен лимитами размера/времени/памяти, но полного аудита парсеров (zip-бомба в KMZ, XXE в KML, битый GeoTIFF) не проводилось | Битый файл может повесить ingestion | Что импорт устойчив к враждебному входу |
| Ресурсы узла n2 не зафиксированы числом (Q-PLT-05) | Параллелизм ≥4 и ночное окно — целевые, не проверенные | Что регрессия 100 сценариев уложится в 8 ч |
12. Соответствие ТЗ хакатона¶
ТЗ (hackathon/5. Геоскан.html) написано про планировщик. Симулятор — второй сервис; колонка
«чем поддержан» отвечает на вопрос, усиливает ли он пункт ТЗ или уводит в сторону.
| Пункт ТЗ | Чем поддержан симулятором | ID | Статус |
|---|---|---|---|
| Вход: координаты ВПП (произвольные) | слой sites мира; проверка пригодности площадки — сектор ±30°, объекты ≤ 0,1·L, старт строго против ветра |
SIM-MIS-01, SIM-WORLD-32, SIM-UAV-13/14, SIM-BIZ-20 | закрыт, M1 |
| Вход: перечень доступных БВС | fleet.yaml — единственный источник; три борта + расширяемость по type |
SIM-BIZ-26/30, SIM-UAV-05/09 | закрыт, M1 |
| Вход: область съёмки | tasks[].area; покрытие по кадрам считается против неё |
SIM-CAM-29/31, SIM-MIS-01 | закрыт, M1 |
| Вход: тип съёмки RGB | полный контур: геометрия кадра, «сухой» режим, покрытие, карта GSD, список пропусков | SIM-CAM-07/10/24/29/30/31 | закрыт, M1 |
| Вход: тип съёмки мультиспектральная | Pollux, шаг галсов 15,5 м на 100 м; находка: ≈1420 км галсов на 22 км² при дальности 210 км | SIM-CAM-03/20, Q-CAM-06 | закрыт, M1 (контракт TIFF16×5 — M2) |
| Вход: тип съёмки ИК | только 801; синтетический тепловизор по классу поверхности | SIM-CAM-16/17 | совместимость — M1 (MUST); тепловизор — M2 |
| Вход: тип съёмки LiDAR | носителя в парке нет — явная ошибка «нагрузки нет ни у одного борта» | SIM-BIZ-30, INH-13, SIM-FIN-20 | вне объёма. Причина: payloads.yaml раздел gaps — LiDAR не несёт ни один из трёх бортов ТЗ. Виртуальный сенсор — COULD, только как явно помеченная assumed-нагрузка |
| Вход: тип съёмки геофизическая | то же + отсутствие режима terrain-following | SIM-BIZ-30, SIM-FIN-20 | вне объёма. Причина: нет носителя и нет режима полёта 1,5–5 м AGL с огибанием рельефа; при появлении носителя — новый режим в SIM-UAV (Q-NEW-04) |
| Вход: границы разрешённого ВП | inclusion-зона, аналитический счёт длины вне полигона | SIM-WORLD-19/21, INH-08 | закрыт, M1 |
| Вход: бесполётные зоны | шесть типов, объёмная и призматическая геометрия, временнóе действие, фрейм высот | SIM-WORLD-18…23 | закрыт, M1 |
| Вход: резервные площадки посадки | landing_sites.reserve; действие DIVERT с проверкой достижимости по энергии; новая метрика reserve_reachable_frac — достижимость ближайшей резервной площадки из каждой точки маршрута; проверка пригодности reserve-площадок наравне с launch |
SIM-FIN-01/02, SIM-ENV §7.1, SIM-WORLD-32 | восстановлен (был потерян: ни один SIM-* ID не подхватывал Q-11) |
| Учёт скорости ветра | поле W(x,y,z,t), профиль по высоте, порывы, треугольник скоростей, допуск по фактическому ветру на высоте |
SIM-ENV-01…11 | закрыт сильнее ТЗ, M1 |
| ПЗ: маршрут и ключевые точки | фазы → путевые точки закрытого словаря из 10 типов | SIM-MIS-06 | закрыт, M0 |
| ПЗ: высота | altitude_frame обязателен, три фрейма, пересчёт через ЦМР и модель геоида |
SIM-MIS-03, SIM-WORLD-07 | закрыт, M0 |
| ПЗ: скорость | speed_ms пер-фаза, конверт скоростей, воздушная и путевая различаются |
SIM-MIS §1.3, SIM-UAV-26 | закрыт, M0 (семантика speed_ms — допущение, Q-MIS-11) |
| ПЗ: место старта и посадки | launch_site / landing_site пер-вылет; курс старта — функция ветра |
SIM-UAV-13, SIM-MIS §1.3 | закрыт, M1 |
| ПЗ: последовательность этапов полёта | словарь phase из 9 значений, факт пер-фаза, дельта план/факт по фазам |
SIM-UAV-15, SIM-MIS-06/24, INH-11 | закрыт, M0 |
| Выгрузка KML / GeoJSON | оба формата обязательны на вход; clampToGround — фатальная ошибка; round-trip ≤ 0,05 м |
SIM-BIZ-01, SIM-MIS-02/03/08 | закрыт, M1 |
| Два критерия оптимизации | симулятор их не меняет, а измеряет факт; два плана прогоняются на одном мире и seed | SIM-BIZ-23, INH-04 | закрыт, M1 (сравнение по 20 сидам — M2) |
| Браузер на ПК (п. 3.1) | фронт на встроенной графике, офлайн, 1366×768 | SIM-UX-08/24/29 | закрыт, M1 |
| Рекомендуемый стек (п. 3.2): Leaflet/OpenLayers | симулятор использует MapLibre GL JS + deck.gl | SIM-UX §6 | осознанное отклонение. Причина: Leaflet/OpenLayers — 2D-библиотеки, 3D-мир из них не строится; стек в ТЗ назван «рекомендуемым», не обязательным. Зафиксировано, чтобы вопрос на защите не был неожиданным |
| Демонстрация (п. 4): тестовый сценарий, визуализация маршрутов, выбор критерия, экспорт | демо-полигон по чеклисту свойств, поминутный сценарий 5 мин, прекомпьютнутые прогоны, фолбэк-видео | SIM-BIZ-25, SIM-FIN-06 | восстановлен (демо как управляемый артефакт отсутствовало во всех доменах) |
| Документация (п. 5): архитектура, алгоритм, инструкция по запуску, описание API, руководство пользователя, перечень известных ограничений | шесть артефактов; перечень ограничений — §11 этого документа | SIM-FIN-03/04/05, SIM-BIZ-29/33, §11 | восстановлен (было покрыто только «перечнем ограничений») |
| Сдача (п. 7.1): концепция, архитектура, прототип UI, описание алгоритма | доменные документы = концепция; архитектура — SIM-PLT; прототип UI — SIM-UX | — | закрыт документами |
| Сдача (п. 7.2): код, демо, презентация, документация, инструкция по запуску | M1 + SIM-FIN-03…06 | — | закрыт планом |
| Критерии жюри (п. 8) | обоснованность — числа «план/факт» вместо утверждений; качество алгоритмов — детерминированный headless и регрессионные барьеры; соответствие задаче — вход ровно KML/GeoJSON планировщика; эффективность и масштабируемость — фактический makespan на смешанном парке; качество демонстрации — воспроизводимый 3D-пролёт с проверяемыми числами | вся таблица §6 | закрыт |
13. Замечание ревью → что сделано¶
Каждый блокер отработан: либо требование исправлено в своде, либо записано «принято вопреки» с обоснованием. Ни одно замечание не проигнорировано молча.
Ревью 1 — бизнес и ценность (80-review/01-business-review.md)¶
| Замечание | Что сделано |
|---|---|
| Б-1. ~244 MUST из 294 не привязаны к M0/M1/M2 | Исправлено. §5: уровень проставлен каждому требованию в реестре; MUST разрешён только для M0/M1; M2-требования переведены в SHOULD/COULD. Итог: M0 — 67, M1 — 157, M2 — 111; MUST — 220 (все в M0/M1, в M2 их ноль). Перечень понижений — §5, таблица «Что понижено»; проверка «MUST только в M0/M1» выполняется скриптом по сводной таблице реестра |
| Б-2. Три несовместимых бюджета скорости движка (UAV-35 / MIS-34 / PLT-21) | Исправлено. BR-24: единый бюджет, владелец — SIM-PLT. Прогон однопоточный; 1 борт-час ≤ 60 с на ядро; отсюда 3-борт прогон = ≥20× (совпадает с SIM-PLT-21), 20 бортов × 3 ч = ≤3600 с на ядре. SIM-UAV-35 переписан («≤120 с на 8 ядрах» удалено — противоречило детерминизму) |
| Б-3. Вердикт GO невыдаваем по собственному правилу «assumed не основание GO» | Исправлено. BR-19 + новое требование SIM-FIN-16: трёхзначный вердикт NO-GO / UNRESOLVED / NO-FINDINGS с указанием полноты данных. Формулировка «нарушений не найдено на данных полноты X» заменяет «безопасно» |
| SIM-BIZ-25 против SIM-CAM-32: «повтор даёт идентичную картинку» невыполним | Исправлено. M1-критерий: журнал и числа — бит-в-бит; картинка — «визуально та же» через SIM-UX-03 (позиции ≤ 0,1 м). Кросс-GPU бит-идентичность растра вынесена в §11.3 |
| SIM-BIZ-06 (≤5 %) против SIM-MIS-30 (±1 с) — расхождение в 260 раз | Исправлено. Принята формулировка MIS: сумма компонент = дельте ± 1 с (BR-17, A-10). SIM-BIZ-06 переписан |
| Три бюджета сборки мира (BIZ-08 / PLT-03 / WORLD-35) | Исправлено. Владелец числа — SIM-WORLD. Единый: рабочие слои района ≤ 200 км² — ≤ 5 мин; полный мир с буфером 40 км (до 14 400 км², слой ≤ 90 м только для LOS) — ≤ 15 мин; повторно из кеша — ≤ 30 с. SIM-BIZ-08 и SIM-PLT-03 ссылаются |
| Размер RGB-кадра 20 МБ против 4 МБ | Исправлено. Единый справочник размеров: PF1B (6000×4000, JPEG) ≈ 6 МБ; RX1RM2 (7952×5304, JPEG) ≈ 20 МБ; Pollux (TIFF16 × 5 каналов, 1440×1080) ≈ 15 МБ. Расчёт вылета 201 на 22 км² ведётся по RX1RM2 → 5000 кадров ≈ 100 ГБ. SIM-PLT-23 пересчитан |
Анкер +18,2 % построен на «крейсере 15 м/с» Gemini, тогда как fleet.yaml даёт 10 |
Исправлено. В эталонах V-9 и W-02 явно записано: V_a = 15 м/с = airspeed_max, как в сценарии s06 планировщика; слово «крейсер» удалено. При крейсере 10 множитель был бы 1,67 |
| SIM-BIZ-14: «≥95 % из ≥12 мутантов» — процент изображает статистику | Исправлено. §7.3: «все 12 мутантов стартового набора; порог ≥95 % применяется при наборе ≥20» |
| SIM-CAM-23: самосбывающийся критерий («иначе оценка актуализируется») | Исправлено. Переписан в односторонний инвариант: фактическое число кадров ≤ 1,3× оценки, иначе бюджет хранилища превышен и прогон помечается — эталон не правится по результату теста |
V3 покрывает только геометрию; энергия, t_out_of_link, снос парашюта не имеют независимой сверки |
Исправлено. §7.2 — таблица «класс величин → максимальный достижимый уровень V» |
fidelity_class не отражает полноту слоя данных |
Исправлено. BR-16 + SIM-FIN-17: признак layer_completeness для слоя препятствий, по образцу маски качества ЦМР SIM-WORLD-16; вердикт BR-19 обязан его называть |
| Учебный режим висит на неотвеченном Q-BIZ-06 и противоречии с РЭ | Исправлено. §5: учебный режим целиком понижен до COULD/M2; формат interventions[] как детерминированный вход оставлен |
| SIM-UX §2.5: «юзабилити-тест с реальными операторами до защиты» невыполним | Исправлено. Невыполнимая оговорка удалена; остаются машинные критерии SIM-UX-15/16 (halo и баннер не позже следующего кадра, код причины без доп. клика) |
| Редактор зон дублирует вход планировщика | Исправлено. SIM-WORLD-27 понижен до SHOULD/M2; в M1 остаётся импорт + валидация + правка вертикальных границ и фрейма зоны |
| SIM-ENV-15 и SIM-ENV-02 — циркулярные приёмки, записанные как факт | Исправлено. §7.2: обе величины несут validation_level: V2 и не подаются как сверенные с источником |
| SIM-UX-24: «Intel Iris Xe или аналог» — неизмеримо | Исправлено. Понижено до SHOULD; замер ведётся на конкретной машине, модель указывается в отчёте |
| SIM-BIZ §5 M0 «рельеф в локальной UTM» против SIM-WORLD-02/04 | Исправлено. §5/M0 переписан на ENU через ECEF; BR-06 объявляет ENU единственной рабочей СК во всех доменах |
| SIM-BIZ-27 против SIM-MIS-28 (имена метрик) | Исправлено. Контракт: колонки plan / fact / delta при именах метрик валидатора. BR-21 переформулирован |
| SIM-BIZ-08 «не хуже линейного» без точек замера | Исправлено. Точки 1 / 22 / 50 / 100 / 200 км²; t(S)/S не растёт более чем на 20 % между соседними точками |
| SIM-ENV-06 «эффект не менее 1 п.п.» — критерий заметности, не верности | Исправлено. Помечен как smoke-test, validation_level: V2, не валидация спектра Драйдена |
Ревью 2 — техническая состоятельность (80-review/02-tech-review.md)¶
| Замечание | Что сделано |
|---|---|
Б-1. SIM-WORLD-18 (отказ без altitude_frame) против SIM-MIS-01/SIM-BIZ-01 — схема планировщика поля не имеет |
Исправлено. BR-08: зона без фрейма принимается с документированным дефолтом AMSL, warning ZONE_ALT_FRAME_DEFAULTED, зависящие величины помечаются fidelity_class: assumed. Жёсткий отказ ZONE_ALT_FRAME_REQUIRED остаётся только в режиме --strict. Отдельно — просьба к планировщику внести поле в schema_version 1.1 (односторонность зависимости сохраняется: это просьба, не требование) |
| Б-2. Дерейтинг холода: 28 мин (SIM-UAV-07/V-11) против 30 мин (SIM-ENV-15) | Исправлено. Одна кривая на весь проект — кусочно-линейная от +15 °C, в env_profile.yaml. Gemini при −10 °C = 30,0 ± 0,5 мин. Эталон V-11 пересчитан с 28 на 30; SIM-UAV-07 ссылается на кривую, собственной модели не задаёт |
| Б-3. Клиренс по нижней границе ±LE90 против «0 ложных срабатываний» | Исправлено. BR-07: hard-violation ставится по центральному значению клиренса; случай «клиренс − LE90 < 100 ≤ клиренс» — отдельный класс CLEARANCE_MARGIN_BELOW_GEOREF со статусом warning. Оба числа и ширина интервала присутствуют в ответе. SIM-WORLD-06 переписан |
| Б-4. SIM-UX-22 рисует связь кругом, физика считает LOS по рельефу | Исправлено. BR-23: поверхность связи строится по фактической LOS-изолинии из полей link_quality / blocking_point журнала; круг radio_range_km показывается только как справочный максимум с явной подписью (для 801 — «видеоканал 10 км») |
| Б-5. SIM-UAV-35 (8 ядер на прогон) против SIM-MIS-19/§3.4 (однопоточность ради детерминизма) | Исправлено. См. Б-2 ревью 1: прогон однопоточный, параллелизм только по прогонам; SIM-UAV-35 приведён к «20 бортов × 3 ч ≤ 3600 с на одном ядре» |
| В-1. Три бюджета сборки мира | Исправлено — см. ревью 1 |
| В-2. Размер кадра ×5 | Исправлено — см. ревью 1 |
В-3. V_a Gemini в анкоре +18,2 % |
Исправлено — см. ревью 1 |
| В-4. SIM-UX-13 (шаг 0,1 с) против SIM-MIS-25 (телеметрия 5 Гц, интерполяция запрещена) | Исправлено. Телеметрия поднята до 10 Гц (без децимации, = шагу dt = 0,1 с): 108 000 записей и ≈ 13 МБ на 180-минутный вылет 201 — укладывается в бюджет ≤ 20 МБ. Это снимает и П-8, и С-8: SSE-канал отдаёт тот же поток, покадровый шаг UI = 0,1 с |
В-5. Порог напряжения: SIM-UAV-30 («посадка») против SIM-ENV строка 21 (RTL→LAND) |
Исправлено. Дефолт — по букве РЭ-201, с. 98: LAND (борт сам начинает посадку). Вариант RTL→LAND доступен переключателем сценария; расхождение D-ENV-01 остаётся открытым вопросом Q-ENV-01 |
В-6. Три порога невыполнимости галса (< V_a / ≥ V_a / ≥ 0,85·V_a) |
Исправлено. Единый порог: \|W⊥\| ≥ V_a → violation WIND_EXCEEDS_AIRSPEED (совпадает с валидатором); 0,85·V_a ≤ \|W⊥\| < V_a → warning WIND_MARGIN_LOW. Запас 15 % — параметр env_profile.yaml |
В-7. SIM-ENV-10: высота нормирования wind_max подана как факт |
Исправлено. Помечено как ДОП-ENV-23 («в РЭ высота измерения не указана; принято — на высоте полёта»), добавлен вопрос Q-ENV-12 |
В-8. SIM-MIS §1.3: переопределение семантики speed_ms |
Исправлено. Занесено как допущение A-MIS-13 + вопрос Q-MIS-11; в схеме 40-formats/03 различения нет, расхождение зафиксировано |
| В-9. Сравнение 20 сидов не выражается объявленным API | Исправлено. Явно записано: серию из 40 прогонов оркестрирует CLI/клиент, API отдаёт только GET /runs/compare двух готовых прогонов. SIM-MIS-40 → M2 |
| С-1. SIM-UX-10: 43° — диагональ, не горизонталь | Исправлено. Критерий: диагональный FOV Pollux 43,0° ± 0,5°, горизонтальный 34,5° (BR-23) |
| С-2. Рабочая СК не пронесена через домены | Исправлено — BR-06 |
| С-3. Невязка разложения дельты | Исправлено — ±1 с |
| С-4. σ ≤ 3 м для мультиротора «выводится», но из таблицы не следует | Исправлено. Помечено как выбор с запасом: таблица даёт 9,0 м для Gemini + PF1B; 3 м принято консервативно и объявлено допущением |
| С-5. Порог 95 % при 12 мутантах | Исправлено — см. ревью 1 |
| С-6. Шаг LOS 15 м против 10 м | Исправлено. Единое правило: шаг профиля ≤ ½ шага рабочей сетки ЦМР — ≤ 15 м на GLO-30, ≤ 5 м на топосъёмке 10 м. Бюджет производительности 5·10³ запросов/с посчитан под 15 м |
С-7. branch против SIM-PLT-25 (checkpoint/resume вне объёма) |
Исправлено. Оба — M2/COULD; согласовано |
| С-8. SSE 10 Гц против журнала 5 Гц; два набора множителей скорости | Исправлено. Журнал 10 Гц (см. В-4); набор множителей UI приведён к 1× / 5× / 10× / 30×, режимы часов симулятора используют тот же набор |
| С-9. Пример смаза сшит из двух камер (выдержка Riebo + GSD Pollux) | Исправлено. Обе величины помечены assumed; критерий SIM-ENV-13 переписан на согласованную пару «камера + её выдержка», Riebo из расчётов исключены (R8: FOV несовместим с f = 40 мм) |
| С-10. Радиовидимость по рельефу: M2 в vision, MUST в SIM-ENV | Исправлено. Отнесена к M1 (на ней стоит флагманский сценарий W-21 и failsafe потери связи); vision-текст исправлен |
| М-1…М-7 (страница цитаты, диапазон шага галсов, арифметика метео-решётки, допуски round-trip, «≥0 при смене АКБ», источник диагонали Pollux, «до последнего знака») | Исправлено попутно: страница цитаты о 30 % — с. 61; шаг галсов указывается с профилем («41–123 м для 201 + RX1RM2 на 100–300 м»); метео-решётка — 2,25 МБ по собственной формуле; round-trip: зоны ≤ 0,01 м, план ≤ 0,05 м (разные механизмы, объяснено); «смена АКБ ≥ 0» заменено на «≥ времени снятия/установки/предстартовой»; диагональ Pollux берётся из sensor_diagonal_mm: 6.3 явно; критерий «до последнего знака» применяется только к сравнимым колонкам |
Ревью 3 — полнота и риски (80-review/03-completeness-and-risks.md)¶
| Замечание | Что сделано |
|---|---|
| Д-01. 294 требования без маппинга на вехи | Исправлено — §5 и колонка «Уровень» в реестре |
| Д-02. Домены противоречат друг другу в MUST (П-1…П-9); нет единого реестра кодов ошибок и допущений | Исправлено. Все девять противоречий сняты (см. таблицу ревью 2 выше); заведены требования SIM-FIN-09 (единый реестр кодов ошибок и событий) и SIM-FIN-10 (сквозной реестр допущений: четыре нумерации A-xx / A-MIS-xx / ДОП-W-xx / ДОП-ENV-xx сводятся в один файл с сохранением исходных ID как алиасов). Единый код фрейма высот — ALT_FRAME_MISSING (вместо трёх вариантов) |
| П-3/R-04. SIM-CAM-11 (кадры офлайн, MUST) против SIM-MIS-33 («без GPU», MUST) | Исправлено. BR-15: «сухой» геометрический режим — MUST и дефолт headless для 100 % кадров; растровый кадр — GUI/по запросу, CPU-растеризатор с потолком ≤ 5000 кадров/прогон. SIM-CAM-11 переписан |
| Д-04/R-03. Выгрузка зеркала геоданных и погоды не запланирована, доступность источников не проверена | Исправлено. SIM-FIN-07 + шаг 0 плана 03-next-steps.md: проверка доступности каждого источника из рабочего контура и выгрузка зеркала демо-района до начала кодирования. ERA5 понижен до SHOULD/M2 |
Д-06/R-02. Контракт 40-formats/03 не заморожен; нет планов-фикстур |
Исправлено. SIM-FIN-08: заморозка schema_version: 1 двусторонним соглашением + рукописные планы-фикстуры s01/s04/s07 в репозитории симулятора (они же — тесты импорта) |
| Д-05. Комплект документации по п. 5 ТЗ не покрыт требованиями | Исправлено. SIM-FIN-03 (инструкция по запуску), SIM-FIN-04 (руководство пользователя по 7 экранам), SIM-FIN-05 (описание API); перечень ограничений — §11; архитектура и алгоритм — доменные документы |
| Потеряно требование ТЗ «резервные площадки посадки» | Исправлено. SIM-FIN-01 (метрика reserve_reachable_frac — достижимость ближайшей резервной площадки из каждой точки маршрута по остатку энергии) и SIM-FIN-02 (проверка пригодности reserve-площадок по SIM-WORLD-32) |
| Д-03. Нет домена «демонстрация на защите» | Исправлено. SIM-FIN-06: демо-полигон по чеклисту свойств (ЛЭП в OSM, перепад ≥ 50 м, аэродром в 5 км), поминутный сценарий 5 мин, прекомпьютнутые прогоны, фолбэк-видео |
| Д-07. Серверный стек симулятора не выбран | Исправлено частично. SIM-FIN-15: решение о рантайме движка принимается до написания движка, критерий — управляемая FP-семантика (запрет -ffast-math, контроль FMA, фиксированный порядок редукций) и возможность прогнать тест детерминизма первым. Сам выбор — отдельный документ, шаг 1 плана |
Д-08. Журнал без schema_version, совместимости и retention |
Исправлено. SIM-FIN-11: log_schema_version в манифесте; правило «минорные версии читаются вперёд»; retention числом — последние 30 прогонов батча и 10 демо-прогонов |
| Д-09. Безопасность разбора входных файлов | Исправлено. SIM-FIN-13: лимиты размера (≤ 4 ГБ растр, ≤ 200 МБ вектор), времени (≤ 15 мин) и памяти на импорт; отключение внешних сущностей XML; отказ от распаковки KMZ с коэффициентом сжатия > 100 |
| Д-10. Бортовая логика failsafe 801/Gemini не определена | Исправлено. SIM-FIN-14: явная таблица «событие → реакция 801/Gemini» с пометкой ДОПУЩЕНИЕ на каждой строке + вопрос Q-NEW-02 |
| Д-11. Синтетические тестовые миры нигде не порождаются | Исправлено. SIM-FIN-12: детерминированный мини-генератор (плоскость + гауссов хребет 300 м + гряда 80 м + цилиндр-вышка 120 м + NFZ со срезаемым углом) как CI-фикстура |
| Д-12. Нет квот и приоритетов прогонов | Исправлено. SIM-FIN-19: интерактивные прогоны имеют приоритет над батчем; остальное признано ограничением (§11.5) |
| Д-13. Приёмка мира против эталона отсутствует | Исправлено. SIM-FIN-18: сверка GLO-30 против ArcticDEM 10 м и ALOS AW3D30 на демо-полигоне как дешёвый суррогат эталона; результат поднимает клиренс до V3 |
| Д-14. AGPL-обязательства Open-Meteo self-host не разобраны | Исправлено. Строка в §11.5 и в реестре: self-host без модификаций, исходники — апстрим; при модификации сервера действует сетевая оговорка AGPL-3.0 |
| R-09. Переформулировка «молнии» не подтверждена | Принято вопреки замечанию с митигацией: трактовка сохраняется (прямой удар — терминальное событие с вероятностью 0, потому что после него нечего продолжать), но добавлен вопрос Q-NEW-01 и демо-сценарий W-14 «молния буквально» рядом с грозовой зоной |
| Дыра: LiDAR не имеет даже COULD-требования | Принято вопреки замечанию. SIM-FIN-20 фиксирует LiDAR и геофизику как вне объёма с причиной («носителя нет в парке ТЗ») и как COULD-ветку «виртуальный сенсор с пометкой assumed» — реализовывать её в M1/M2 не планируется, потому что она порождает числа, которые нечем проверить |
| Дыра: terrain-following отсутствует как режим полёта | Принято вопреки замечанию. Режим не вводится: без носителя он не проверяем ни одним эталоном. Записано в §11.1 и в SIM-FIN-20; вопрос Q-NEW-04 |
| 77 вопросов с ~16 дублями | Исправлено. Дедуплицировано до 61; топ-12 по влиянию на объём — §10; 6 новых вопросов заведены |
Составлено 15.09.2026 по восьми доменным документам simulate/docs/ и трём ревью 80-review/.
Числа без ссылки на источник в этом документе отсутствуют; всё помеченное ДОПУЩЕНИЕМ продублировано
в §11 «Перечень известных ограничений».