Files
NODEDC_MISSION_CORE/docs/audits/2026-09-21-ai-polygon-realtime-placement.md
T

191 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI-полигон: исполнение на Worker и потоковый операторский просмотр
## Решение и текущий статус
Требование владельца от 21.09.2026 реализовано: в профиле AI-полигона мир,
физика, камера, AI, управление виртуальным ровером и журналы исполняются на
Worker 006. Mac принимает готовое NVIDIA WebRTC-видео и небольшой snapshot.
Локальный `AiWorldPreview` с PlayCanvas/PLY удалён. LCC Gaussian Mirror остаётся
отдельным профилем; изменения не переносятся на его собственный renderer.
Размещение принято на основе MISSIONCOR-76 / Mission Core Node: один локальный
владелец исполнения, отдельные control/media/telemetry и локальное хранение.
Повторно использованы существующие Worker tunnel18080 и модельные образы.
Go/Linux Node service не скопирован на Windows; готового AI-autonomy service в
Node нет. Добавлен узкий host coordinator симулятора.
Новый runtime — лабораторная основа для проверки AI. Его realtime-размещение
и цикл подтверждены; прохождение длинной грунтовой дороги, объезд, точный
тормозной путь и реакции на динамических людей/животных пока не приняты.
## Схема
```text
Worker 006, Windows / RTX4090
Isaac6.1: Gaussian + метрический ровер + physics60Hz + sensor800×600
RGB -> очередь последнего кадра -> локальные DDRNet / RF-DETR
-> RoadPolicy -> виртуальные приводы
viewport -> NVIDIA encoder -> Tailscale WebRTC -> HTML video на Mac
timestamps / motion / decisions / camera archive -> локальный диск
persistent coordinator <-> существующий tunnel18080 <-> Core8000
Mac: операторские команды, подтверждённые состояния, telemetry и video decoder
```
В render/physics loop нет CoreClient, HTTP к Mac, per-frame ACK или ожидания
моделей. Coordinator обменивается управляющими файлами/snapshots с native child;
зависший управляющий HTTP не является частью физического tick. AI имеет отдельный
поток и одно ожидающее изображение: новый кадр заменяет старый, очередь не растёт.
Наблюдение/команда старше500мс дают нулевую команду, физическое время идёт дальше.
Pause инвалидирует уже начатый inference; Resume требует новые ясные наблюдения.
Штатный Isaac6.1 throttling при Play включал manual loop, из-за чего первая
проверка дала0.47×. Исправлены все три управляющие настройки — fixed timeline,
manual main loop и enable_manualmode расширения throttling. PhysX продолжает
исполнять дискретные шаги1/60с, накапливая их по wall-clock. Измерение основано
на фактическом числе physics steps; 30FPS видео отдельно измеряет браузер.
## Runtime и установка
- Native Isaac6.1.0 и существующий `observatory-ai-modules/20260904-v14` сохранены.
- NVIDIA `@nvidia/ov-web-rtc`6.7.0 взят из официального registry, версия закреплена.
- Windows Scheduled Task `ndc-ai-polygon-worker`: при входе текущего пользователя,
не зависит от foreground SSH или viewer. Не заявляется работа до Windows login.
- Windows Job Object закрывает native потомков при аварии coordinator; точные
container IDs сохраняются для восстановления и очистки. Core не освобождает
GPU reservation только по пропавшему heartbeat: требуется реальный finish.
- Управление через существующий приватный туннель18080; отдельного18081 больше нет.
- Direct stream1280×720 по TCP49100/UDP47998. Allow ограничен процессом Kit,
приватным адресом Worker и текущим Tailscale-адресом Mac. Существующие Windows
Block rules сохраняются для всех остальных портов/адресов; rollback записан.
- Операторский video input inert: клавиатура/мышь не управляют произвольным KitUI.
Camera переключается явной командой Worker. NVIDIA допускает один viewer.
Финальный release: `a25fa4f008a18cbf`, 551 файлов; SHA-256 архива:
`177aeb640398ef2aeac46f07ddbe731078ea36f85c811111d57a82ea3b5ddd55`.
Проверены архив и все файловые hashes до установки. Модельный профиль:
`e505cc842575d96a4993765cfba19fea8a95e6c98ff613996d87e3887be79ecb`.
Scene provenance включает runtime, очередь, IPC, inference adapter, policy и
контракты; robot и models имеют отдельные hashes. Private archives/manifests:
`outputs/ai-polygon-2026-09-21/realtime/`.
Промежуточный Forest performance release `ed210b04d0fd858b` имел те же clocks,
renderer и robot; финальный release дополнительно сбрасывает накопленную ясность
дороги при Resume, корректно различает первоначальную загрузку AI и последующий
отказ inference, расширяет source identity и ограниченно повторяет локальный IPC при кратком Windows sharing conflict. Установщик сам проверяет плоский файловый manifest и сохраняет verified_files; пустой manifest не допускается.
## Геометрия и данные
Ровер заменён с Jetbot на four-wheel differential articulation. Полный footprint
1×1м; radius0.15м, track0.9м, масса24кг — явно временные параметры. Визуальная
геометрия и collision находятся в одном профиле. Камера расположена перед мачтой:
первая проверка обнаружила самоокклюзию, после исправления модели видят дорогу.
Физические VESC/ASVD и управление настоящими аппаратами отсутствуют.
Forest:2 142 439 splats,505 617 082bytes,CCBY4.0,draftmode,
SHA432ee329fc75d86b50d0b577542adca579b0749b4939044fc3980f27b2618ece.
Bamboo:5 818 957splats,325 861 955bytes,CCBY4.0,luckysplat,
SHAd7f2aad3240cc1a7369eb0d8b0d4c96a9cadbe07ee352c25d297b1037a812824.
PLY/USD кэшируются на Worker; при открытии браузер их не загружает.
Grass visual-only, физическая земля — скрытая плоскость. Единицы Gaussian пока
не подтверждены измеренной опорой. Это не калиброванный физический двойник.
Inference получает локальный несжатый RGB до streaming encoder. Evidence
сохраняется на Worker: motion/decisions timestamps, commands, boxes, JPEG90
копии использованных кадров и ихSHA. JPEG архив не называется lossless raw.
Полного автоматического archive sync на Mac в этом этапе нет.
## Операторский интерфейс
Сохранена существующая поверхность «Симуляции» с переключателем профиля.
Библиотека содержит только доступные Forest/Bamboo, без магазинных ссылок,
нижних превью и автоматически показанных старых кадров. «Открыть» отдельно
от «Запустить AI». Круглая стрелка назад закрывает просмотр, сохраняя episode.
Повторное открытие присоединяет тот же run. Pause и Stop имеют подтверждение
Worker; Stop становится терминальным после освобождения native/model ресурсов.
Fullscreen сохраняет кнопки и имя сцены. Камеры follow/overview/AI исполняются
на Worker. Поля FPS/AIHz/RTF/возраст кадра больше не смешиваются.
## Измеренная приёмка
Forest run `airun-b2275571be9941e7b2e45ad104af1ec9`,35 snapshots в steady-state:
| Метрика | Минимум | Медиана | Максимум |
|---|---:|---:|---:|
| Физическое/реальное время |0.969×|1.000×|1.033×|
| Render loop |23.62FPS|28.00FPS|28.00FPS|
| Камера→очередь AI |9.69FPS|11.29FPS|12.00FPS|
| Завершённые решения |8.00Hz|10.83Hz|12.00Hz|
| Inference |62мс|93мс|109мс|
| Возраст кадра |140мс|172мс|219мс|
Браузер показывал27–30декодируемыхFPS. Внутри замера ровер изменил позицию;
наблюдались решения road/uncertain/no-road/obstacle. Обнаружение obstacle здесь
не доказательство правильного распознавания реального препятствия: требуется
отдельная размеченная приёмка.
Pause удержал6сек: sim70.9с,4254physics steps,686решений и одна pose без изменений.
При закрытом viewer за6сек physics time вырос98.8→104.583с, решения993→1059;
повторное открытие восстановило видео того же run. Stop завершился за3.23с
включая освобождение native process и двух model containers.
Backend26/26: ownership/ACK, идемпотентность, disconnect/restart reconciliation,
сохранение reservation, отсутствие Mac frames, bounded queue, stale-source stop,
отсечение результата послеPause и свежие наблюдения послеResume. Frontend895/895,
architecture4/4,typecheck,production build прошли последовательно. Ruff прошёл.
Bamboo run `airun-43bc42b3def04d5091330c5ea3c28062` на release7536f11d4ae78371:
25 steady-state snapshots, RTF0.969–1.022× (медиана1.000), render28FPS,
camera12FPS, AI11Hz, inference79мс, frame age172мс (медианы). До выборки
были11road и13uncertain решений, затем no-road и остановка. Это не прохождение
всей тропы. Во время сцены GPU50%, VRAM7606MiB из24564MiB.
После финального frontend build браузером проверены follow/overview/AI,
fullscreen с именем и управлением, Escape и Stop изfullscreen. DOM во время
реального Bamboo-видео содержал0canvas; сцена в браузере не рисуется.
Переключение вида меняет Workercamera, видео восстанавливается после возврата.
Последующее исправление Windows IPC не меняет scene/clock/model algorithms.
Финальный smoke `airun-99d524b99f8444819ba299841805353b` на release
a25fa4f008a18cbf естественно завершился: 30сек,297решений,медианаRTF1.0.
Отдельная проверка `airun-9669437638ec499fa63b165ad75e63b6` подтвердила29FPS
видеопотока после конечной установки firewall: прежние Kit rules явноBlock,
остальные адреса на streaming ports блокируются, Allow только оператору.
Оба прогона завершены. Installer receipt: verified_files=551.
Финальная Docker-сверка: все21исходных container ID, полныеConfig/HostConfig,
109image identities/tags и9volumes сохранены без различий. Private evidence:
`preservation-proof.json`, `worker-before.json`, `worker-after.json`. После QA
нет active.json, nativeKit и временных AI modelcontainers; сервисWorker idle,
Core8000 доступен, обе локации available. Ops MISSIONCOR-83 обновлён фактическими
результатами; общая автономия остаётся InProgress.
## Ограничения и следующий этап
Функциональная симуляция с наблюдением принята отдельно от качества autonomy.
RoadPolicy — camera-only baseline, не маршрутный планировщик и не оценка
метрической дистанции. Нужны калиброванный масштаб, грунтовый collision/terrain,
профиль динамики аппарата, сценарии obstacle/braking/avoidance/dynamic actors.
Одновременно квалифицирован один виртуальный ровер и один комплект моделей;
две параллельные симуляции требуют отдельного GPU-бюджета.
Разрыв viewer проверен на работающем Worker. Core restart/lease recovery проверены
контрактными тестами; общий действующий tunnel не отключался ради эксперимента.
Полный end-to-end hard network outage и host crash drill не заявлены пройденными.
При потере Core лабораторный run продолжает последнюю команду до локального
лимита времени с локальным AI watchdog; потеря связи не означает подтверждённыйStop.
Existing AI Inference reservation соблюдён. Отдельные Gaussian jobs пока не
используют общий GPU broker и не запускаются параллельно. Задержки на4090 не
доказывают быстродействие будущего onboard hardware. Docker profiles/images/
weights сохранены; неподтверждённый ускоренный DDRNetTRT не подменяет reference.
## Официальные источники
- [Native streaming](https://docs.isaacsim.omniverse.nvidia.com/6.1.0/installation/manual_livestream_clients.html)
- [Web Streaming Library](https://docs.omniverse.nvidia.com/ov-web-sdk/latest/web-streaming-library/overview.html)
- [Isaac clocks](https://docs.isaacsim.omniverse.nvidia.com/latest/sensors/isaacsim_sensors_multitick_rendering.html)
- [Throttling/manual loop flags](https://docs.isaacsim.omniverse.nvidia.com/6.0.0/overview/troubleshooting.html)
- [Timing examples](https://docs.isaacsim.omniverse.nvidia.com/latest/replicator_tutorials/tutorial_replicator_isaac_snippets.html)
Рабочая инструкция: [Worker006 runbook](../runbooks/AI_POLYGON_WORKER_006.md).