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

Симулятор «мир БВС» — зачем он существует, кому продаёт ценность и по каким числам мы поймём, что он получился

Продуктовый домен симулятора: проблема, роли, сценарии использования, границы, уровни зрелости, метрики успеха (включая метрики достоверности — ключевой раздел), связка с планировщиком и требования SIM-BIZ.

Область: /Users/gpb/geoscan/simulate. Соседний сервис — планировщик geoscan (задача 5 ЛЦТ). Источники ТТХ: /Users/gpb/geoscan/docs/task5/10-hardware/fleet.yaml и payloads.yaml — единственная правда. Первоисточники: РЭ Геоскан 201, спецлисты 801 и Gemini, ТЗ хакатона, руководство Mission Planner.


1. Проблема

1.1 Формулировка в одну строку

Планировщик выдаёт план, который арифметически корректен (длина / скорость + запас), но никто не знает, что произойдёт с этим планом в воздухе. Единственный способ узнать сегодня — вылететь. Вылет необратим, дорог по времени, ограничен погодой и, у 201, физически не отменяем после перевода борта в режим «Катапульта».

1.2 Что именно нельзя проверить без вылета

Список дыр, которые расчётом не закрываются, зафиксирован в контекстном дайджесте (01-context-digest.md, 17 пунктов). Ниже — те из них, где цена ошибки выражается числом из ТТХ.

# Что нельзя проверить расчётом Почему расчёт не помогает Цена ошибки в числах источника
P-01 Фактическое покрытие по кадрам, а не по полосам планировщик считает полосу захвата сплошной лентой; реальность — дискретные кадры с интервалом затвора, который не указан ни для одной нагрузки (A-08) PF1B footprint 117×78 м при H=100 м; при недостаточной частоте затвора продольное перекрытие 70 % (payloads.yaml) не обеспечивается → дыры
P-02 Клиренс над реальным рельефом (CFIT) план в AGL, DEM в AMSL; ошибка фрейма высот на полигоне 5×5 км с перепадом 50 м даёт фактический клиренс 50 м вместо 100 м РЭ 201: «не менее 100 м выше рельефа и высотных объектов»; altitude_agl_min: 100, can_fly_below_launch_point: false
P-03 Высотные препятствия вне геозон (ЛЭП, вышки, трубы) их нет во входной схеме планировщика — есть только inclusion/exclusion полигоны РЭ 201 требует клиренс 100 м и над точечными объектами; Q-09 заказчику открыт
P-04 Где борт окажется при потере связи план не содержит параметра «Время автономного полёта»; числа в РЭ нет вообще 201: радио 40 км при маршруте 210 км → уход за связь штатен; Gemini: 5 км; 801: 10 км (и это видеоканал, а не управление — расхождение R5)
P-05 Выполнимость разворота при реальном радиусе планировщик считает разворот временем или вообще не считает R = V²/(g·tanφ) = 137 м при 27,8 м/с и крене 30° → диаметр 273 м против шага галсов 70–120 м
P-06 Снос под ветром и отклонение от ЛЗП ветер в схеме планировщика — скаляр, все реальные источники дают профиль по высоте при W/V_a = 0,53 выигрыш галса поперёк ветра ≈18 % (1/√(1−(W/V_a)²)); при |W⊥| ≥ V_a линия не держится вообще
P-07 Куда реально сядет 201 на парашюте коэффициента сноса нет ни в одном источнике (A-09, Q-12) высота выброса 70 м, радиус автоотцепа 0–300 м (РЭ, раздел «Предстартовая подготовка»)
P-08 Что останется неснятым при срабатывании автовозврата в середине галса планировщик резервирует 20 % энергии, но порог возврата — напряжение, не процент порог возврата настраивается в 16,5–20,75 В (РЭ); при сильной разрядке планер теряет скорость и высоту
P-09 Фактическое время оборота на площадке turnaround_time_min: 10 в схеме сценария — величина из воздуха Gemini: заряд 105 мин против 40 мин полёта (2,6 : 1); для катапультного 201 10 мин недостижимы (расхождение D-10)
P-10 Допуск к вылету по метео сверх ветра слова «дождь», «снег», «обледенение», «туман», «молния», «гроза» не встречаются в РЭ 201 ни разу жёстко документированы только ветер (201: 12 м/с; 801/Gemini: 10 м/с) и температура (201: −20…+40; Gemini: −15…+40)
P-11 Живучесть плана при отказе борта в момент t план статичен, перепланирования нет ~30 кодов отказов в РЭ; «АВАРИЯ» и «ОШИБКА КОМПАСА» → немедленная посадка
P-12 Пригодность площадки под катапульту схема сценария держит takeoff_heading_deg как константу площадки РЭ: сектор ±30°, объекты не выше 0,1·L, запуск строго против ветра — курс есть функция ветра, а не свойство площадки (расхождение D-8)

1.3 Сколько стоит «просто слетать»

Статья Что известно из источников Что неизвестно
Подготовка 201 сборка ПУ, укладка парашюта с проверкой замка отцепа рывками, натяжение жгутов лебёдкой непосредственно перед стартом, мастер предстартовой подготовки, «Арктика» — снятие натяжения двумя людьми времени подготовки в РЭ нет (A-BIZ-01)
Обратимость после перехода в режим «Катапульта» «запрещается брать в руки и переносить БВС»; отмена = полное прохождение мастера заново
Погодное окно ветер 201 ≤ 12 м/с, 801/Gemini ≤ 10 м/с; при 11 м/с доступен 1 борт из 3 (сценарий s09) статистики повторяемости окон нет (Q-BIZ-05)
Оборот Gemini: 105 мин заряд / 40 мин полёт; ЗУ Gemini работает 0…+40 °C — летать можно до −15, заряжать нельзя ниже 0 (расхождение D-7) времени заряда 201 и 801 в источниках нет
Ресурс борта ТО после 80 полётов или 1 года; АКБ 201 — ≥80 циклов стоимости лётного часа и стоимости борта в источниках нет (Q-BIZ-01)
Согласование ВП класс G без разрешения только при: масса 0,25–30 кг, вне НП, светлое время, прямая видимость, H ≤ 150 м над рельефом, вне запретных зон (ФП-138). Иначе — разрешение сроки получения разрешения для нашего класса работ (все три борта < 30 кг, ВР/МР ≥5/≥3 суток к ним не применяется)
Потеря борта необратима; резервного борта в парке из трёх нет цена в деньгах (Q-BIZ-01)

Вывод. Стоимость одной проверки гипотезы «полетит ли этот план» измеряется не деньгами, а необратимостью и погодным окном. Симулятор превращает эту проверку в операцию, которая стоит секунды и повторяется сто раз за ночь.

1.4 Что специфично именно для этого парка

Борт Что делает его непроверяемым на бумаге
Геоскан 201 катапульта + парашют: старт и посадка — не точки, а зоны с геометрией (сектор ±30°, объекты ≤0,1·L; эллипс сноса под куполом с 70 м). Ни одно из этого не выражается координатой в KML. Плюс: 210 км маршрута при 40 км радио → часть полёта штатно вне телеметрии
Геоскан Gemini 40 мин полёта против 105 мин заряда. Любой план длиннее одного вылета упирается не в энергию, а в очередь на зарядном устройстве; ошибка модели оборота меняет makespan в разы. Единственная честная энергомодель парка: 144,7 Вт·ч / 217 Вт
Геоскан 801 единственный носитель тепловизора (640×512, F=9,1 мм). Если сценарий требует ИК, борт не заменяется ничем; его 40 мин и ветер 10 м/с становятся жёстким горлышком всего плана. Вт·ч не указаны — ресурс только по времени

