218 lines
19 KiB
Markdown
218 lines
19 KiB
Markdown
# AI-полигон: отдельный профиль Gaussian / Isaac
|
||
|
||
Этот документ фиксирует первый интеграционный этап. Текущее состояние UI,
|
||
две скачанные локации, исправление Stop и измерения полного цикла описаны в
|
||
[операторской ревизии](2026-09-21-ai-polygon-operator-revision.md).
|
||
Действующий release — `0af432ce95816402`; результаты старых release ниже
|
||
сохранены как история экспериментов.
|
||
|
||
Решение владельца: лабораторная симуляция с виртуальным дифференциальным ровером,
|
||
камерой и существующими AI-моделями на Worker 006. Работа с VESC/ASVD, физическими
|
||
аппаратами и перенос inference на борт в этот этап не входит. World Labs исключён.
|
||
Основной источник визуальных миров — скачиваемые Gaussian-сканы с явной лицензией.
|
||
|
||
## Продуктовая поверхность
|
||
|
||
Оператор открывает «Симуляции», выбирает профиль, импортирует локацию, проверяет её
|
||
ориентацию, масштаб, высоту грунта и старт, затем наблюдает камеру и решения AI.
|
||
Выбран существующий workspace с верхним Select профиля: это прямое решение
|
||
владельца. Альтернатива — новый workspace/пункт главной навигации — разделила бы
|
||
одну операторскую работу между разными поверхностями. Нового продуктового корня
|
||
или элемента Design Guideline нет: используются существующие Select, Window,
|
||
GlassSurface, Button, IconButton, StatusBadge, LoadingRegion и ToastStack.
|
||
|
||
LCC Gaussian Mirror сохраняет прежний renderer, каталог и pipeline. AI-полигон
|
||
имеет отдельные world/run namespaces. Старый lab-archive скрыт из обычной
|
||
навигации; сохранённые быстрые действия переводятся на AI Inference. Исторические
|
||
данные, пакеты моделей и контейнеры не удаляются.
|
||
|
||
Состояния: пустая библиотека → загрузка/возобновление → проверка локации →
|
||
подготовленная локация; simulator disconnected/connected; starting, running,
|
||
paused, stopping, completed/stopped/failed. Камера и просмотр локации имеют
|
||
expand/restore; перед первым кадром показывается ожидание, а не фиктивное видео.
|
||
|
||
## Существующий Worker
|
||
|
||
Изучены Ops MISSIONCOR-75 «AI Inference · Принципы работы и архитектура»,
|
||
MISSIONCOR-73, прежние материалы Worker и фактический Docker Desktop Windows.
|
||
Активная modular generation — observatory-ai-modules/20260904-v14. Это выполнение
|
||
записанных задач; уже работающий основной Triton не содержит DDRNet/RF-DETR.
|
||
Логический image digest модуля отличается от component image установленного
|
||
пакета: профиль использует фактически установленные component images.
|
||
|
||
До изменений: 21 контейнер, 8 запущены, 108 образов, 9 volumes; RTX 4090 24 GiB,
|
||
driver 610.47. Сохранены ID, mounts, ports и package bindings без переменных
|
||
окружения/токенов в private outputs этой задачи. Прежние контейнеры, Compose,
|
||
модельные конфигурации, immutable releases, source-CAS и rollback не изменяются.
|
||
Исправлен устаревший DNS только в существующем SSH-профиле mission-gpu, с резервной
|
||
копией и сохранением проверки host key.
|
||
|
||
## Новый runtime
|
||
|
||
На Windows используется официальный native Isaac Sim 6.1.0. Его Docker/Web Viewer
|
||
вариант не выбран: официальный Compose Web Viewer не поддерживает Windows/WSL.
|
||
Архив 10 370 228 313 bytes проверен vendor MD5 и локальным SHA-256
|
||
`dc7cfc966cd0aea105e97bb1b9b30a8e91306a3254f231bca9caa5c97ae74ae9`.
|
||
Подготовка находится только в `D:\NDC_MISSIONCORE\runtime\simulation`;
|
||
драйвер, PATH и существующие services не менялись.
|
||
|
||
Два новых временных Docker service запускаются один раз на episode:
|
||
|
||
- DDRNet: исходная PyTorch-модель GOOSE из установленного component image,
|
||
checkpoint, preprocessing runner и таблица классов сверяются по SHA-256.
|
||
- RF-DETR: сохранённый стандартный FP16 TensorRT engine с входом 704×704.
|
||
Это отдельный pinhole-профиль, без KB4 valid-FOV mask. Действующий native-KB4
|
||
пакет AI Inference не подменяется.
|
||
|
||
Найденный DDRNet TensorRT export не допущен: его сохранённая проверка показывает
|
||
4 009 отличающихся пикселей на 128 кадрах и пометку experimental-unqualified.
|
||
Полная декларация нового профиля — `simulation/ai-polygon/models.worker-006.json`.
|
||
Новый Compose использует ndc- namespace, labels и loopback 18091/18092; mounts
|
||
weights/configs read-only. Новые images/volumes не создаются и старые не чистятся.
|
||
|
||
Core выдаёт GPU reservation через существующую SQLite очередь AI Inference до
|
||
запуска native simulator и моделей. Потеря heartbeat прекращает episode и не
|
||
считает GPU автоматически свободным. Release принимается после выхода Isaac
|
||
и удаления собственных временных model containers по точным ID. Не завершённый
|
||
active.json требует reconciliation; старые команды автоматически не повторяются.
|
||
|
||
## Камера, движение и доказательства
|
||
|
||
Core ↔ Worker использует отдельный SSH reverse forward на Windows loopback 18081,
|
||
Bearer credential нового профиля; существующий Observatory 18080 не меняется.
|
||
Credential хранится mode 0600 на Mac и с owner-only ACL на Worker.
|
||
|
||
Сцена импортируется штатным NVIDIA `omni.kit.converter.gsplat` 0.1.16 из Isaac.
|
||
Робот — готовый Jetbot и DifferentialController. Это проверка дифференциального
|
||
управления в симуляции, а не цифровой двойник конкретного ровера пользователя.
|
||
Восемь штатных USD-зависимостей Jetbot (31 942 456 bytes) подготовлены отдельным
|
||
`Prepare-RobotAssets.ps1`: повторный запуск больше не ждёт сетевой загрузки робота.
|
||
Перед регистрацией Worker сверяет все файлы с локальным SHA-256 manifest.
|
||
Трава — только визуальные splats. Начальный физический ground — скрытая плоскость;
|
||
рельеф, сцепление и сгибание растительности этим не моделируются.
|
||
|
||
Каждый шаг: новая камера RGB → DDRNet + RF-DETR → RoadPolicy → журнал решения →
|
||
speed/yaw-rate → 6 физических тактов по 1/60 с → отдельное подтверждение pose/time.
|
||
Физика не должна идти во время inference или рендера. Проверяется счётчик шагов.
|
||
Позы физического движка используются для размещения камеры и диагностики,
|
||
не передаются в RoadPolicy. Сохраняются кадры с SHA-256, decisions.jsonl,
|
||
motion.jsonl, snapshot локации/профиля и терминальный результат.
|
||
|
||
RoadPolicy — начальный camera-only follower: видимый связный участок дороги,
|
||
остановка при препятствии/отсутствии дороги и три свободных кадра до возобновления.
|
||
Это не Nav2, не метрическая оценка дистанции и не доказанный объезд препятствий.
|
||
Динамические люди/животные, тормозной путь, обход и повторы/coverage должны
|
||
проверяться отдельными сценариями. Первый природный проезд описан ниже.
|
||
|
||
## Фактически выполненная проверка
|
||
|
||
Первый bounded native probe: настоящий RTX RGB 800×600 → обе реальные модели.
|
||
Inference 156 / 78 / 79 ms на трёх одинаковых технических кадрах; решение no-road,
|
||
нулевая команда. Пауза не увеличила счётчик физики; явный step увеличил его на 6.
|
||
Это не FPS benchmark и не navigation acceptance. После probe подтверждено
|
||
отсутствие его kit process и model containers, сохранены прежние 21 container ID.
|
||
|
||
Локально: 69 backend tests по lifecycle/импорту/shared queue; дополнительно 51
|
||
проверка существующих AI Inference/LCC; 888 frontend tests до последнего малого
|
||
изменения ярлыка, затем 7 focused environment tests; production build и Ruff.
|
||
Браузером проверены оба профиля, прежние три LCC-локации, сохранение профиля,
|
||
форма импорта, сворачивание окна, отсутствие legacy в обычной навигации.
|
||
|
||
Первый полный PLY episode выявил отсутствие нового Python API
|
||
UsdVol.ParticleField3DGaussianSplat в bundled USD Isaac; заменён на штатный
|
||
совместимый GSplat Converter. Следующая попытка зависла на внешнем stock USD
|
||
робота и была завершена ограниченным таймаутом; поэтому зависимости сохранены
|
||
локально. Полный episode `airun-de5fdd342cff4d8994b0016ded5348f0` завершился с
|
||
3 samples / 3 applied steps / 18 физических тактов. Просмотр кадра выявил поворот
|
||
камеры; исправлен world-to-camera look-at transform, не изменяя модели.
|
||
|
||
Повтор `airun-6dc2d164cde04c70bec3348486bd63cc` использует исправленную камеру:
|
||
на изображении подтверждён горизонтальный грунт. Пауза удержала 4 applied steps,
|
||
один шаг увеличил счётчик строго до 5, Stop завершил прогон. Это 0.5 секунды
|
||
симуляции, все решения no-road, скорость 0.0. Проверенный release
|
||
`84302295451de631`, archive SHA-256
|
||
`440f6241af119ac9f63df94a68c99e2d7b724f0796dd999f12d23586a0b117b3`.
|
||
Совместная команда launcher+tunnel также проверена: отдельный episode остановлен
|
||
во время подготовки с нулём кадров и корректным освобождением ресурсов.
|
||
|
||
После GPU-проверок сохранён private `worker-preservation-report.json`: тот же
|
||
набор всех 21 container ID, без изменений image/status/restart/mounts/ports;
|
||
те же 108 image identities/tags и 9 volumes. Временных simulation processes нет.
|
||
Сравнение mounts нормализовано по Destination, поскольку Docker меняет порядок
|
||
их перечисления. Существующие конфигурационные файлы моделей не изменены.
|
||
|
||
Запуск и аварийное восстановление описаны в
|
||
`docs/runbooks/AI_POLYGON_WORKER_006.md`. Автоматический постоянный service не
|
||
устанавливался: coordinator запускается одной foreground-командой, idle не
|
||
занимает GPU. Глобальная эксклюзивность относительно отдельного Gaussian pipeline
|
||
не доказана; его задачи нельзя выполнять параллельно с этим профилем.
|
||
|
||
## Природный мир Forest Scan
|
||
|
||
После входа владельца в SuperSplat получен Forest Scan, Joshua Trapani (draftmode),
|
||
[источник](https://superspl.at/scene/259c0051), CC BY 4.0. Автор и лицензия
|
||
проверены по Download UI и `license.txt` экспортируемого архива. Browser export
|
||
оборвался; разрешённые публичные SOG assets той же сцены сохранены versioned
|
||
`fetch_sog.py` с SHA-256 manifest. Credentials/cookies не извлекались.
|
||
|
||
Исходные SOG/WebP assets занимают 31 446 214 bytes. Официальный
|
||
`@playcanvas/splat-transform` 3.4.0 подготовлен `Prepare-SplatTools.ps1` в отдельном
|
||
simulation/tools с pinned package-lock; глобальные npm/system settings не менялись.
|
||
Конвертация дала стандартный PLY: 2 142 439 splats, 505 617 082 bytes,
|
||
SHA-256 `432ee329fc75d86b50d0b577542adca579b0749b4939044fc3980f27b2618ece`.
|
||
PLY импортирован через штатный возобновляемый API и повторно проверен Worker.
|
||
В библиотеке доступен `aiworld-689fce22369f41158ffd1030bad35c0a`.
|
||
На момент первого этапа Bamboo Trail ещё не был загружен. В последующей
|
||
операторской ревизии он скачан, импортирован и проверен реальным episode.
|
||
|
||
Авторская камера и фактическое преобразование viewer сопоставлены с Isaac Z-up:
|
||
rotation [-90, 0, 180], spawn [0.522299, -0.517838], heading 137.690214°,
|
||
ground Z -0.065, camera height 0.8, max speed 0.15. Масштаб 1 unit = 1 m принят
|
||
условно: метрическая калибровка по измеренному объекту ещё не выполнена.
|
||
|
||
Короткий episode `airun-5ff180262220435faa39a814260dae7b` дал 5 samples / 5 applied
|
||
и ненулевую команду по видимой лесной тропе. Следующий
|
||
`airun-321bb7cb732b4ab59aee77d60ee978af` завершён: 100 samples / 100 applied /
|
||
600 physics ticks, 10 секунд времени симуляции. Первые 2 решения uncertain с
|
||
нулевой скоростью, затем 98 road с движением. Длина траектории по физическим
|
||
позам — 1.421741 м в принятом масштабе сцены. Inference: min 94, median 156,
|
||
p95 172, max 296 ms. Проверены последовательность receipts, шаг времени и SHA-256
|
||
всех 100 кадров. Это latency моделей в lockstep, не FPS реального времени.
|
||
|
||
На исходной картинке есть деревянная ступень поперёк тропы. Текущая модель не
|
||
считала её препятствием; у неё нет collision, поскольку физический ground пока
|
||
плоский. Поездка подтверждает связку реальная Gaussian-камера → существующие
|
||
модели → решения → движение, но не безопасное преодоление ступеней, объезд,
|
||
тормозной путь или реакцию на людей/животных. Такие сценарии остаются открытыми.
|
||
|
||
Private evidence: `outputs/ai-polygon-2026-09-21/forest-drive-report.json`,
|
||
`forest-drive-run.json`, `forest-drive-decisions.jsonl`, `forest-drive-motion.jsonl`,
|
||
`forest-drive-final.jpg`, source manifest и `worker-preservation-final.json`.
|
||
После природного episode прежние 21 контейнер / 108 образов / 9 volumes сохранены;
|
||
свои native processes, временные model containers и active/lock markers очищены.
|
||
Техническая синтетическая сцена и её 5 прогонов архивированы отдельно от обычной
|
||
библиотеки; Forest и оба природных результата оставлены оператору.
|
||
|
||
Камера результата и preview используют общий fullscreen hook; Escape возвращает
|
||
обычный размер и не вызывает действие оболочки. Направление preview исправлено:
|
||
CameraControls получает focus point по стартовому heading, а не центр координат.
|
||
Полноэкранный лесной preview и Escape проверены после final production build;
|
||
затем 3D закрыт для освобождения ресурсов Mac. В кадре показаны скорость и
|
||
поворот, отсутствие кадров после раннего Stop обозначено явно.
|
||
|
||
Для операторского handoff оставлен foreground coordinator через `start_worker.py`
|
||
без `--once`: он поддерживает соединение, но не запускает Isaac/модели до команды
|
||
в UI. OS service/автозапуск не установлен. Core 8000 оставлен работающим.
|
||
|
||
|
||
## Первичные источники
|
||
|
||
- https://docs.isaacsim.omniverse.nvidia.com/6.1.0/installation/download.html
|
||
- https://docs.isaacsim.omniverse.nvidia.com/6.1.0/installation/install_workstation.html
|
||
- https://docs.omniverse.nvidia.com/materials-and-rendering/latest/particle-fields.html
|
||
- https://superspl.at/scene/259c0051
|
||
- https://superspl.at/scene/dd49e9a8
|
||
|
||
Контрольная точка не выдаёт допуск к физическому аппарату. Все команды имеют
|
||
virtual-only authority; VESC/ASVD adapters отсутствуют.
|