191 lines
16 KiB
Markdown
191 lines
16 KiB
Markdown
# 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).
|