2. Роли и их работы (jobs-to-be-done)

Формат: роль → работа («когда …, я хочу …, чтобы …») → вместо чего симулятор это делает.

Роль Работа (JTBD) Вместо чего Что получает на выходе
Внешний пилот / оператор (РЭ: «к запуску допускаются лица, прошедшие обучение на базе ООО „Геоскан“») Когда мне выдали чужой план, я хочу увидеть, где борт пройдёт низко, куда снесёт парашют и что будет при потере связи — до того, как натяну жгуты вместо «поверить планировщику» и вместо разведывательного вылета список нарушений с координатами и временем + видео пролёта
Планировщик работ (расчёт) Когда я выбираю между двумя планами, я хочу сравнить их по факту, а не по оценке решателя вместо сравнения двух чисел makespan, посчитанных одной и той же моделью таблица «план vs факт» на оба плана, дельта разложена по причинам
Заказчик съёмки Когда мне обещают покрытие 100 % и срок, я хочу увидеть, чем это обеспечено вместо приёмки по факту сдачи материалов (когда переснимать уже поздно) coverage_fraction по кадрам, а не по полосам; карта дыр
Обучаемый оператор Когда я учусь настраивать предстартовые параметры 201, я хочу ошибиться безопасно вместо тренировки на реальном борте (необратимо) или отсутствия тренировки вообще последствия каждого из 4 параметров мастера предстартовой подготовки, измеренные в метрах и минутах
Разработчик алгоритмов планировщика Когда я меняю эвристику раскладки галсов, я хочу за ночь узнать, не стало ли хуже на 100 сценариях вместо ручной проверки 3–5 сценариев глазами регрессионный отчёт: дельта факта по каждому сценарию, красный/зелёный
Жюри хакатона Когда я оцениваю «обоснованность» и «эффективность маршрутов», я хочу увидеть доказательство, а не скриншот вместо презентации с картинкой 3D-пролёт в реальных координатах + числа на экране, совпадающие с отчётом валидатора
Ревьюер проекта (один человек на агентов) Когда агенты сдали код, я хочу проверить результат числом, а не чтением диффа вместо чтения кода отчёт симулятора рядом с отчётом валидатора, обе таблицы воспроизводимы по seed

Роль, которой нет и не будет: диспетчер реального воздушного движения. Симулятор не участвует в контуре управления реальными полётами (см. §4).


3. Сценарии использования

Нумерация U-01…U-12. Каждый сценарий — строки таблицы: актор, триггер, вход, что делает симулятор, выход, ценность.

U-01. Приёмка плана перед вылетом

Актор внешний пилот / оператор
Триггер получен файл плана (KML/GeoJSON по схеме 40-formats/03), до выезда на площадку
Вход plan + scenario + world_snapshot_id (рельеф, препятствия, зоны) + фактический ветер
Делает прогоняет каждый вылет по фазам takeoff…landing; проверяет клиренс ≥100 м над рельефом и объектами с шагом ≤10 м; проверяет курс старта против ветра и сектор ±30°/0,1·L; проверяет, что порог возврата 16,5–20,75 В не наступает раньше конца задания; строит эллипс сноса парашюта и пересекает его с запретами
Выход preflight_report: список нарушений с (lat, lon, t, фаза, причина, ссылка на пункт РЭ) + вердикт GO/NO-GO + список параметров мастера предстартовой подготовки, которые надо изменить
Ценность план проверяется за секунды до того, как натянуты жгуты, а не после жёсткой посадки

U-02. Сравнение двух планов

Актор планировщик работ
Триггер решатель выдал два плана: по makespan и по total_flight_time (два критерия из ТЗ)
Вход два plan на одном scenario и одном world_snapshot_id
Делает прогоняет оба на одном seed и одном ветре; считает факт по обоим; раскладывает дельту «план↔факт» по вкладам: ветер, развороты, набор/снижение, оборот на площадке, автовозврат
Выход таблица 2×N метрик + столбец «дельта факт−план» + разложение дельты
Ценность выбор между критериями делается по факту, и видно, какой из планов «красив на бумаге»

U-03. Обучение оператора

Актор обучаемый оператор
Триггер учебное занятие; допуск к 201 требует обучения (прямое требование РЭ)
Вход учебный сценарий + свободно редактируемые параметры мастера предстартовой подготовки: радиус автоотцепа парашюта (0–300 м), время автономного полёта (значения в РЭ нет), напряжение возврата (16,5–20,75 В), минимальная высота возврата (100–4000 м)
Делает проигрывает полёт в 3D с выбранными параметрами; вбрасывает событие (потеря связи, низкое напряжение, нарушение зоны); показывает поведение борта по логике РЭ, а не по логике ArduPilot (это разные вещи: РЭ «НАРУШЕНИЕ ЗОНЫ» → отключение фотокамеры + полёт к месту посадки)
Выход запись сессии + разбор: где борт оказался, сколько задания потеряно, сработал ли автоотцеп на дереве
Ценность ошибка в настройке параметра стоит перезапуска симуляции, а не борта

U-04. Регрессионный прогон алгоритма планировщика (headless, 100 сценариев)

Актор разработчик алгоритмов планировщика; CI
Триггер ночной прогон после merge; или ручной запуск перед сдачей
Вход набор sc-* (борта 1–20, площадь 1–200 км², ВПП 1–5, NFZ 0–20) + планы, выданные текущей версией решателя
Делает без GUI, без сети, по фиксированному (world_snapshot_id, seed); прогоняет все сценарии; сравнивает факт с предыдущим прогоном
Выход одна таблица: сценарий, факт-makespan, факт-coverage, нарушения, дельта к baseline, время прогона; и run_manifest с sha256 всех входов
Ценность «стало хуже» обнаруживается ночью на 100 сценариях, а не на защите на одном

U-05. Демонстрация на защите

Актор команда → жюри
Триггер питч-сессия; критерии ТЗ «эффективность маршрутов и масштабируемость» и «качество демонстрации»
Вход один подготовленный сценарий смешанного парка, заранее собранный мир, заранее прогнанный батч
Делает проигрывает план в 3D в реальных географических координатах с зонами; параллельно показывает счётчики факта; по команде включает ветер 8 м/с и повторяет — виден проигрыш галсов вдоль/поперёк
Выход 5-минутный воспроизводимый пролёт + таблица чисел, идентичная отчёту валидатора
Ценность обоснованность подхода показывается, а не утверждается; числа на экране проверяемы

U-06. Разбор «что было бы, если бы отказала связь»

Актор планировщик работ, оператор
Триггер вопрос «а если связь пропадёт на дальнем галсе?»; штатная ситуация для 201 (210 км маршрута при 40 км радио)
Вход план + модель радиовидимости (по рельефу, а не круг R) + параметр «время автономного полёта» (ДОПУЩЕНИЕ, значения в РЭ нет)
Делает помечает участки вне радиовидимости; для выбранного момента t запускает логику РЭ: таймер → возврат на точку старта на текущей высоте → круговой облёт; считает, сколько задания потеряно и хватает ли энергии на возврат
Выход карта «зона без связи», момент срабатывания, остаток задания, остаток энергии, точка фактической посадки
Ценность цена ухода за связь становится числом, а не «ну обычно долетает»

U-07. Подбор старта и посадки под фактический ветер

Актор оператор, планировщик работ
Триггер прогноз ветра изменился ко дню работ
Вход площадки, ветер (направление = ОТКУДА дует), рельеф, препятствия
Делает пересчитывает курс катапультного старта строго против ветра, проверяет сектор ±30° и правило «объекты не выше 0,1·L» по рельефу и препятствиям; строит маршрут посадки из 3 точек с заходом против ветра; пересекает эллипс сноса с дорогами/водой/застройкой
Выход допустимый диапазон курсов старта/захода на каждую площадку + вердикт «площадка пригодна/непригодна при данном ветре»
Ценность закрывает расхождение D-8/D-9: курс старта — функция ветра, а не константа площадки

U-08. Проверка клиренса над рельефом и препятствиями (CFIT)

Актор оператор, заказчик съёмки
Триггер полигон в пересечённой местности или с ЛЭП/вышками
Вход план с обязательным altitude_frame (AGL/AMSL) + DEM + слой препятствий (terrain_z + canopy/здания/мачты)
Делает дискретизирует траекторию шагом ≤10 м, считает превышение над obstacle_height; отдельно проверяет «не ниже точки старта» для 201
Выход профиль клиренса вдоль маршрута, минимум, список точек < 100 м
Ценность ловит самую дорогую ошибку — путаницу AGL/AMSL, которая вдвое режет клиренс и вдвое меняет GSD

U-09. Отказ борта в момент t — живучесть плана

Актор планировщик работ
Триггер вопрос «план из трёх бортов — а если один выбыл?» (сценарий s10)
Вход план + момент отказа t + код отказа (АВАРИЯ / ОШИБКА КОМПАСА → немедленная посадка; ОШИБКА КРЛ → полёт продолжается)
Делает обрывает вылет по логике кода отказа; считает недоснятую площадь и сдвиг makespan при доборе оставшимися бортами
Выход «потеряно X км² и Y минут», карта недоснятого
Ценность устойчивость плана к отказу становится метрикой, а не надеждой

U-10. Калибровка модели по реальной телеметрии

Актор разработчик симулятора
Триггер заказчик передал лог реального вылета (сегодня такого лога нет — Q-BIZ-02)
Вход лог (позиция, скорость, напряжение, срабатывания камеры) + план, по которому летели
Делает прогоняет тот же план, сравнивает траекторию и энергию с фактом, оценивает ошибку модели
Выход отчёт калибровки: ошибка по времени вылета, по длине трека, по остатку энергии; обновлённые значения допущений
Ценность единственный способ поднять достоверность выше уровня «сверено с руководством» (см. §6.2)

U-11. Проверка фактического покрытия по кадрам и качества кадра

Актор заказчик съёмки, планировщик работ
Триггер требование GSD в задании (quality.gsd_cm)
Вход план + модель камеры из payloads.yaml (k, размеры матрицы, f) + фактическая траектория с креном и сносом
Делает срабатывает затвором по факту пройденного пути, строит футпринт каждого кадра с учётом крена и сноса, объединяет и пересекает с полигоном; считает смаз V_g·t_exp
Выход coverage_fraction по кадрам, карта дыр, распределение фактического GSD, доля кадров со смазом выше порога
Ценность закрывает P-01: «полоса покрыта» и «кадры сомкнулись» — разные утверждения

U-12. Формирование «перечня известных ограничений»

Актор команда → жюри (обязательный раздел документации по п. 5 ТЗ)
Триггер подготовка сдачи
Вход все выходные числа прогона с их fidelity_class + реестр допущений A-xx
Делает для каждого допущения варьирует значение на ±20 % и меряет отклик выходных метрик; сортирует допущения по влиянию
Выход таблица «допущение → на что влияет → насколько (в % метрики) → чем заменить»
Ценность перечень ограничений перестаёт быть текстом и становится измерением

4. Границы продукта

Область В объёме Явно ВНЕ объёма Почему вне Что вместо
Аэродинамика кинематическая модель: ветровой треугольник, радиус разворота по крену, ограничения по скоростям из fleet.yaml, вертикальные скорости сертифицируемая аэродинамика уровня X-Plane (поляра, обдувка, срыв) в источниках нет ни поляры расхода, ни радиуса разворота, ни крена ни для одного борта — модель было бы нечем питать; и она не отвечает ни на один вопрос из §1.2 явно объявленный класс модели «кинематика + энергия по средней мощности» с указанием ошибки
Автопилот воспроизведение документированного поведения: коды отказов РЭ, пороги возврата, логика «Возврат»/«Посадка», спираль набора, точка ожидания 300 с HIL/SITL-связка с реальной прошивкой автопилота Геоскан прошивка и её параметры недоступны; SITL ArduPilot воспроизводит не ту логику (РЭ: НАРУШЕНИЕ ЗОНЫ → камера off + полёт на посадку; ArduPilot: GUIDED → возврат → барражирование) — подмена дала бы ложную уверенность таблица «пункт РЭ → тест симулятора», расхождения с ArduPilot фиксируются как находки
Управление приём плана, прогон, выдача чисел управление реальными бортами, выдача команд на НСУ, любой контур с реальным железом безопасность полётов; сервис не сертифицирован и не будет; онлайн-контур у заказчика вообще не подтверждён (Q-01) офлайн-контур «файл → симулятор → отчёт», как и у планировщика
Графика 3D-сцена в реальных координатах: рельеф с отмывкой, объёмные зоны, борт, полоса захвата, вид «с камеры» фотореалистичный рендер уровня Unreal, Google Photorealistic 3D Tiles три независимых блокера у Google: покрытие РФ фактически нулевое, ToS запрещает пре-фетч/кэш, Google Cloud закрыт для РФ с 20.03.2024. Плюс требование «docker compose up без интернета и без ключей» гипсометрия + отмывка по Copernicus DEM GLO-30, PMTiles по HTTP Range
Камера геометрия кадра (футпринт, GSD, перекрытие, смаз), синтетический кадр по подложке и рельефу физически корректная радиометрия, дисторсия, шум матрицы, атмосферное рассеяние радиометрия и дисторсия камер в источниках отсутствуют полностью; ИК-радиометрия потребовала бы тепловой модели сцены, которой нет кадр служит проверкой геометрии покрытия, а не имитацией снимка; помечается fidelity_class: derived
Метрики качества плана факт и дельта «план↔факт» coverage_fraction, makespan_s и прочие метрики качества самого плана их считает валидатор планировщика; дублирование сломало бы принцип независимости симулятор отдаёт факт, валидатор — норму; расхождение двух — сигнал
Метео ветер (профиль по высоте), температура, пороги допуска; молния/снег/сеть — как события с настраиваемыми порогами физически корректная метеомодель (конвекция, обледенение, микропорывы) пороги по осадкам, снегу, грозе и обледенению в РЭ не заданы вообще — только ветер и температура события моделируются как переключатели допуска и деградации ТТХ; все пороги — в допущениях
Планирование нет построение маршрутов, раскладка галсов, назначение бортов это работа планировщика; если симулятор начнёт планировать, он перестанет быть независимой проверкой симулятор только исполняет чужой план
Данные открытые наборы с совместимой лицензией FABDEM (CC BY-NC-SA), ArcticDEM 2 м (education/research), Mapbox Terrain-RGB, Cesium ion SaaS лицензионные блокеры, зафиксированы в 10-world/01 GLO-30/90, ArcticDEM 10 м, WorldCover, OSM (с вынесением share-alike слоя отдельным артефактом)

5. Уровни зрелости

M0 — минимально осмысленный симулятор

Что умеет headless, один борт (Gemini — единственная честная энергомодель: 144,7 Вт·ч / 217 Вт); рельеф из GLO-30 в локальной UTM; ветер — константа; исполнение плана по фазам; факт по времени, длине, энергии; покрытие по полосам; отчёт «план vs факт» одной таблицей
Чего не умеет 3D-фронт, камера, отказы, метео-события, несколько бортов
Критерий выхода сценарий s01 (прямоугольник 1×1 км, GSD 3 см) прогоняется одной командой; два запуска с одним seed дают бит-в-бит одинаковый отчёт; площадь полигона в UTM совпадает с эталоном в пределах 0,1 %; ветровой треугольник воспроизводится с ошибкой ≤0,5 % от аналитической формулы

M1 — демонстрируемый на защите

Что умеет всё из M0 + три борта парка (201 / 801 / Gemini) со своими ТТХ из fleet.yaml; 3D-сцена в реальных координатах с объёмными зонами; камера даёт кадр и футпринт; покрытие по кадрам; клиренс над рельефом и препятствиями; катапультный старт против ветра и парашютная посадка со сносом; два failsafe — потеря связи и порог напряжения возврата; батч из 10 сценариев s01–s10
Критерий выхода docker compose up без интернета и без ключей тайл-сервисов поднимает стенд; демо-пролёт 5 минут воспроизводится по (world_snapshot_id, plan, seed); числа на экране совпадают с отчётом валидатора до последнего знака; батч s01–s10 проходит за ≤30 мин; каждое выходное число несёт fidelity_class

M2 — продуктовый

Что умеет всё из M1 + 100 сценариев sc-* за ночь; метео-события (порывы, снег, гроза, недоступность сети) с настраиваемыми порогами; радиовидимость по рельефу вместо круга R; деконфликтация бортов; эллипс сноса парашюта с коэффициентом; очередь на площадке и фактический оборот; API возврата чисел в планировщик; отчёт чувствительности к допущениям; авто-генерация «перечня известных ограничений»
Критерий выхода 100 сценариев проходят за ≤8 ч (≤288 с/сценарий, целевая медиана ≤60 с); каждое допущение A-xx имеет измеренную чувствительность выходных метрик; ни одно число не выходит без fidelity_class; мутационный тест ловит ≥95 % заведомо плохих планов (см. §6.2)

6. Метрики успеха

6.1 Метрики продукта

Метрика Определение Целевое значение Откуда число
batch_throughput сколько сценариев sc-* проходит за ночной прогон 100 за ≤8 ч, медиана ≤60 с/сценарий ДОПУЩЕНИЕ A-BIZ-04: «ночь» = 8 ч; размер батча — из sc-* (борта 1–20, площадь 1–200 км²)
world_build_time время первичной сборки мира на 100 км² (DEM → UTM COG + препятствия + тайлы) ≤10 мин первично, ≤30 с повторно из кеша ДОПУЩЕНИЕ A-BIZ-05, целевое значение, не из источника
world_build_time (масштаб) рост времени сборки от площади не хуже линейного на диапазоне 1→200 км² требование масштабируемости из критериев жюри
plan_fact_divergence доля планов, где факт расходится с расчётом планировщика более чем на 10 % по makespan_s измеряется всегда; ≤2 из 10 на наборе s01–s10; каждая дельта >10 % разложена по вкладам 10 % — ДОПУЩЕНИЕ A-BIZ-06; разложение — жёсткое требование, см. SIM-BIZ-06
coverage_delta |coverage по кадрам − coverage по полосам| измеряется всегда; при >5 % планировщик обязан получить сигнал 5 % — ДОПУЩЕНИЕ A-BIZ-07
violations_found число нарушений, найденных симулятором в планах, признанных валидатором корректными >0 — симулятор окупился; =0 на всех 100 сценариях — повод проверить сам симулятор мутационным тестом смысл продукта
demo_reproducibility повтор демо-прогона даёт идентичный отчёт бит-в-бит, 100 % запусков правило проекта «детерминированный headless»
cold_start_offline docker compose up на машине без сети поднимается, 0 сетевых обращений требование SIM-GEO-16

6.2 Метрики достоверности — чем мы докажем, что симулятор не врёт

Это ключевой раздел. Симулятор, которому нельзя верить, хуже отсутствия симулятора: он даёт ложную уверенность и его числа попадают в презентацию. Поэтому достоверность здесь — не свойство, а иерархия уровней с явными критериями перехода, и каждое выходное число знает свой уровень.

Пирамида доказательств V1…V6

Снизу вверх — от дешёвых и обязательных к дорогим и недоступным сегодня.

Уровень Что доказывает Как проверяется Порог приёмки Доступен нам?
V1. Аналитические тождества модель воспроизводит формулы, для которых есть закрытое решение прогон вырожденных сценариев и сверка с формулой ошибка ≤0,5 % по каждому тождеству да, обязателен
V2. Инварианты и консервация модель не течёт и не дрейфует замкнутые траектории, энергобаланс, детерминизм см. таблицу ниже да, обязателен
V3. Независимая перепроверка геометрия факта считается двумя независимыми путями сверка с валидатором планировщика на общих величинах расхождение по длине маршрута ≤1 % да, обязателен
V4. Сверка с первоисточником поведение борта соответствует РЭ, а не нашим представлениям трассировка «пункт РЭ → тест» 100 % документированных порогов покрыты тестом да, обязателен
V5. Негативный контроль (мутации) симулятор ловит плохие планы, а не просто не падает подсовываем заведомо дефектные планы детекция ≥95 % мутантов, ложных срабатываний 0 на эталонном корректном плане да, обязателен
V6. Сверка с реальностью модель совпадает с фактическим полётом сравнение с телеметрией реального вылета ошибка по времени вылета ≤5 %, по длине трека ≤2 % нет — телеметрии не существует (Q-BIZ-02)

Честная граница. Сегодня симулятор может быть доказан только до V5 включительно. Это надо писать в отчётах и говорить на защите прямым текстом: «модель сверена с руководством по эксплуатации и с независимой геометрией, но не сверена с реальным полётом — реальных логов у нас нет». Любая формулировка сильнее этой — вранье.

V1. Тождества, которые обязаны совпасть

Тождество Формула / значение Источник Допуск
Ветровой треугольник V_g = √(V_a² − W⊥²) + W∥ РЭ 201 / 30-domain/05 ≤0,5 %
Невозможность удержания ЛЗП при |W⊥| ≥ V_a линия не держится там же факт воспроизводится
Выигрыш галса поперёк ветра 1/√(1−(W/V_a)²)18 % при W/V_a = 0,53 сценарий s06 ≤0,5 %
Радиус разворота R = V²/(g·tanφ) = 137 м при 27,8 м/с и φ=30° 01-context-digest ≤0,5 %
GSD GSD = H × k; PF1B k = 1,9583e-41,96 см при H=100 м payloads.yaml ≤0,1 %
Футпринт PF1B 117 × 78 м при H=100 м payloads.yaml ≤0,1 %
Энергия Gemini 144,7 Вт·ч / 217 Вт = 40 мин fleet.yaml (derived) ≤1 мин
Площадь в проекции площадь полигона в UTM vs эталон правило проекта ≤0,1 %
Round-trip СК WGS84 → UTM → WGS84 SIM-GEO-06 ≤0,05 м

V2. Инварианты

Инвариант Проверка Порог
Детерминизм два прогона одного (world_snapshot_id, plan, seed) бит-в-бит идентичный отчёт
Отсутствие дрейфа интегратора 100 кругов по замкнутому маршруту при нулевом ветре отклонение конечной точки ≤1 м
Энергобаланс Σ(мощность × Δt) по фазам vs израсходованная энергия невязка ≤0,1 %
Неотрицательность путевой V_g > 0 на каждом отрезке нарушений 0
Строгость времени T_факт > L / V_g строго (время не может быть меньше геометрического минимума) нарушений 0
Независимость от шага интегрирования прогон с Δt и Δt/2 расхождение makespan ≤0,5 %
Независимость от локальной зоны UTM полигон на стыке зон 35N/36N расхождение метрик ≤0,1 %

V3. Независимая перепроверка

Величина Симулятор считает Валидатор считает Допустимое расхождение
Длина маршрута интегрированием траектории по геометрии плана ≤1 %
Площадь покрытия объединением футпринтов кадров буферами полос расхождение не является ошибкой — это и есть искомая дельта P-01, но обязано быть объяснено
Нарушения NFZ по фактической траектории по геометрии плана симулятор ⊇ валидатор: всё, что нашёл валидатор, обязан найти и симулятор

Правило независимости наследуется от валидатора: симулятор не импортирует код планировщика (coverage/, routing/). Общая реализация воспроизвела бы общую ошибку и промолчала.

V4. Трассировка к первоисточнику

Каждый документированный порог РЭ становится тестом. Минимальный перечень:

Пункт источника Значение Тест
РЭ 201, ограничения ветер ≤12 м/с при W=13 борт не допускается к вылету
801 / Gemini ветер ≤10 м/с при W=11 доступен 1 борт из 3 (s09)
РЭ 201 клиренс ≥100 м над рельефом и объектами траектория ниже → violation
РЭ 201 «БВС не способно выполнять полёты ниже высоты точки старта» нарушение фиксируется
РЭ 201 потолок 4000 м AMSL превышение → violation
Gemini потолок 500 м AGL превышение → violation
РЭ 201, предстартовая подготовка напряжение возврата 16,5–20,75 В значение вне диапазона отвергается; при достижении порога борт сам начинает посадку
РЭ 201 радиус автоотцепа 0–300 м, 0 = выкл вне диапазона отвергается
РЭ 201 минимальная высота возврата 100–4000 м вне диапазона отвергается
РЭ 201 высота выброса парашюта 70 м траектория снижения начинается с 70 м
РЭ 201 запуск строго против ветра, сектор ±30°, объекты ≤0,1·L старт по ветру → NO-GO
РЭ 201 посадка против ветра, маршрут посадки из 3 точек отсутствие 3 точек → ошибка плана
РЭ 201 «Возврат» = к точке взлёта на текущей высоте, затем круговой облёт поведение воспроизводится
РЭ 201 перелёт между элементами — по большей из двух высот; если не набрать по прямой — спираль воспроизводится
РЭ 201 точка ожидания по умолчанию 300 с воспроизводится
РЭ 201 НАРУШЕНИЕ ЗОНЫ → камера off + полёт к месту посадки воспроизводится именно так, не по ArduPilot
РЭ 201 АВАРИЯ, ОШИБКА КОМПАСА → немедленная посадка воспроизводится
РЭ 201 ОШИБКА КРЛ → полёт продолжается воспроизводится
РЭ 201 зоны истекли / не верифицированы → вылет блокируется воспроизводится
РЭ 201 ТО после 80 полётов или 1 года; АКБ ≥80 циклов учитывается как счётчик ресурса
РЭ 201, цитата «на холоде литий-полимерные АКБ могут терять до 30 % ёмкости» дерейтинг применяется, факт помечается
Gemini ЗУ работает 0…+40 °C при полёте до −15 °C при T<0 оборот через заряд невозможен
ФП-138 H > 150 м → WARNING (не violation) предупреждение выдаётся; Gemini+PF1B при GSD 3 см даёт H=153 м

V5. Негативный контроль — кто сторожит сторожа

Самая недооценённая проверка. Симулятор, который «всё прогнал и ничего не нашёл», неотличим от симулятора, который ничего не проверяет. Поэтому — мутационное тестирование планов.

Мутант (что ломаем в заведомо корректном плане) Что симулятор обязан вернуть
сдвинуть галс на 200 м внутрь NFZ violations.nfz > 0 с координатой и временем
опустить высоту до 60 м AGL над холмом нарушение клиренса 100 м
заменить altitude_frame: AGL на AMSL без пересчёта нарушение клиренса на полигоне с перепадом ≥50 м
развернуть курс старта на 180° (по ветру) NO-GO по правилу «строго против ветра»
поставить turnaround_time_min: 1 для Gemini при втором вылете нарушение по заряду (105 мин)
назначить ИК-съёмку на Gemini нарушение совместимости нагрузки (ИК только 801)
убрать из плана маршрут посадки из 3 точек ошибка плана
растянуть вылет 201 до 200 мин нарушение endurance (180 мин)
поставить ветер 13 м/с недопуск всех бортов
сдвинуть точку посадки под ЛЭП пересечение эллипса сноса с препятствием
задать интервал затвора вдвое реже нужного падение покрытия по кадрам
поставить шаг галсов 200 м при футпринте 117 м дыры в покрытии

Порог: детекция ≥95 % мутантов, ложных срабатываний на эталонном корректном плане — 0. Набор мутантов ведётся в репозитории и растёт: каждый реальный дефект, который симулятор пропустил, превращается в нового мутанта.

Маркировка достоверности каждого числа

Ни одно число не выходит из симулятора «голым». Каждая выходная величина несёт:

Поле Смысл Значения
value число
unit единица s, m, m/s, km2, Wh, cm/px
fidelity_class на чём держится measured (прямо из источника), derived (посчитано из источников), assumed (допущение)
depends_on список допущений A-xx, влияющих на величину массив ID
validation_level максимальный достигнутый уровень пирамиды V1V6

Правило: величина с fidelity_class: assumed не может быть основанием для вердикта GO — она выводится, но помечается и попадает в перечень ограничений. Вердикты GO/NO-GO опираются только на measured/derived.

Чувствительность к допущениям

Для каждого допущения A-xx измеряется отклик метрик на вариацию ±20 %. Приоритетные кандидаты:

Допущение Что от него зависит Почему опасно
крейсерская скорость 27,8 м/с (201) всё время полёта она assumed, середина диапазона 17,8–36,1; плюс расхождение R4: 180 мин × 210 км дают 19,4 м/с, а не 27,8
время автономного полёта после потери связи вся модель U-06 числа в РЭ нет вообще
коэффициент сноса парашюта вся модель посадки 201 отсутствует полностью
минимальный интервал затвора покрытие по кадрам не указан ни для одной нагрузки
Вт·ч АКБ 801 энергомодель 801 не указаны; ресурс только по времени
время оборота на площадке makespan многовылетных планов turnaround_time_min: 10 недостижимо для катапультного 201 (D-10)
профиль ветра по высоте снос, покрытие, энергия схема планировщика даёт скаляр, реальность — профиль

Если чувствительность метрики к assumed-допущению превышает 10 %, метрика в отчёте помечается как недостоверная и требует ответа заказчика прежде, чем использоваться для вердикта.


7. Связка с основным сервисом

7.1 Что симулятор берёт у планировщика

Артефакт Формат Зачем
plan JSON по 40-formats/03: missions[].sorties[].phases[], altitude_frame, turn_mode, camera_trigger_interval_s исполняемое задание
plan KML (OGC 2.2, обязательный altitudeMode) / GeoJSON (RFC 7946, 7 знаков) тот же план в формате сдачи; симулятор обязан уметь оба, чтобы ловить потерю высот при clampToGround
scenario JSON: launch_sites, landing_sites, fleet, tasks, airspace, weather, objective, solver мир и ограничения
warnings[], unassigned[] из плана симулятор проверяет, что предупреждения планировщика соответствуют факту

7.2 Что симулятор отдаёт обратно

Артефакт Содержание Кому полезно
fact_report фактические makespan, время вылетов, длины, энергия, покрытие по кадрам, число кадров планировщику — для калибровки модели; заказчику — для приёмки
delta_report разложение «факт − план» по вкладам: ветер, развороты, набор/снижение, оборот, автовозврат планировщику — что именно он недооценивает
violations[] нарушения, невидимые из плана: клиренс, препятствия, снос парашюта, зоны без связи, сближения планировщику — как новые ограничения решателя
calibration_hints поправочные коэффициенты (например, фактическая доля времени на разворотах) планировщику — числа вместо допущений
world_snapshot_id идентификатор мира со списком источников, релизов, bbox, CRS, датумов и sha256 обоим — воспроизводимость

7.3 Почему это два сервиса, а не один

Причина Разбор
Независимость проверки главное. Метод проекта — «валидатор пишется раньше продукта», и валидатор не импортирует код решателя, иначе воспроизведёт его ошибку и промолчит. Симулятор — то же самое, только на уровне физики: общий код = общая ошибка = ложное «всё сходится»
Разные требования ТЗ ТЗ требует планировщик в браузере на ПК. Симулятор с 3D-сценой, DEM-тайлами и батч-прогонами в эту рамку не помещается и не должен её ломать
Разные ресурсы планировщик — CPU-решатель с time_limit_s; симулятор — GPU/3D на фронте и длинные батчи на бэке. Общий процесс означал бы, что тяжёлый прогон блокирует интерактивное планирование
Разные циклы жизни план пересчитывается десятки раз в минуту; мир собирается один раз и живёт неделями под своим world_snapshot_id
Риск сдачи симулятор — усиление, а не основа. Если он не успевает к 29.09, планировщик сдаётся целиком и самостоятельно. Монолит такой возможности не даёт
Разные лицензии данных ODbL-производные (OSM + ML footprints) требуют share-alike и выносятся отдельным артефактом; держать их внутри планировщика — навязывать ему лицензионные обязательства

Направление зависимости — строго одностороннее: симулятор знает о планировщике (читает его выход), планировщик о симуляторе — нет. Планировщик работает и без симулятора; обратное неверно.


8. Требования SIM-BIZ

ID Требование Приоритет Критерий приёмки Источник
SIM-BIZ-01 Симулятор принимает выход планировщика без ручной правки: plan (JSON по 40-formats/03), KML и GeoJSON MUST все три формата одного плана дают идентичный fact_report (расхождение метрик ≤0,1 %); KML с clampToGround даёт явную ошибку KML_ALTITUDE_LOST, а не молчаливое обнуление высот 40-formats/01, 40-formats/03; ТЗ п. «выгрузка KML/GeoJSON»
SIM-BIZ-02 Headless-режим: полный прогон одной командой, без GUI и без сети MUST docker compose run sim batch --scenarios sc/ --seed N отрабатывает на машине с отключённой сетью; сетевых обращений — 0 правило проекта «детерминированный headless»; SIM-GEO-16
SIM-BIZ-03 Детерминизм: результат однозначно определяется тройкой (world_snapshot_id, plan, seed) MUST два прогона дают бит-в-бит идентичный отчёт; изменение любого элемента тройки отражается в run_manifest правило проекта; R-PS-28
SIM-BIZ-04 Каждая выходная величина несёт value, unit, fidelity_class, depends_on, validation_level MUST схема выхода отвергает величину без любого из пяти полей; доля величин без fidelity_class = 0 % §6.2; правило «всё непроверенное — в известные ограничения»
SIM-BIZ-05 Симулятор не импортирует код планировщика; validator/ не импортирует движок MUST CI: 0 рёбер validator/engine/, mission/, uav/, camera/, env/; 0 рёбер simulate/coverage/, routing/ 70-plan/01-validator-first.md
SIM-BIZ-10 Аналитические тождества V1 (V1-01…V1-09) MUST round-trip ENU/WGS84 ≤ 0,01 м; площадь ENU/геодезическая, не UTM; остальное — §6.2 §6.2; 30-domain/05; payloads.yaml
SIM-BIZ-06 Отчёт «план vs факт» с разложением дельты по вкладам (ветер, развороты, набор/снижение, оборот, автовозврат) MUST сумма вкладов равна полной дельте с невязкой ≤5 %; каждая дельта makespan >10 % имеет разложение §6.1, §3/U-02
SIM-BIZ-07 Батч-производительность: 100 сценариев sc-* за ночной прогон MUST 100 сценариев ≤8 ч (≤288 с/сценарий), медиана ≤60 с §6.1; ДОПУЩЕНИЕ A-BIZ-04
SIM-BIZ-08 Сборка мира: 100 км² первично и повторно из кеша SHOULD первично ≤10 мин, повторно ≤30 с; рост времени от площади не хуже линейного на 1→200 км² §6.1; ДОПУЩЕНИЕ A-BIZ-05
SIM-BIZ-09 Стенд поднимается docker compose up без интернета и без ключей тайл-сервисов MUST на изолированной машине фронт открывается, рельеф отображается, прогон проходит SIM-GEO-16; лицензионные блокеры 10-world/01
SIM-BIZ-11 Инварианты V2 держатся MUST детерминизм бит-в-бит; дрейф ≤1 м на 100 кругов; невязка энергобаланса ≤0,1 %; V_g>0 и T>L/V_g строго; Δt→Δt/2 меняет makespan ≤0,5 % §6.2/V2
SIM-BIZ-12 Независимая сверка V3 с валидатором планировщика MUST длина маршрута расходится ≤1 %; множество нарушений симулятора ⊇ множества нарушений валидатора на всех s01–s10 §6.2/V3
SIM-BIZ-13 Трассировка «пункт первоисточника → тест»: все документированные пороги покрыты MUST таблица §6.2/V4 реализована на 100 %; каждый тест ссылается на конкретный пункт РЭ/спецлиста РЭ 201, спецлисты 801/Gemini, ФП-138
SIM-BIZ-14 Негативный контроль: мутационное тестирование планов MUST набор из ≥12 мутантов §6.2/V5; детекция ≥95 %; ложных срабатываний на эталонном корректном плане — 0 §6.2/V5
SIM-BIZ-15 Отчёт чувствительности к допущениям SHOULD для каждого A-xx измерен отклик метрик на ±20 %; метрика с откликом >10 % на assumed-допущение помечается как недостоверная §6.2; ТЗ п. 5 «перечень известных ограничений»
SIM-BIZ-16 Модель потери связи: радиовидимость по рельефу и поведение по логике РЭ MUST участки вне связи отмечены; по таймеру «время автономного полёта» запускается возврат на точку старта на текущей высоте с круговым облётом; отчёт содержит остаток задания и остаток энергии РЭ 201; U-06; ДОПУЩЕНИЕ A-BIZ-02 (значения таймера нет)
SIM-BIZ-17 Модель отказа борта в момент t по кодам РЭ SHOULD АВАРИЯ и ОШИБКА КОМПАСА → немедленная посадка; ОШИБКА КРЛ → полёт продолжается; НАРУШЕНИЕ ЗОНЫ → камера off + полёт к месту посадки; отчёт даёт недоснятую площадь в км² и сдвиг makespan в с РЭ 201, раздел «Действия при отказах»; сценарий s10
SIM-BIZ-18 Покрытие считается по кадрам, а не по полосам MUST футпринт каждого кадра строится по payloads.yaml (k, матрица, f) с учётом крена и сноса; coverage_delta к полосному покрытию выводится всегда P-01; U-11
SIM-BIZ-19 Клиренс над рельефом и препятствиями проверяется дискретизацией ≤10 м MUST нарушение «<100 м AGL» для 201 → violation с координатой; «ниже точки старта» → violation; профиль клиренса выводится по всему маршруту РЭ 201; SIM-GEO-11, SIM-GEO-23
SIM-BIZ-20 Катапультный старт: курс строго против ветра, сектор ±30°, объекты ≤0,1·L MUST при старте по ветру — NO-GO; при объекте выше 0,1·L в секторе — NO-GO с координатой объекта; допустимый диапазон курсов выводится для каждой площадки РЭ 201; расхождение D-8
SIM-BIZ-21 Парашютная посадка: снижение с 70 м, эллипс сноса, проверка пересечений SHOULD эллипс строится и пересекается с NFZ, дорогами, водой, застройкой; коэффициент сноса — параметр с fidelity_class: assumed РЭ 201; A-09, Q-12
SIM-BIZ-22 Учёт оборота на площадке по фактическим ТТХ АКБ MUST для Gemini интервал между вылетами одного борта ≥105 мин при заряде и ≥0 при смене АКБ; при T<0 °C заряд невозможен (ЗУ 0…+40 °C) fleet.yaml; расхождения D-7, D-10
SIM-BIZ-23 Сравнение двух планов бок о бок на одном мире и seed MUST оба критерия ТЗ (makespan, total_flight_time) прогоняются одной командой; выход — одна таблица с дельтами ТЗ (два критерия); U-02
SIM-BIZ-24 Учебный режим: редактируемые параметры мастера предстартовой подготовки 201 SHOULD доступны 4 параметра с валидацией диапазонов: автоотцеп 0–300 м, время автономного полёта, напряжение возврата 16,5–20,75 В, мин. высота возврата 100–4000 м; значение вне диапазона отвергается; последствия каждого измеряются в м и мин РЭ 201, «Предстартовая подготовка»; U-03
SIM-BIZ-25 Демо-режим: воспроизводимый 5-минутный пролёт в реальных географических координатах MUST числа на экране совпадают с fact_report до последнего знака; повтор даёт идентичную картинку и числа; работает без сети критерий жюри «качество демонстрации»; U-05
SIM-BIZ-26 ТТХ берутся только из fleet.yaml/payloads.yaml, ничего не хардкодится MUST CI-проверка: в коде симулятора 0 числовых литералов из перечня ТТХ; подмена значения в YAML меняет результат прогона правило проекта; 10-hardware/ как источник правды
SIM-BIZ-27 Симулятор не считает метрики качества плана — только факт и дельту MUST в выходе отсутствуют coverage_fraction/makespan_s в роли «оценки плана»; присутствуют *_fact и delta_* 70-plan/01; §4
SIM-BIZ-28 Симулятор не управляет реальными бортами и не подключается к НСУ MUST в коде и конфигурации отсутствуют интерфейсы к железу и MAVLink-выход в реальный канал; документировано в «известных ограничениях» §4; безопасность полётов
SIM-BIZ-29 Класс модели объявлен явно: кинематика + энергия по средней мощности, не сертифицируемая аэродинамика MUST в README и в отчёте есть раздел «класс модели и её границы» с перечнем неучтённых эффектов §4; отсутствие поляры расхода в источниках
SIM-BIZ-30 Три борта парка (201 / 801 / Gemini) поддержаны со своими ТТХ и совместимостью нагрузок MUST ИК-задача на не-801 → нарушение совместимости; LiDAR/геофизика → явная ошибка «нагрузки нет ни у одного борта»; мультиспектр допускается только на 201 и Gemini fleet.yaml, payloads.yaml; расхождение «ТЗ требует LiDAR, парк его не имеет»
SIM-BIZ-31 Метео-события (порывы, снег, гроза, недоступность сети) моделируются как пороги допуска и деградация ТТХ SHOULD ветер 201 ≤12 м/с и 801/Gemini ≤10 м/с — жёсткие; при −20 °C применяется дерейтинг ёмкости до 30 %; все прочие пороги помечены fidelity_class: assumed РЭ 201 (ветер, температура, цитата про 30 % ёмкости); A-BIZ-03 (прочих порогов в РЭ нет)
SIM-BIZ-32 run_manifest на каждый прогон: sha256 входов, world_snapshot_id, seed, версии источников данных и их релизы MUST по манифесту прогон воспроизводится на другой машине бит-в-бит; манифест содержит источник, релиз, дату, bbox, CRS, вертикальный датум SIM-GEO-17, SIM-GEO-18; §6.1
SIM-BIZ-33 «Перечень известных ограничений» генерируется из данных, а не пишется руками SHOULD раздел документации собирается автоматически из всех величин с fidelity_class: assumed и отчёта чувствительности; ручных строк — 0 ТЗ п. 5 (обязательный раздел); U-12
SIM-BIZ-34 Калибровка по реальной телеметрии, если заказчик её передаст COULD при наличии лога: ошибка по времени вылета ≤5 %, по длине трека ≤2 %; уровень достоверности величин поднимается до V6 §6.2/V6; Q-BIZ-02

Итого: 34 требования (MUST — 22, SHOULD — 11, COULD — 1).


9. Допущения

Каждое допущение — что принято и чем грозит, если неверно. Допущения по ТТХ и геоданным ведутся в 01-context-digest.md (A-01…A-18) и 10-world/01 и здесь не дублируются; ниже — продуктовые.

  1. A-BIZ-01. Время подготовки борта к вылету неизвестно. В РЭ 201 описана процедура (сборка ПУ, укладка парашюта, натяжение жгутов непосредственно перед стартом, мастер предстартовой подготовки), но времени нет ни для одного этапа; для 801 и Gemini нет и процедуры. Грозит: вся аргументация «симулятор экономит часы подготовки» остаётся качественной; модель оборота на площадке опирается только на время заряда, а не на полный цикл. Число просим у заказчика (Q-BIZ-03).
  2. A-BIZ-02. Время автономного полёта после потери радиосвязи принимается настраиваемым параметром без значения по умолчанию. В РЭ параметр описан, диапазон и дефолт не указаны. Грозит: сценарий U-06 даёт не абсолютное число, а семейство кривых «потеря задания vs таймер». Пока значение не получено, вердикты по U-06 не могут быть GO/NO-GO — только сравнительными.
  3. A-BIZ-03. Пороги по осадкам, снегу, грозе, обледенению и туману отсутствуют. Слова «дождь», «снег», «обледенение», «туман», «молния», «гроза» в РЭ 201 не встречаются ни разу; IP-класса бортов нет (IP67 — только у кейса Gemini). Грозит: заказчик просил эмулировать молнию и снег, а пороги допуска под них придётся назначить. Все они помечаются assumed и не используются в вердиктах GO.
  4. A-BIZ-04. «Ночной прогон» = 8 часов. Число организационное, из источников не следует. Грозит: если реальное окно короче, целевые 100 сценариев придётся сокращать или распараллеливать.
  5. A-BIZ-05. Целевое время сборки мира (≤10 мин на 100 км², ≤30 с из кеша) — назначенное. Ни одного бенчмарка на наших данных пока нет. Грозит: цифра может оказаться недостижимой на quantized-mesh; тогда 3D-режим ограничивается меньшей площадью, а батч работает по COG без тайлов.
  6. A-BIZ-06. Порог «существенного» расхождения план↔факт — 10 % по makespan. Грозит: при слишком мягком пороге систематическая ошибка планировщика проходит незамеченной, при слишком жёстком — шум объявляется дефектом. Порог подлежит пересмотру после первых 100 прогонов по фактическому разбросу.
  7. A-BIZ-07. Порог сигнала по расхождению покрытия «кадры vs полосы» — 5 %. Назначен. Грозит: тем же, что и A-BIZ-06.
  8. A-BIZ-08. Ценность симулятора для заказчика измеряется временем и необратимостью, а не деньгами. Стоимости лётного часа, борта и вылета в источниках нет. Грозит: на защите нельзя назвать экономический эффект в рублях; аргументация строится на необратимости вылета, погодном окне и ресурсе (ТО через 80 полётов, АКБ ≥80 циклов).
  9. A-BIZ-09. Обучение операторов — законная роль продукта, но не замена обучению у производителя. РЭ прямо требует: «к запуску допускаются лица, прошедшие обучение на базе ООО „Геоскан“». Грозит: если позиционировать симулятор как тренажёр-заменитель, это прямое противоречие РЭ. Позиционируем как дополнение: отработка настройки параметров задания, не допуск к эксплуатации.
  10. A-BIZ-10. Достоверность симулятора сегодня доказуема максимум до уровня V5 (негативный контроль). Реальной телеметрии нет. Грозит: любое утверждение «симулятор соответствует реальности» неправомерно. Формулировка, которую используем всюду: «сверено с руководством по эксплуатации и с независимой геометрией; с реальным полётом не сверялось».
  11. A-BIZ-11. Жюри оценивает симулятор через критерии основной задачи, а не отдельно. Симулятор усиливает «обоснованность подхода» и «эффективность маршрутов и масштабируемость». Грозит: если симулятор уводит внимание от планировщика, он вредит; отсюда правило §7.3 — планировщик сдаётся самостоятельно даже без симулятора.

10. Открытые вопросы к заказчику

Формат: вопрос → что меняется у нас в продукте от ответа. Вопросы по планированию (Q-01…Q-33) ведутся в docs/task5/00-brief/05-questions-to-customer.md и здесь не повторяются — ниже только те, что специфичны для симулятора как продукта.

Q-BIZ-01. Сколько стоит один вылет и сколько стоит потеря борта — в часах бригады и в деньгах? Есть ли внутренняя стоимость лётного часа по типам бортов? → Превращает ценность симулятора из качественной («экономит время») в измеримую. Заодно даёт третий критерий оптимизации планировщику — стоимость, помимо двух критериев ТЗ.

Q-BIZ-02. Есть ли логи реальных вылетов (трек, скорость, напряжение, срабатывания камеры), которые можно использовать для калибровки? Хотя бы один вылет каждого типа борта. → Единственный способ поднять достоверность с V5 до V6. Без ответа симулятор навсегда остаётся «сверенным с руководством, но не с реальностью» — и мы обязаны так и писать в отчётах.

Q-BIZ-03. Сколько времени занимает полный цикл подготовки к вылету — 201 (сборка ПУ, укладка парашюта, натяжение жгутов), 801, Gemini? И сколько занимает оборот между вылетами одного борта? → Закрывает A-BIZ-01 и расхождение D-10 (turnaround_time_min: 10). Напрямую меняет makespan многовылетных планов — то есть один из двух критериев ТЗ.

Q-BIZ-04. Кто у вас реально принимает решение «лететь / не лететь» по готовому плану и по какому чек-листу? Есть ли формализованная процедура приёмки полётного задания? → Определяет форму выхода U-01: свободный отчёт или структурированный чек-лист с теми же пунктами, что у вас. Второе встраивается в процесс, первое — нет.

Q-BIZ-05. Как часто работы срываются или переносятся из-за погоды, и какой фактор чаще всего срывает — ветер, температура, осадки, видимость? → Задаёт приоритет метео-моделирования. Если срывает не ветер (а он у нас единственный документированный порог), то приоритет — тот фактор, а его порог придётся получать от вас (A-BIZ-03).

Q-BIZ-06. Обучаете ли вы операторов и на чём? Был бы полезен тренажёр настройки полётного задания, или обучение целиком закрыто вашими курсами? → Решает судьбу роли «обучаемый оператор» и сценария U-03. Если закрыто — U-03 уходит в COULD и из демо исключается.

Q-BIZ-07. Что вы считаете достаточным доказательством того, что симулятор не врёт? Какой уровень сверки вас убедил бы — совпадение с руководством, совпадение с Geoscan Planner, совпадение с реальным полётом? → Прямо задаёт целевой уровень пирамиды §6.2 и объём работ по достоверности. Самый важный вопрос этого списка: он определяет, что вообще считать готовым продуктом.

Q-BIZ-08. Какие числа из симулятора вы готовы принимать как основание для решения, а какие — только как справку? → Определяет, какие величины обязаны иметь fidelity_class: measured|derived (и, значит, требуют источника от вас), а какие могут остаться assumed.

Q-BIZ-09. Есть ли у вас эталонная пара «план → как он отлетался»? Хотя бы один случай, где план разошёлся с фактом, и известно, почему. → Единственный способ проверить, что наше разложение дельты (SIM-BIZ-06) раскладывает по тем же причинам, которые вы наблюдаете на практике.

Q-BIZ-10. Нужен ли вам симулятор как отдельный продукт, или только как внутренний инструмент проверки планировщика? → Развилка §7.3. Если как продукт — нужны API, роли и UI приёмки (U-01, U-04); если как инструмент — достаточно headless и отчёта, и весь фронт уходит в демо-режим.