docs(simulation): record polygon experiments and bounded route acceptance
This commit is contained in:
@@ -0,0 +1,217 @@
|
||||
# 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 отсутствуют.
|
||||
@@ -0,0 +1,142 @@
|
||||
# AI-полигон: операторская ревизия
|
||||
|
||||
## Причина и результат
|
||||
|
||||
Владелец обнаружил реальные дефекты первой поверхности: разделение на «Мои» и
|
||||
«Готовые» локации, внешние синие ссылки вместо подготовленных файлов, автоматически
|
||||
открытый кадр старого прогона, отсутствие видимого ровера и неясное состояние Stop.
|
||||
Техническая связка камеры и моделей ещё не давала удобной наблюдаемой симуляции.
|
||||
|
||||
Теперь библиотека содержит только «Доступные локации»: скачанные Forest Scan и
|
||||
Bamboo Trail с действием «Открыть». Нижний preview, внешний каталог, список
|
||||
исторических кадров и raw links удалены из этой поверхности. Авторство и лицензия
|
||||
сохранены у каждой сцены. LCC Gaussian Mirror и AI Inference остаются отдельными.
|
||||
|
||||
Открытая локация имеет явный заголовок, включая fullscreen. Один viewer переключает
|
||||
«За ровером», «Обзор» и «Камера AI». Первый показывает упрощённый ровер с размерами
|
||||
колёс/колеи Jetbot по фактическим XY/yaw из applied receipt; второй даёт свободный
|
||||
обзор; третий показывает именно RGB из Isaac, переданный моделям. Это не экспорт
|
||||
точной модели Jetbot и не цифровой двойник физического аппарата владельца.
|
||||
Отрисовка интерполирует только уже полученные позы, не вычисляет свои команды или
|
||||
физику и не подменяет кадры inference. В режиме камеры 3D rendering приостановлен.
|
||||
|
||||
Кнопки паузы/шага/Stop и состояние находятся внутри fullscreen viewer. Подготовка
|
||||
показывает стадии мира, моделей и камеры. Stop сначала показывает остановку,
|
||||
после cleanup — «Остановлено · inference выключен». Пауза показывает нулевое
|
||||
движение, без устаревшего показателя скорости. Конечная поза текущего прогона
|
||||
сохраняется; старые прогоны сами в библиотеке не открываются. При отсутствии
|
||||
первого кадра завершённый прогон не продолжает показывать ожидание камеры.
|
||||
|
||||
Использованы существующие Button, IconButton, SegmentedControl, StatusBadge,
|
||||
LoadingRegion, GlassSurface из NODEDC Design Guideline и отдельный domain renderer.
|
||||
Новых продуктовых корней или локальных замен дизайн-компонентов нет.
|
||||
|
||||
## Bamboo Trail
|
||||
|
||||
[Источник](https://superspl.at/scene/dd49e9a8), автор luckysplat, CC BY 4.0.
|
||||
Лицензия и разрешённая загрузка проверены в авторизованном SuperSplat Download UI.
|
||||
Его Source action не дал файл; сохранены публичные assets именно опубликованного
|
||||
viewer и SHA manifest, без извлечения cookies или credentials.
|
||||
|
||||
`fetch_lod.py` выбирает полный опубликованный LOD0 из manifest и архивирует 11 SOG
|
||||
chunks через `fetch_sog.py`. Добавлена обработка gzip JSON. Официальный закреплённый
|
||||
SplatTransform 3.4.0 через `Prepare-Scene.ps1` собрал обычный PLY без перезаписи
|
||||
предыдущего результата; LOD0 содержит 5 818 957 splats, SH degree 0.
|
||||
|
||||
- PLY: 325 861 955 bytes.
|
||||
- SHA-256: `d7f2aad3240cc1a7369eb0d8b0d4c96a9cadbe07ee352c25d297b1037a812824`.
|
||||
- World: `aiworld-7a58431a5551469cbbf0e8a4efef2a8b`.
|
||||
- Rotation [-90, 0, 180], ground Z -2.418, spawn [-0.696364224, -0.696364224],
|
||||
heading 22.55°, camera height 0.8, max speed 0.15, условный scale 1.
|
||||
|
||||
Файл импортирован штатными блоками по 4 MiB, хеш проверен при завершении и на
|
||||
Worker. Native Isaac успешно создал camera RGB; конвертированный USD закеширован.
|
||||
Первый запуск был долгим из-за конвертации 5.8 млн splats. При исходном heading
|
||||
47.55° камера смотрела на край тропы и камни, первые 15 решений были no-road.
|
||||
Heading повёрнут на 25° вдоль видимой тропы, после чего выполнен полный тест ниже.
|
||||
|
||||
## Причины задержки и сбоя Stop
|
||||
|
||||
В пользовательском `airun-2b1d079ab6b04df3a39019d664c75329` фактически выполнено
|
||||
54 samples / 54 applied. Native process завершился одновременно с taskkill;
|
||||
его exit code 255 был ошибочно принят coordinator как сбой. Isaac и временные
|
||||
модельные контейнеры уже отсутствовали, но UI получил failed вместо stopped.
|
||||
|
||||
`worker.py` теперь ожидает действительное завершение дочернего процесса и допускает
|
||||
гонку с уже вышедшим процессом. После cleanup он заново читает control/state, чтобы
|
||||
конкурентный Stop не превратился в completed или failed. `model_stack.py` проверяет
|
||||
отмену при подготовке моделей. Core принимает промежуточные стадии подготовки,
|
||||
не объявляя running до первого sample. Reservation освобождается только после
|
||||
завершения native process и удаления собственных container IDs.
|
||||
|
||||
UI ранее опрашивал каталог раз в 1.5 с и пропускал промежуточные кадры; теперь
|
||||
активный прогон опрашивается с интервалом 200 мс, с одним последовательным запросом.
|
||||
Постоянные HTTP connections сокращают повторные TCP handshakes; соединение
|
||||
пересоздаётся после простоя >2 с, чтобы не переиспользовать истёкший server keepalive.
|
||||
Неопределённые mutation requests автоматически не повторяются. RTX subframes: 1.
|
||||
|
||||
Applied receipts получили yaw и измерения полного цикла/render/transport.
|
||||
Physics остаётся lockstep: ровно 100 мс симуляции за решение, 6 ticks по 1/60 с;
|
||||
во время ожидания моделей мир не движется. Плавность browser viewer не означает
|
||||
такую же частоту камеры или решений. Это ещё не realtime 1×.
|
||||
|
||||
## Проверки на Worker
|
||||
|
||||
| Проверка | Фактический результат |
|
||||
| --- | --- |
|
||||
| Forest через UI, `airun-5950929b54754077a3f21ae64ea1e8a5` | 87 samples / 87 applied; stopped |
|
||||
| Пауза Forest | Счётчик удержан на 86 через 1.2 с; один шаг дал строго 87 |
|
||||
| Полный цикл Forest | Медиана 313 мс; render 62 мс; transport до receipt 47 мс; inference 156 мс |
|
||||
| Bamboo, `airun-a10fe72eddca48548ab8ec23e4f59d38` | 120 samples / 120 applied; completed; 26 road, 17 uncertain, 77 no-road |
|
||||
| Полный цикл Bamboo | Медиана 297 мс; inference 156 мс |
|
||||
| Stop во время движения, `airun-9015f6ab095848e78db24b6dcda5045d` | 6 samples / 6 applied; stopped через 2.17 с после запроса |
|
||||
| Stop при загрузке моделей, `airun-1c2c258e1211459dbbfe471a9fb1b958` | 0 samples; stopped; подготовка отменена |
|
||||
| Stop из fullscreen, `airun-e9be1e3e45e84f71862a9c0b7eddcda0` | 0 samples; «Останавливаем…» → «Остановлено · inference выключен» |
|
||||
|
||||
Проверены SHA-256 всех 87 Forest-кадров. Bamboo дал движение, затем остановку
|
||||
при недостатке уверенно распознанной дороги; это не прохождение всей тропы.
|
||||
Полный цикл соответствует примерно 3.2–3.4 решениям/с и 0.32–0.34× simulation time.
|
||||
Ранее указанные 156 мс — только latency моделей, не полный FPS системы.
|
||||
|
||||
Локально: 71 backend test (AI-полигон и shared recorded queue) прошёл, после
|
||||
корректировки starting/running повторены 19 AI-полигон tests. Добавлены регрессии
|
||||
для startup progress и гонки taskkill. Frontend full pass: 891/892; единственная
|
||||
ошибка была старым ожиданием соседнего Rerun camera-journal теста. Оно исправлено
|
||||
в его задаче; затем все 11 focused architecture/simulation/camera-journal tests
|
||||
прошли. Финальные production build/typecheck, Ruff и diff whitespace check прошли.
|
||||
|
||||
В фактическом браузере проверены обе сцены, движущийся pose marker, камера AI,
|
||||
пауза, step, Stop, свободный обзор, fullscreen с доступным Stop и Escape. После
|
||||
финального build проверены название в fullscreen и библиотека без нижнего preview.
|
||||
Тяжёлый 3D закрыт, оставлена библиотека из двух локаций на Core 8000.
|
||||
|
||||
## Сохранение окружения и handoff
|
||||
|
||||
Release `0af432ce95816402`, SHA-256 архива
|
||||
`47230a1d1a2cffe3dd448e5e0fb5aef354bba4ee4ad6a0d7008791593cd1e0b9`.
|
||||
После проверки сохранены все прежние 21 container ID и их image/status/restart,
|
||||
mounts, memory/GPU bindings и настроенные PortBindings; все прежние 108 image
|
||||
identities/tags и 9 volumes. Runtime NetworkSettings.Ports не подменяет сравнение
|
||||
настроенных PortBindings. Отдельная соседняя задача добавила CPU-only контейнер
|
||||
`ndc-rerun-navigation-build` и свой образ; они не относятся к AI-полигону.
|
||||
|
||||
В 18:48 UTC собственных kit.exe и model containers нет, active_run null.
|
||||
Оставлен один idle coordinator PID 19724 с worker.lock, через foreground launcher
|
||||
session 21791 и private reverse forward 18081. Автозапуска OS нет. Core 8000 жив;
|
||||
8765 не слушает. Существующие AI Inference/KB4 конфигурации не менялись.
|
||||
Запуск/остановка описаны в [runbook](../runbooks/AI_POLYGON_WORKER_006.md).
|
||||
|
||||
Private evidence: `outputs/ai-polygon-2026-09-21/revision-2/`: forest-performance,
|
||||
bamboo-performance, pause-verification, stop-qualification, worker-inventory,
|
||||
worker-preservation, operator-handoff JSON; исходные receipts и RGB рядом.
|
||||
Архивы Bamboo и manifests находятся в родительском private outputs directory.
|
||||
Промежуточные неуспешные попытки и пользовательский failed run сохранены.
|
||||
|
||||
## Оставшаяся граница
|
||||
|
||||
Это наблюдаемая лабораторная симуляция с реальным inference, но ещё не принятая
|
||||
автономная навигация. Масштаб некалиброван, физическая земля плоская. Деревянная
|
||||
ступень Forest не имеет collision и раньше не была распознана как препятствие.
|
||||
Трава только визуальная. Объезд, тормозной путь, устойчивое движение по длинной
|
||||
тропе, динамические люди/животные и глобальный GPU arbitration требуют отдельных
|
||||
контролируемых сценариев. Физические VESC/ASVD-аппараты в этом контуре отсутствуют.
|
||||
@@ -0,0 +1,190 @@
|
||||
# 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).
|
||||
@@ -0,0 +1,186 @@
|
||||
# AI-полигон: композиция восприятия и движение по рельефу
|
||||
|
||||
Дата: 2026-09-22. Статус: работающий лабораторный контур; прохождение целой
|
||||
тропы и перенос на физический аппарат не приняты.
|
||||
|
||||
Исправление оценки Forest, 2026-09-22: повторный разбор сохранённых quaternion
|
||||
показал переворот (конечный крен около 178°, отклонение от вертикали около 168°).
|
||||
Прежняя формулировка «остановка перед препятствием» была неверной. Этот заезд
|
||||
не подтверждает проходимость; смещение включает движение опрокинутого аппарата.
|
||||
Исходные журналы сохранены без изменений.
|
||||
|
||||
## Архитектура
|
||||
|
||||
Worker 006 выполняет native Isaac Sim 6.1, физику, Gaussian-рендер, синтетическую
|
||||
камеру/лидар, три изолированных AI-модуля и архивирование. Mac получает WebRTC
|
||||
видео и ограниченную телеметрию. Виртуальные команды не соединены с VESC/ASVD.
|
||||
LCC остаётся отдельным профилем. Физика работает по реальному времени около
|
||||
60 шагов/с; камера и inference имеют собственную частоту около 5 Гц. Очередь
|
||||
наблюдений — один последний кадр, возраст команды/наблюдения ограничен 500 мс.
|
||||
Пауза останавливает физическое время и новые решения; продолжение очищает
|
||||
каузальное состояние навигации. Stop освобождает native-процесс и собственные
|
||||
контейнеры, не затрагивая остальные стеки Worker.
|
||||
|
||||
Основной проверенный release: `be76ce84ecc2b5a4`, 573 файла. Полная identity:
|
||||
`be76ce84ecc2b5a42047d12b3109ab334747310e5fdbb1be96387bb39cc02628`.
|
||||
SHA-256 tgz: `feea17166735cdd676e46476e99336233c55ef22c931761cb5613e23dd9a0873`.
|
||||
|
||||
## Готовые компоненты и общая композиция
|
||||
|
||||
Используется общий `ModuleRegistry / ModuleSpec / CompositionSpec` с отдельными
|
||||
портами pinhole-симуляции и режимом `worker-local-simulation`. Выбор фиксирует
|
||||
идентичности образов, checkpoint, параметров и адаптеров; произвольный код
|
||||
из формы не принимается. Два независимых модуля восприятия выполняются
|
||||
параллельно, навигация запускается после получения зависимостей.
|
||||
|
||||
- NVIDIA SegFormer B2 ADE150: семантические кандидаты поверхности; исходные
|
||||
class IDs сохраняются. Официальный checkpoint revision
|
||||
`de01bae28967510f9ddd496c60a969357195400c`, SHA-256
|
||||
`187ca07bea003a5717c63d04ea90b07f33cd033c0ebf44b4b89fce5070d6c8f3`.
|
||||
Лицензия research/evaluation соответствует лабораторному применению;
|
||||
коммерческое применение этим отчётом не разрешается.
|
||||
- Существующий RF-DETR Large: обнаружение людей/животных. Изображение, checkpoint
|
||||
и остальные профили не заменялись.
|
||||
- CMU `terrain_analysis / localPlanner / pathFollower`, ROS2 Humble, upstream
|
||||
`158e67b31b644ed1e8b06eb1d7f70e183cc62591`: готовый анализ рельефа, поиск локального
|
||||
пути и команды скорости/поворота. C++ upstream не переписан. Интеграционный
|
||||
монитор дополнительно проверяет квадратный корпус на дуге текущей команды.
|
||||
|
||||
DDRNet GOOSE64 сохранён как альтернативный модуль. На кадрах Bamboo он относил
|
||||
значительную часть грунта к forest/snow. Проверка численного декодирования
|
||||
не подтвердила объяснение через sigmoid: результат практически совпал с logits.
|
||||
Добавлен другой готовый сегментатор; классы forest/snow не объявлены дорогой.
|
||||
|
||||
AI получает только камеру, калибровку, наблюдённый лидар и позу. Геометрия мира,
|
||||
карта препятствий и готовая траектория в планировщик не передаются. Семантическая
|
||||
локальная цель выбирается из наблюдённых точек; её достижимость проверяет CMU.
|
||||
|
||||
## Рельеф и аппарат
|
||||
|
||||
Collision mesh подготовлен SplatTransform 3.4.0 из тех же Gaussian-данных.
|
||||
Проверяются SHA-256 источника/меша, преобразование осей, масштаб и охват тайла.
|
||||
Параметры: voxel 0.06 м, opacity 0.25, floor-fill 0.3 м. Старт проверяет локальную
|
||||
опорную плоскость под корпусом и остаточную неровность. Наклон плоскости больше
|
||||
не принимается за высокий отдельный камень. Положение Bamboo сдвинуто на 0.447 м
|
||||
к устойчивой опоре; масштаб и направление сцены не менялись.
|
||||
|
||||
Корпус 1 × 1 м, четыре колеса с независимым управлением левым/правым бортом,
|
||||
радиус 0.25 м, база 0.5 м, колея 0.9 м, масса 24 кг. Материалы шин и грунта
|
||||
задают явное трение. Это лабораторные допущения, а не калибровка настоящих
|
||||
аппаратов. Подвеска и деформация гусениц не моделируются. Команды применяются
|
||||
через live Articulation tensor API; положение также считывается из физики.
|
||||
|
||||
Текущие пределы навигации: препятствие выше 0.18 м, локальная цель с уклоном
|
||||
до 25°, остановка при наклоне 30°. Поиск пути предлагает кандидаты; отдельный
|
||||
монитор квадратного footprint учитывает углы корпуса при движении и повороте.
|
||||
Отсутствующие дальномерные данные и обрывы ещё не прошли сценарную приёмку.
|
||||
|
||||
## Проверки
|
||||
|
||||
Пять независимых сценариев установленного CMU-модуля прошли: свободная плоскость;
|
||||
поворот от стены; остановка в замкнутом ограждении; проезд метрового аппарата
|
||||
по коридору шириной 1.3 м; отказ от коридора шириной 0.9 м. Это проверки навигации
|
||||
по синтетическим наблюдениям, отдельно от сегментации и физики.
|
||||
|
||||
Native-физика: команда 0.3 м/с на плоскости за 5 с дала 1.491 м; после нулевой
|
||||
команды за следующие 2 с дополнительное перемещение 0.00345 м, скорости всех
|
||||
колёс — ноль. Это не измерение тормозного пути настоящего ровера на грунте.
|
||||
|
||||
| Заезд | Наблюдения | Смещение от старта | Сумма отрезков позы | Итог |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| Forest `airun-3664b7dec1024dbe984aaf82a11147cc` | 425 | 2.461 м | 3.572 м | переворот; проезд не принят |
|
||||
| Bamboo `airun-ee35c3d01b88438484ed795e07bc5518` | 490 | 1.491 м | 3.575 м | движение, пауза/продолжение, затем остановка |
|
||||
|
||||
Forest выполнен на предыдущем `d73e7ff17e7dd6e0` с тем же профилем колёс,
|
||||
материалов и навигацией, до перевода чтения позы на tensor API. Bamboo —
|
||||
на `be76ce84ecc2b5a4`. Сумма отрезков включает покачивания корпуса: её нельзя
|
||||
называть длиной успешно пройденного маршрута. Медиана inference обоих заездов
|
||||
94 мс. Физическое время при движении близко к реальному; observer около
|
||||
14–20 FPS в Forest и 18–21 FPS в Bamboo. Видео на паузе достигало 29 FPS.
|
||||
|
||||
Пауза Bamboo: два снимка с интервалом 5 с сохранили одинаковые 22.55 с
|
||||
физического времени, 1353 физических шага, 106 решений и позу. После продолжения
|
||||
физика и inference возобновились. Ошибки устаревшего ROS-состояния устранены
|
||||
заменой всего процесса адаптера вместе с DDS-контекстом при reset;
|
||||
перезапуска только трёх дочерних ROS-узлов было недостаточно. Внутренний DDS
|
||||
использует loopback UDP. Изменение transport само по себе проблему не решало.
|
||||
|
||||
IPC coordinator/Isaac заменён на SQLite WAL: частая атомарная замена JSON
|
||||
на Windows давала ошибки совместного доступа. Проверено 1000 конкурентных
|
||||
операций чтения/записи на Worker.
|
||||
|
||||
Локальные проверки: 35 backend-тестов AI-полигона, 7 проверок общей композиции,
|
||||
900 frontend-тестов, 4 architecture-теста, TypeScript и production build прошли;
|
||||
ruff для изменённого simulation-кода прошёл. Тяжёлые локальные проверки шли
|
||||
последовательно, Docker Desktop на Mac не запускался.
|
||||
|
||||
## Операторский интерфейс и WebRTC
|
||||
|
||||
Имя и круглая кнопка назад слева; «Старт и масштаб», запуск/пауза AI и завершение
|
||||
справа в одной закреплённой строке. Автор/лицензия остаются в каталоге, из
|
||||
активной сцены убраны. Скорость/время слева над viewport, подключение справа.
|
||||
Viewport округлён; переключатели камер и fullscreen находятся внутри сверху.
|
||||
Открытие карточки мира не стартует native-процесс: перед явным запуском можно
|
||||
выбрать общую композицию. В активном прогоне настройки доступны для чтения.
|
||||
|
||||
При browser QA обнаружен отдельный сбой: холодный старт на паузе иногда не
|
||||
получал первый WebRTC offer, хотя native-рендер и телеметрия уже работали.
|
||||
Рабочий запуск с автоматическим Play давал видео. Observer теперь имеет
|
||||
корректную позу до первых кадров прогрева. Клиент ждёт финального callback
|
||||
подключения перед terminate: connect() NVIDIA SDK возвращает IN_PROGRESS,
|
||||
а terminate во время STARTING не освобождает соединение. Повторные подключения
|
||||
сериализованы; ожидание ограничено настройками SDK.
|
||||
|
||||
Исправление установлено в release `c6182301817d8e7d`, 573 файла:
|
||||
identity `c6182301817d8e7dd88bf1879ee47dd7fa046a57c35deb2c7b4b43c68b94b844`,
|
||||
tgz SHA-256 `47cfcd99cc4b959c857cce8ea82018e7be8192882a8be0f37241801b646b63ef`.
|
||||
Заезд UI-приёмки: `airun-7d3cde3100a640b990a98e0f533d987f`.
|
||||
Холодное открытие на паузе показало 29 FPS при нулевых физическом времени
|
||||
и количестве inference. Возврат в каталог и повторное открытие присоединили
|
||||
тот же прогон с 28 FPS. Fullscreen сохранил управление; Escape вернул обычный
|
||||
размер. AI запустился с видео около 19–20 FPS. Финальный Stop подтвердился
|
||||
состоянием stopped: active marker отсутствует, native Kit и контейнеров
|
||||
симуляции нет, остались 8 прежних работающих контейнеров. Core8000 доступен.
|
||||
TypeScript и production build повторно прошли после этой поправки.
|
||||
Это ограниченная браузерная проверка, не длительный тест сетевых отказов.
|
||||
|
||||
## Сохранность окружения и ограничения
|
||||
|
||||
Сопоставлены 21 исходный container ID, имена, image IDs, restart-политики,
|
||||
mounts (без учёта порядка), memory, GPU requests и port bindings: различий нет.
|
||||
108 прежних image IDs и 9 томов сохранены. Полный старый Config-hash не использован
|
||||
как доказательство: формат его исходной сериализации не восстановлен.
|
||||
Новые образы добавлены отдельно; существующие профили не переписывались.
|
||||
|
||||
Во время диагностики найден собственный старый PowerShell-процесс, раздувшийся
|
||||
при глубокой сериализации CIM до 71.74 ГБ RAM. Он идентифицирован по точной
|
||||
команде и её хешу и завершён; затем свободная память Worker выросла до 84.84 ГБ.
|
||||
Другие процессы по имени PowerShell не завершались. Диагностика далее сериализует
|
||||
только примитивные поля.
|
||||
|
||||
Gaussian-меш пока не различает мягкую траву и твёрдые препятствия. Часть листвы
|
||||
может стать коллизией; незакреплённый реальными измерениями масштаб сцены также
|
||||
влияет на проходимость. Полное прохождение тропы, устойчивое восстановление
|
||||
после тупика, обрывы, динамические люди/животные и реалистичный грунт не приняты.
|
||||
Короткое движение и синтетические проверки не заменяют эти испытания.
|
||||
|
||||
## Артефакты и следующий этап
|
||||
|
||||
Исходные кадры, labels, range NPZ, решения, motion, composition, terrain и
|
||||
robot-profile хранятся в `simulation/state/<run_id>/` на Worker. Кадры и частные
|
||||
журналы не добавляются в Git. Локальные redacted-сводки и хеши сохраняются
|
||||
в `outputs/ai-polygon-2026-09-22/composed-navigation/`.
|
||||
Worker qualification-manifest SHA-256: Forest
|
||||
`53c03503e0d0b1fd75f7c64a3bb78fbbf00f0733e6dd000aa62151b8fcfbccf7`
|
||||
(1711 файлов, 62903005 bytes); Bamboo
|
||||
`74dc5c3f369c51e8966d967a41c1c78db99ed5f164afa4ab4878ad337e507121`
|
||||
(1974 файла, 88958576 bytes).
|
||||
|
||||
Следующая приёмка: метрическая опора сцены; семантическая обработка растительности
|
||||
в collision proxy; длинный маршрут с заданной целью и восстановлением;
|
||||
сценарии обрыва и пересечения пути динамическим объектом. Нельзя получать
|
||||
«успешную езду» снятием проверки препятствий или уменьшением корпуса.
|
||||
|
||||
Источники: [SegFormer](https://huggingface.co/nvidia/segformer-b2-finetuned-ade-512-512),
|
||||
[CMU autonomy stack](https://github.com/HongbiaoZ/autonomous_exploration_development_environment/tree/158e67b31b644ed1e8b06eb1d7f70e183cc62591),
|
||||
[Omniverse WebRTC](https://docs.omniverse.nvidia.com/ov-web-sdk/latest/web-streaming-library/overview.html).
|
||||
@@ -0,0 +1,62 @@
|
||||
# AI-полигон: компоновка и остановка Bamboo
|
||||
|
||||
## Изменение интерфейса
|
||||
|
||||
По замечаниям оператора viewport использует `--nodedc-radius-panel` и обрезает
|
||||
содержимое по этому радиусу. Статус, управление запуском/паузой/завершением и
|
||||
телеметрия вынесены над viewport. Переключатель камер находится в его верхнем
|
||||
левом углу, каноническое разворачивание — в верхнем правом. Общий fullscreen
|
||||
контейнер сохраняет название локации и управление над изображением.
|
||||
|
||||
Заголовок локации исключён из прокручиваемой области: прокручивается только
|
||||
содержимое под ним. Профиль и Bamboo Trail больше не перекрывают друг друга.
|
||||
Контракты Worker, inference, модели, физика и пороги управления не изменялись.
|
||||
|
||||
## Проверка
|
||||
|
||||
Последовательно прошли architecture 4/4, TypeScript, frontend 895/895 и
|
||||
production build. В браузере на каноническом `127.0.0.1:8000` проверены
|
||||
скругление, перенос управления, прокрутка, follow/overview/AI-camera,
|
||||
fullscreen и Escape. При прокрутке содержимого на 255 px заголовок остался
|
||||
на y=250.375 px; управление геометрически находится выше viewport.
|
||||
Видео показывало 28–30 FPS; в DOM нет canvas. GPU-рендеринг остаётся на Worker.
|
||||
|
||||
QA-сцена `airun-1f27d76ef73748cc89958dc70dc9b28b` оставлена открытой для
|
||||
операторского просмотра: ready, follow, stream_ready=true, sim_time=0,
|
||||
inference_count=0. AI во время UI-проверки не запускался. Core PID 10918
|
||||
продолжает обслуживать 8000; второго backend на 8765 нет.
|
||||
|
||||
## Причина остановки в пользовательском прогоне
|
||||
|
||||
Источник: сохранённые Worker-журналы `motion.jsonl` и `camera/decisions.jsonl`
|
||||
прогона `airun-0ca108e35bed49128b077f6844cbd8eb`, созданного
|
||||
2026-09-21T21:03:30.999Z. Журналы прочитаны без повторного запуска inference.
|
||||
Также просмотрены первый и последний сохранённые RGB-кадры; приватные кадры
|
||||
и полные журналы не входят в Git.
|
||||
|
||||
- 262 решения: 10 `road`, 6 `uncertain`, 246 `no-road`.
|
||||
- Смещение от старта 0.0721 м, длина пути по snapshots 0.0726 м.
|
||||
- Последний motion snapshot: RTF 1.0, render 28 FPS, sensor 8 FPS, AI 8 Hz,
|
||||
inference 94 мс, возраст кадра 172 мс, road_fraction 0.02468.
|
||||
- Во всех сохранённых решениях obstacle_count=0. Остановка не была решением
|
||||
детектора о препятствии; RoadPolicy обнулила скорость из-за road_fraction
|
||||
ниже 0.35 в ближней области маски.
|
||||
|
||||
На RGB-кадрах визуально сохраняется тропа. Это свидетельство ограничения
|
||||
сегментации/простого правила следования, а не доказательство непроходимости
|
||||
тропы для метрового ровера. Полные семантические маски не архивировались,
|
||||
поэтому конкретный ошибочный класс по этим журналам восстановить нельзя.
|
||||
|
||||
## Граница вывода
|
||||
|
||||
Текущая RoadPolicy — camera-only baseline: она ищет полосу из шести классов
|
||||
GOOSE и задаёт скорость/поворот, но не оценивает высоту ступеньки, уклон,
|
||||
клиренс, опорную поверхность и сцепление. Скан даёт внешний вид; физическая
|
||||
опора в `run_realtime.py` — невидимая плоскость. Камни не имеют физических
|
||||
collision-форм, а масштаб скана ещё не подтверждён измеренной опорой.
|
||||
|
||||
Следующая работа по автономии должна отдельно квалифицировать распознавание
|
||||
проезжаемого грунта и принятие решений на неровностях. Для проверки подъёма
|
||||
на камни потребуется метрически согласованная поверхность контакта и
|
||||
измеренный профиль аппарата. Порог не понижался ради демонстрации движения;
|
||||
успешное прохождение тропы и физическая проходимость этим изменением не заявляются.
|
||||
@@ -0,0 +1,712 @@
|
||||
# AI-полигон · привод, маршрут и проверка корпуса
|
||||
|
||||
Обновление23сентября: R29 и R30 прошли весь заданный маршрут Riverside Path
|
||||
с `goal-reached` и остановкой. После оптимизации R30 завершён за32.67с вместо
|
||||
63.97с; задержка inference по медиане234мс вместо414мс. Это парк с готовой
|
||||
парой Gaussian/mesh, не грунтовка. Ниже сохранена история ошибок и последующих
|
||||
исправлений, включая отрицательные результаты.
|
||||
|
||||
Полное автономное прохождение Forest/Bamboo пока не принято. Исправления ниже
|
||||
подтверждают отдельные свойства симулятора; ни смещение перевёрнутого аппарата,
|
||||
ни штатный Stop не считаются успешным маршрутом.
|
||||
|
||||
## Исправление прежнего результата
|
||||
|
||||
Forest `airun-3664b7dec1024dbe984aaf82a11147cc` закончился переворотом
|
||||
(конечный roll около178°, наклон от вертикали около168°). Прежнее утверждение
|
||||
«2.461м, затем остановка перед препятствием» отозвано в исходном audit и Ops.
|
||||
Raw evidence сохранён. Теперь используется наклон оси корпуса относительно
|
||||
вертикали из quaternion, поэтому инверсия не маскируется нормализацией углов.
|
||||
|
||||
## Исполнение и композиция
|
||||
|
||||
Isaac/PhysX, Gaussian, камера/лидар, модели, решения и журналы исполняются на
|
||||
Worker006. Mac принимает видеопоток и компактное состояние. Физический привод
|
||||
устройств не подключён. SegFormer B2 ADE150 и RF-DETR остались готовыми
|
||||
провайдерами общей композиции; DDRNet и прежние образы/веса сохранены.
|
||||
Добавлен модуль `simulation-waypoint-mission`: необязательные32точки XY,
|
||||
проверка продвижения, до3попыток сменить наблюдаемую локальную цель, явные
|
||||
`goal-reached`, `stuck`, `unstable`. Это локальное поведение, не глобальный
|
||||
планировщик обхода и не подтверждённая автономность.
|
||||
|
||||
Состояние миссии теперь принадлежит эпизоду; пересоздание сетевого клиента модели
|
||||
не сбрасывает индекс маршрута и terminal fault. Пауза замораживает время.
|
||||
Близкая уже наблюдённая точка явного маршрута сохраняется в слепой полосе камеры,
|
||||
если текущие наблюдения всё ещё содержат поверхность; CMU и монитор корпуса
|
||||
сохраняют право остановки. Без свежего кадра800мс или команды500мс привод получает ноль.
|
||||
|
||||
## Измеренная физика
|
||||
|
||||
Квадратный footprint1×1м,4колеса радиусом0.25м,24кг, без подвески — временный
|
||||
лабораторный профиль, не модель физических устройств пользователя.
|
||||
11проверок на Worker: плоскость, ступени5/10/15/18/20/25см и уклоны10/15/20/25°.
|
||||
Прошли плоскость,5/10см и все4уклона.15см и выше не прошли; поэтому предел
|
||||
навигации снижен с прежнего неподтверждённого18см до10см.
|
||||
|
||||
Нулевая скорость сама по себе не удерживала колёса на склоне. Добавлен физический
|
||||
position-hold колёсных шарниров: без фиксации корпуса, телепортаций и подмены позы.
|
||||
На финальных уклонах10–25° дрейф после торможения за2с составил0.29–1.06мм.
|
||||
Solver32/8 и contact offset5мм повторно прошли ту же capability-проверку.
|
||||
Повтор одинаковых сохранённых команд на исходной Bamboo-геометрии уменьшил
|
||||
максимальный наклон с50.86° до15.94°; это физический replay, не AI-route acceptance.
|
||||
|
||||
## Наблюдения и CMU
|
||||
|
||||
15колец виртуального лидара, первый физический контакт, частотаоколо5Гц.
|
||||
Дополнительные лучи−80/−75/−70° сокращают слепую полосу перед колёсами.
|
||||
Восстановлена upstream-память CMU: decay2с, noDecayDis4м. Исчезновение точки
|
||||
за корпусом больше не объявляет пространство свободным. Очистка следов
|
||||
движущихся участников не квалифицирована; память статического рельефа консервативна.
|
||||
|
||||
Готовые CMU terrainAnalysis/pathFollower и библиотека примитивов сохранены.
|
||||
В localPlanner внесён ограниченный адаптер выбора: перед принятием кандидата
|
||||
проверяется поворот к look-ahead0.7м и первый участок пути до1.2м с прямоугольником
|
||||
1.1×1.1м (корпус плюс5см запаса с каждой стороны). Прежняя угловая проверка могла
|
||||
разрешить задевание задним углом и одновременно запретить прямой выход.
|
||||
Её заменяет этот фильтр. Отдельный монитор дуги фактически выдаваемой команды
|
||||
остаётся включён. Изменения объявлены явно; C++ больше не считается неизменённым
|
||||
upstream. Ограничение скорости0.15м/с и поворота20°/с сохранено.
|
||||
|
||||
Исходный CMU commit `158e67b31b644ed1e8b06eb1d7f70e183cc62591`;
|
||||
базовый image `sha256:7693c28fac83df9e9e6ac6d89ffec81470f660cb8b30fc78fa88be228329dc0b`.
|
||||
Отдельный image с фильтром:
|
||||
`sha256:41784f6269f46907a4bb41323fe24ce8dcf439c797be94b1257d24f280c99453`.
|
||||
Сборка из versioned `navigation/Dockerfile.footprint`, `missioncore_footprint.hpp`,
|
||||
`patch_footprint.py`; повторная подготовка — `Prepare-RectangleNavigation.ps1`.
|
||||
Старые model images не перезаписывались.
|
||||
|
||||
Семь независимых Worker-only проверок прошли: плоскость; объезд стены;
|
||||
остановка в ограждении; коридор1.3м; отказ от0.9м; прямой выход от препятствия у
|
||||
заднего угла; сохранение ближнего препятствия при исчезновении наблюдения.
|
||||
Вариант только с более плотным terrainVoxelSize0.02 проблему не решил и не принят;
|
||||
оставлено0.08. Первый вариант фильтра вместе со старой угловой проверкой не прошёл
|
||||
новую регрессию; установлен только исправленный вариант.
|
||||
|
||||
## Плавные уклоны и сохранение препятствий
|
||||
|
||||
Установленный адаптер `navigation/terrain_costs.py` устраняет ещё одно измеренное
|
||||
расхождение: физическое шасси проходит плавные уклоны до25°, но прежняя оценка
|
||||
CMU блокировала15° и выше. Высота точки над нижним квантилем ячейки не равна
|
||||
высоте ступени. Адаптер разрешает только наблюдённую локальную плоскость с
|
||||
остатком не более2.5см, достаточной площадью опоры и уклоном2–25°; геометрия
|
||||
не меняется. Резкие ступени, обрывы, недостаточные и неровные наблюдения
|
||||
сохраняют прежнюю стоимость. Это не полная квалификация отрицательных препятствий.
|
||||
|
||||
На Worker прошли12сценариев: прежние7 и пять непрерывных уклонов5/10/15/20/25°.
|
||||
Отдельная проверка через ROS-адаптер сохранила остановку перед ступенью15см
|
||||
и перепадом вниз40см в коридоре1.3м. В R10 нормализатор не снял ни одного
|
||||
из ближних препятствий: наблюдаемые перепады не удовлетворяют условию плоскости.
|
||||
|
||||
## Реальные заезды и ограничения
|
||||
|
||||
| Заезд | Наблюдение | Оценка |
|
||||
|---|---|---|
|
||||
| `airun-02e135f864d944888b3e40e5c5877182` | Bamboo, смещение0.994м, max tilt35.02° | Не принят: опасный наклон |
|
||||
| `airun-7bd0bb24a42d400e83d291369ea32887` | Bamboo, память препятствий, остановка у старта | Не принят: путь не найден |
|
||||
| `airun-cbb037ed6de44df0b87ec9874c120232` | Bamboo, смещение0.0085м, max tilt7.51° | Не принят: застревание |
|
||||
| `airun-06e86d64d53245f6a3d9e14f706c6be5` | Forest, практически нулевое смещение, max tilt17.07° | Не принят: нет наблюдаемого прохода |
|
||||
| `airun-0862bb2a6a9a4651a6bdf8a1d36e85d9` | Bamboo, прямоугольный фильтр, старт[0.95,0.3] | Не принят: путь не найден после3попыток |
|
||||
| `airun-2ecadc20d2fe40e2ac1a31efc3559154` | Bamboo, старт[3.65,2.5], цель[5,2.5] | Не принят: путь не найден |
|
||||
| `airun-457b2564987a41428108f8449b342dbc` | Bamboo, исправление уклонов; смещение0.44мм, max tilt13.62°,34.5с | Не принят:35решений obstacle,117no-road,12stuck |
|
||||
| `airun-09859bf380b74119ba4afdf30798e0e3` | Forest, старт[-1.5,1], смещение9.86мм, max tilt8.68°,34.5с | Не принят:74obstacle,56no-road,12stuck |
|
||||
|
||||
Ровная площадка сама по себе не доказывает возможность выехать метровым корпусом:
|
||||
на последнем старте range видит близкое превышение0.17–0.22м у переднего правого
|
||||
угла и боковую геометрию. Проверки коллизий не ослаблялись. Scale остаётся1,
|
||||
внешняя метрическая опора скана пока отсутствует. Collision proxy не разделяет
|
||||
твёрдый рельеф и мягкую растительность. Новая точка старта выбиралась только
|
||||
при подготовке сценария; inference не получает mesh или авторскую карту.
|
||||
|
||||
Текущий профиль не имеет глобального поиска пути, готового возврата задним ходом,
|
||||
приёмки обрывов/неизвестной опоры и динамических людей/животных. Десять успешных
|
||||
повторных маршрутов не получены. Нужна подготовка физически проходимого участка
|
||||
и полноценное поведение восстановления; добавление моделей само по себе эти
|
||||
два ограничения не решает.
|
||||
|
||||
## Версия и доказательства
|
||||
|
||||
Установлен release `b3f1e73eb597fba1`,584файла;
|
||||
identity `b3f1e73eb597fba135f803591561be1f217a112b160699640c5a1b7133d71cab`;
|
||||
tgz SHA-256 `8f89288cfc8d169f4468cb6c27faabfacb78a511d1f9e7cf8d7e55424ba61382`.
|
||||
Установка подтверждена штатным Windows installer в06:20:14UTC. Core8000
|
||||
согласованно перезапущен для загрузки изменённого реестра композиции; health и
|
||||
регистрация Worker подтверждены перед R10. Предыдущая версия `2fff34f35bba9346`
|
||||
сохранена для отката.
|
||||
|
||||
41backend AI-polygon tests и16launchd/tunnel tests прошли; Ruff для изменённых
|
||||
файлов прошёл. Согласованная соседняя задача проверила ту же общую frontend-сборку:
|
||||
architecture4/4,typecheck,unit903/903,production build,diff check — passed.
|
||||
Здесь тяжёлая сборка повторно не запускалась. Операторская проверка AI-полигона:
|
||||
шапка/прокрутка, настройка общей композиции, три камеры, fullscreen/Escape и
|
||||
показ явной причины неуспешного прогона проверены. Настоящий Worker video в
|
||||
паузе28–29FPS, это не частота inference и не результат движения. После выхода
|
||||
из fullscreen выбранная камера сохраняется. Перед UI-проверкой: memory pressure1,swap0.
|
||||
|
||||
Raw RGB,labels,range,motion,composition,robot-profile и terrain остаются на Worker.
|
||||
Каждый закрытый эксперимент получает SHA-манифест рядом с raw; время sealing
|
||||
отделено от исходных UTC/monotonic эксперимента. Частные компактные сводки:
|
||||
`outputs/ai-polygon-2026-09-22/route-recovery/`.
|
||||
Отдельный инцидент запуска Core и его восстановление описаны в
|
||||
[Core launch recovery](2026-09-22-core-launch-recovery.md).
|
||||
|
||||
## Отдельная проверка подготовки коллизий
|
||||
|
||||
Повтор старого эксперимента SplatTransform с carve снова упал при Building BVH.
|
||||
Прямой bounded-запуск того же3.4.0 с `--filter-nan` и процессным Node heap12ГБ
|
||||
построил кандидат за11.125с:4.65млн splats,736тыс треугольников,12.6МБ GLB.
|
||||
Эти два изменения проверены вместе; отдельная причина сбоя не установлена.
|
||||
[Штатный carve](https://developer.playcanvas.com/user-manual/splat-transform/collision/)
|
||||
очищает недоступные внутренние поверхности; он не распознаёт мягкую растительность.
|
||||
|
||||
Кандидат НЕ установлен: отдельный физический прогон на старте R10 прошёл только
|
||||
0.304м до аварийного наклона30.06°. Это не AI-заезд и не улучшение проходимости.
|
||||
Исходный рабочий collider сохранён. Его замена без проверки контактной геометрии
|
||||
маскировала бы ограничение скана вместо исправления навигации.
|
||||
|
||||
Сравнение Docker06:26:09UTC: сохранены21исходный container ID и конфигурации
|
||||
(name/image/restart/mounts/memory/GPU/ports),104уникальных image ID из108записей
|
||||
исходного каталога,9volumes. Отличий и пропавших объектов нет. Проверка не
|
||||
утверждает неизменность полного Config JSON; перечисленные поля сравнены явно.
|
||||
|
||||
## Операторская проверка после восстановления
|
||||
|
||||
Прогон `airun-8255c7e50998477b9afaee41746372cb`: Pause через UI подтверждён
|
||||
Worker; в течение22.344с неизменны simulation time26.566666667с,
|
||||
physics steps1594,inference count96 и pose. Continue подтверждён; в отсутствие
|
||||
первого нового решения привод оставался остановлен. Последующий UI Stop дал
|
||||
`stopped / Движение и inference остановлены.`; active run/marker отсутствуют.
|
||||
Повторное сравнение Docker06:43:36UTC снова не обнаружило изменений прежних
|
||||
контейнеров/images/volumes. Core8000 health ok,Worker available;8765 не слушает.
|
||||
|
||||
Отчёт Ops с исправлением прежней ложной оценки и Core recovery был записан.
|
||||
Последующие updates R10/R11 получили transport errors; результат пока не
|
||||
подтверждён. Точное тело для идемпотентной повторной записи сохранено в private
|
||||
`outputs/ai-polygon-2026-09-22/route-recovery/pending-ops-report.json`.
|
||||
|
||||
После закрытия видео финальная проверка Mac: pressure1,swap4370.88МБ.
|
||||
Временных локальных test/build/simulation jobs этой задачи не осталось; по
|
||||
RSS один Core8000 около539МБ, браузерный renderer около276МБ. Причина роста
|
||||
swap не установлена; рядом появилась пользовательская Chrome-сессия, но это
|
||||
не доказательство причинности. Смежная задача предупреждена перед своей
|
||||
следующей сборкой. Системные лимиты и приложения пользователя не менялись.
|
||||
Финальный Ops read также получил timeout60с; повторная запись не подтверждена.
|
||||
|
||||
## R12: observed reverse recovery and coordinate fault (07:12 UTC onward)
|
||||
|
||||
Release `63d59fd270b2a252` added signed virtual motion, CMU two-way driving with
|
||||
reverse body-orientation clearance, and a bounded retreat/replan policy inside
|
||||
the existing composition constructor. Retreat requires fresh range support over
|
||||
the full swept width. A separate rear mount adds 660 first-hit rays; the chassis
|
||||
continues to occlude rays. Route progress now uses improvement toward the target,
|
||||
so backing away cannot replenish the retry budget. Core enforces the speed limit
|
||||
by magnitude in both directions. Local targeted suite: 48 passed.
|
||||
|
||||
The new navigation image is
|
||||
`sha256:1dd68dfb3fa6bf4148fec4f1caabb204e8ec39382c6dee60ac806378f553c9c7`,
|
||||
separate tag `ndc-ai-polygon-cmu:rectangle-v2`. All 14 Worker navigation cases
|
||||
passed, including reverse on clear ground and rejection of a rear wall. The
|
||||
shipped physical chassis and mounted sensors completed a 0.504 m reverse on a
|
||||
synthetic floor; braking drift was 0.00030 m. These are component qualifications,
|
||||
not acceptance of a Gaussian-world route.
|
||||
|
||||
Bamboo R12 `airun-6c49b967377b4521b64637d462b81edb` remained blocked: 69 obstacle,
|
||||
77 no-road and 11 terminal stuck decisions. The newly observed rear footprint
|
||||
contained local height spreads up to 0.262 m, so recovery correctly stayed
|
||||
inadmissible. This did not establish whether that physical surface matched the
|
||||
image.
|
||||
|
||||
### Confirmed visual/collision registration defect
|
||||
|
||||
Inspection of the installed SplatTransform 3.4.0 source map established that PLY
|
||||
input carries an implicit **Rz(180)** transform (`Transform.PLY`). The old
|
||||
preparer neither cancelled that transform nor used the correct Z-up to Y-up
|
||||
basis rotation. Its additional Rx(+90), followed by the runtime GLB conversion,
|
||||
produced a physical mesh rotated 180 degrees horizontally relative to the USD
|
||||
Gaussian visual.
|
||||
|
||||
A Worker-only single-Gaussian landmark confirmed the defect independently of
|
||||
perception, navigation, chassis and scene complexity. The raw landmark (1,2,3)
|
||||
with the configured USD rotation belongs at (-1,-3,-2). The old pipeline produced
|
||||
(0.9875,3.0125,-2.0125), 6.332 m from its visual position. Cancelling Rz(180) before
|
||||
the configured scene rotation and using Rx(-90) for glTF produced
|
||||
(-1.0125,-2.9875,-2.0125), error 0.02165 m with a 0.025 m voxel.
|
||||
|
||||
**All earlier real-world route outcomes in this audit used mismatched visual and
|
||||
collision geometry. They cannot qualify road recognition, visual navigation or
|
||||
traversability of the visible Forest/Bamboo scene.** Synthetic chassis and CMU
|
||||
component checks remain separate valid evidence. The prior terrain capability
|
||||
conclusions are restricted to the physical proxy actually tested, not the
|
||||
visible road. No additional terrain classifier was installed to conceal this
|
||||
registration problem.
|
||||
|
||||
The versioned `Prepare-Terrain.ps1` now cancels the PLY convention explicitly,
|
||||
uses the inverse of the runtime glTF basis, and crops in that same basis. Its
|
||||
changed generator digest invalidates the previous terrain cache. Existing
|
||||
meshes remain available as historical evidence. A versioned landmark regression
|
||||
executes the actual preparer rather than merely duplicating its transform math.
|
||||
|
||||
### Coordinate correction acceptance and R13/R14
|
||||
|
||||
Release `0ad2b4bf9b3dcfa6` (587 files) was installed at 07:31:25 UTC. The actual
|
||||
preparer's independent landmark test passed: horizontal expected (-1,-3),
|
||||
measured (-0.990,-2.970), with the production 6 cm voxel. The admitted old caches
|
||||
were corrected by an exact rigid transform, preserving every vertex and face.
|
||||
`migrate_terrain_coordinates.py` accepts only the known old generator digest and
|
||||
the exact rotation [-90,0,180]; its own SHA is pinned inside the preparer.
|
||||
A synthetic binary GLB regression verifies positions and unchanged topology.
|
||||
|
||||
A fresh full-scene BVH build in SplatTransform failed natively with Windows code
|
||||
3221226505, including a diagnostic retry with optimization disabled. That retry
|
||||
was not installed. The existing-cache correction avoids this upstream rebuild
|
||||
for Forest and Bamboo. Fresh imports without an admitted old cache still use
|
||||
the corrected official converter and may encounter that unresolved upstream
|
||||
failure. No scene was simplified to avoid the failure.
|
||||
|
||||
Bamboo R13 `airun-2645a317563e451e82f29477843a16e3` rejected its rotated initial
|
||||
footprint before execution. R14 `airun-92bb42f79beb491584ea293a9f65fec2` used an
|
||||
admitted pose (-1.35,-0.6), heading220°, and the corrected collider SHA
|
||||
`434c68755d9bb6443eb2081014fb5a2f226947721d4c3ff7c28f046c00c74f9e`.
|
||||
It started upright (support residual0.03664m) but still failed to make route
|
||||
progress:135 obstacle,2 replanning,11 stuck decisions; net movement0.0093m,
|
||||
maximum tilt8.04°. Its initial RGB frame visibly follows the bamboo trail, and
|
||||
semantic road fraction was0.989. This is not an accepted autonomous route.
|
||||
|
||||
The same scene/profile/pose in a separate bounded physical contact test moved
|
||||
1.189m in20 simulated seconds, maximum tilt14.34°, without a tilt stop. It drifted
|
||||
in heading and was not a route-following test. This proves some physical motion
|
||||
is possible from that pose; it does not prove completion of the requested route.
|
||||
The remaining analysis concerns observed terrain costs and planning, rather
|
||||
than missing ground classification. All original evidence remains on Worker.
|
||||
|
||||
|
||||
### Short prefixes, observed reserve and command freshness
|
||||
|
||||
Release `fd4ffaa8c24983da` admitted a safe 0.5 m CMU path prefix, retaining the
|
||||
whole rectangular body and command/braking monitor. Seventeen Worker navigation
|
||||
cases passed, as did separate 12/15 cm step and 40 cm drop rejections. Bamboo R15
|
||||
`airun-18877f2bce60420886b29a2677b292c3` still failed: eight road decisions followed
|
||||
by 134 obstacle and 11 stuck decisions, with approximately 8 mm net movement.
|
||||
The first small motion revealed terrain returns about 0.53 m behind the body,
|
||||
inside its 5 cm reserve but outside the actual 1 m body. Requiring the complete
|
||||
reserve clear at time zero incorrectly rejected even departure from these points.
|
||||
|
||||
The new filter retains actual body-overlap rejection. For a point already inside
|
||||
the reserve, every sampled turn/translation must preserve or increase its initial
|
||||
clearance; all other points retain the full 5 cm reserve. It therefore cannot
|
||||
permit approach, reverse into that point or sweep a corner through it. Regression
|
||||
cases cover departure, front obstruction, body overlap and the braking horizon.
|
||||
|
||||
R15 also recorded camera-result ages of roughly 0.4 s plus a roughly 0.2 s capture
|
||||
period. The old 0.5 s source watchdog repeatedly stopped valid motion between
|
||||
results (57 stale-camera versus 64 applied-command snapshots). The Worker source
|
||||
budget is now 0.8 s, and the command collision envelope uses the same constant,
|
||||
plus the existing braking distance and 0.5 s reserve. The independent 0.5 s
|
||||
completed-command watchdog remains. This is a bounded local latency budget,
|
||||
not permission to apply an indefinitely stale prediction. Fifty-two focused
|
||||
local tests passed after these changes. Live route acceptance remains pending.
|
||||
|
||||
|
||||
### R16/R17: remove the processing backlog, retain obstacle authority
|
||||
|
||||
Release `878206a9ae0d9467` passed20 CMU scenarios (including reserve departure,
|
||||
front reserve and body-overlap rejection), three separate hazardous terrain
|
||||
cases and R15 observation replay. Live R16
|
||||
`airun-4beae79a310f43889388efb0d08c4c7b` moved0.181m, then stopped while terrain
|
||||
processing fell behind. Measured cost normalization rose from31ms to540ms as the
|
||||
local map accumulated roughly7,000 points. This was Worker-local processing,
|
||||
not operator-network latency.
|
||||
|
||||
`terrain_costs.py` now indexes exact radius neighborhoods, rejects mathematically
|
||||
impossible plane fits early, and bounds a cache of byte-identical neighborhood
|
||||
fits to16,384 entries. Changed observations invalidate the relevant fit. It does
|
||||
not store or erase occupancy; CMU remains its owner. Seven retained map snapshots
|
||||
produced exactly equal normalized costs to the earlier algorithm. The measured
|
||||
ROS callback fell to87–93ms in the late recorded scene. The new-obstacle cache
|
||||
invalidation regression and 12/15cm ledge/40cm drop rejection passed.
|
||||
|
||||
Release `3bfe8f53075912f6` was installed at08:25:38UTC. Live R17
|
||||
`airun-43c573ee22174735b1e42edd4c3717f4` removed the sustained stale-frame stops
|
||||
(3 initial stale versus116 applied-command snapshots in the sampled trace),
|
||||
but stopped after0.168m:16 road,95 obstacle,10 stuck decisions. CMU selected a
|
||||
path while the final command's full-speed turning/braking arc was inadmissible.
|
||||
This exposed the need for bounded speed regulation rather than repeatedly
|
||||
requesting the same rejected full-speed command. No completed route is claimed.
|
||||
|
||||
### R18: regulation removes command rejection, terrain estimate still blocks
|
||||
|
||||
Release `b8fd58094d09f501` scales the CMU linear and angular command together,
|
||||
preserving curvature. A bounded search admits only a speed whose complete body
|
||||
and braking envelope passes the same monitor. It cannot create a new path or
|
||||
ignore an obstacle. Twenty native navigation cases and the 12/15 cm ledge and
|
||||
40 cm drop rejections passed. Progress recognition now admits 0.10 m in eight
|
||||
seconds, retaining the same bounded recovery budget and jitter rejection.
|
||||
|
||||
Bamboo R18 `airun-14f6f5c770bb4a1aad9ef52c76f5dc16` still stopped after 0.212 m.
|
||||
It ran 37.4 simulation seconds in 37.5 wall seconds; rendered about 13–16 FPS
|
||||
and inferred about 3–4 Hz. The final source age was 344 ms. These measurements
|
||||
separate local simulation performance from route completion: real-time execution
|
||||
was possible, but the autonomous route did not pass.
|
||||
|
||||
### September 23: restart, isolated Forest contact and median-ground candidate
|
||||
|
||||
Worker was powered down by its owner and resumed on September 23. The scheduled
|
||||
task was Ready with LastResult 1. Pinned model preflight passed, the existing
|
||||
scheduled task was started, and Core reported Worker available. The historical
|
||||
log is insufficient to identify the boot failure; it does not establish Docker
|
||||
startup as the cause. Release `6974a7ef7a8d5d14`, installed at 05:02:31 UTC, adds
|
||||
top-level coordinator exception logging and persisted native startup phases.
|
||||
It changes no navigation model, wheel or terrain parameter.
|
||||
|
||||
Corrected Forest R19 `airun-7e504cc926d346a4adcfee17756e1ddb` never finished
|
||||
startup. R20 `airun-7f4448035d0f4a60918d73d41def5acf` isolated the stall to
|
||||
`initial-render-and-contact`. Native physics views, the stream and 2,142,439
|
||||
Gaussians had initialized. A physics-only replay of the exact 1,347,252-triangle
|
||||
collider also exceeded 100 seconds without completing. Both were bounded and
|
||||
their owned process trees were terminated. No Forest AI route was run.
|
||||
|
||||
An isolated test enabled NVIDIA's official
|
||||
[convex cylinder approximation](https://docs.omniverse.nvidia.com/kit/docs/omni_physics/110.0/dev_guide/rigid_bodies_articulations/collision.html).
|
||||
The same Forest physics-only replay then completed: 12 simulation seconds in
|
||||
4.92 measured stepping seconds, 80.03 seconds including process startup/shutdown.
|
||||
It moved 0.734 m and stopped at the existing 30-degree tilt guard. This diagnoses
|
||||
the contact representation and demonstrates bounded physical motion, not a
|
||||
successful AI route. Wheel dimensions, terrain and tilt limits were unchanged.
|
||||
|
||||
R18 observations also exposed the ground-reference issue: CMU's 0.15 height
|
||||
quantile in its 0.6 m neighbourhood can classify the upper side of shallow scan
|
||||
depressions as a >10 cm obstacle. A candidate uses CMU's existing `quantileZ=0.5`
|
||||
parameter, retaining absolute drop costs. On the same first 60 retained R18
|
||||
observations, old processing produced 33 no-path results and 24 positive speeds;
|
||||
the candidate produced 60 positive speeds and no no-path results. Replay does
|
||||
not predict the subsequent changed live trajectory. Hazard, physical capability
|
||||
and live-route acceptance must pass before this is an accepted deployment.
|
||||
|
||||
The median candidate `0795e3aa7f9d3a14` was rejected: 22 of 23 navigation cases
|
||||
passed, but wall returns contaminated the reference ground in the 1.3 m corridor
|
||||
and prevented motion. All three hazardous height boundaries still stopped the
|
||||
rover. The candidate was not installed. The next candidate restores upstream
|
||||
CMU `quantileZ=0.25`; its own full qualification and replay are separate.
|
||||
|
||||
The shared convex-wheel profile passed independent native physical checks:
|
||||
1.471 m forward in five seconds, 1.63 mm drift over the following two-second
|
||||
brake; observed reverse reached -0.495 m with 0.272 mm braking drift. Flat ground,
|
||||
5/10 cm steps and continuous 10/15/20/25-degree grades passed the unchanged
|
||||
physical capability gates. As before, 15/18 cm steps failed to traverse and
|
||||
20/25 cm steps exceeded the stability bound. No capability limit was raised.
|
||||
These are measurements of the declared virtual chassis, not the owner's vehicle.
|
||||
|
||||
Candidate `8f3fbe019a3803f8` uses the upstream quantile 0.25 and the same qualified
|
||||
convex-wheel implementation (SHA
|
||||
`021c77c002f1eac4451606329df097b19a94bf6b065b4425cf59d3544f1df6de`).
|
||||
All 23 native navigation scenarios passed, including the corridor that rejected
|
||||
the median candidate. The same 60-frame R18 replay produced 54 positive speeds,
|
||||
no no-path results and six valid turning-only commands. Fifty-five focused local
|
||||
tests and Ruff passed. These component results admit a bounded live test; they
|
||||
do not establish route completion.
|
||||
|
||||
### R21/R22 and short-horizon controller mismatch
|
||||
|
||||
Release `8f3fbe019a3803f8` was installed at 05:26:04 UTC. Bamboo R21
|
||||
`airun-677927b7cd3c4c8eadf7dd0f1b6bfb6c` failed after initial movement of about
|
||||
0.2 m: 10 road, 106 obstacle and 12 stuck decisions. New observations differ
|
||||
from the retained R18 replay; replay success did not generalize to live driving.
|
||||
Forest R22 `airun-1584055d3c2a4a7bb2f315baba8ca1cd` now started and ran in real
|
||||
time, ending after 33.1 simulation seconds with no useful motion. Its 124 no-road,
|
||||
16 obstacle and 10 stuck decisions show an additional visual-width admission
|
||||
problem. The RGB view is a narrow trail between vegetation and trees. Neither
|
||||
run qualifies a completed route.
|
||||
|
||||
Private experiments at quantiles 0.35 and 0.40 failed the 1.3 m corridor and still
|
||||
produced 25 no-path results in 35 retained R21 observations. They were not
|
||||
installed. Intermediate native capability lanes at 12 and 14 cm also failed to
|
||||
traverse. The 10 cm physical limit remains in force; no hazard threshold was
|
||||
raised to make the scene pass.
|
||||
|
||||
Pinned upstream source inspection found `pathRangeStep=0.5`. Lowering only
|
||||
`minPathRange` to 0.25 or 0.1 therefore skipped the shorter candidate ranges;
|
||||
both experiments retained the same 25 no-path results. With a 0.1 m decrement
|
||||
and 0.2 m minimum, all 35 retained observations produced an admissible path or
|
||||
turn instead. Most late commands were turn-only, not forward-route success.
|
||||
The follower also used a 0.25 m stop distance against the cropped local path,
|
||||
which exceeds the new minimum. Candidate `84445a377102a3af` uses 0.08 m for
|
||||
this local endpoint, retaining the mission's independent arrival tolerance and
|
||||
the complete source-deadline/braking-envelope monitor. It requires native
|
||||
regression and a new live run before acceptance.
|
||||
|
||||
The fine-prefix candidate passed all 23 scenarios and was installed at
|
||||
05:40:09 UTC. R23 `airun-5b4752670cba4bc28c0ab1b1476f3df7` was opened paused
|
||||
and started using the actual Control Station button. The browser displayed the
|
||||
Worker stream at 28 FPS before AI start. Simulation time remained zero while
|
||||
paused. The run moved about 0.36 m, then failed after 51.55 simulation seconds:
|
||||
35 road, 89 obstacle, three replanning, one waiting and 12 stuck decisions.
|
||||
The initial inference connection errors recovered, but are retained in the run's
|
||||
`camera/errors.jsonl`. This is not a successful route.
|
||||
|
||||
R23's final map contains a blocking return inside the current body at local
|
||||
(-0.375,-0.282) m, CMU cost0.10237m but only0.06592m above the measured chassis
|
||||
support plane. All paths are rejected by the initial body-overlap check. An
|
||||
isolated straight physical run on the same source moved1.069m before reaching
|
||||
the30-degree tilt stop; blindly driving straight is therefore not accepted.
|
||||
|
||||
Candidate `d1e7783920f0928a` reconciles only observed low returns already inside
|
||||
the current footprint, inset5cm. Its support band is±8cm relative to the declared
|
||||
contact height and measured orientation, with a25-degree tilt bound. It changes
|
||||
neither future terrain nor CMU's raw memory; tall returns and drops retain their
|
||||
costs. The pose must match the terrain message's exact transaction timestamp.
|
||||
Regression covers leading-edge/future points, wall,12cm step,40cm drop, excessive
|
||||
tilt, yaw/translation invariance and preservation of the input map. This is an
|
||||
explicit candidate awaiting native hazard and live-route validation, not a claim
|
||||
that unseen ground is traversable.
|
||||
|
||||
The first underbody candidate passed the 23 hazard scenarios but applied zero
|
||||
corrections in all 90 replayed observations. Inspection found that CMU converts
|
||||
the message timestamp through double-precision seconds. Exact integer lookup
|
||||
therefore missed the matching pose. Candidate `d3b2218217c56943` uses the same
|
||||
1,000 ns round-trip tolerance already used by the transaction freshness check;
|
||||
it never falls back to the latest unrelated pose. Its replay must explicitly
|
||||
prove nonzero correction before native qualification can admit installation.
|
||||
|
||||
The corrected-timestamp replay applied51 underbody corrections. Of90 samples,
|
||||
89 returned an admissible path/turn and one held at the controller; the51 no-path
|
||||
results from the previous replay disappeared. All23 native navigation scenarios
|
||||
passed again, including current-body obstruction and the12/15cm step/40cm drop
|
||||
cases. The focused local suite now contains56 passing tests. These results admit
|
||||
another live run without increasing the rover's qualified physical limits.
|
||||
|
||||
### R24/R25: scene admission, not another planner threshold increase
|
||||
|
||||
R24 `airun-92057c35ee3a4d43b27391d007fc51f1` on release
|
||||
`d3b2218217c56943` removed the repeated no-path obstruction: 32 road, 60
|
||||
replanning and 12 stuck decisions, but only about 0.158 m net displacement.
|
||||
Turn commands continued while the measured heading stopped changing on the
|
||||
scanned surface. This is still a failed route. The added native flat-ground
|
||||
pivot test measured +0.458 and -0.486 rad in three seconds for commands of
|
||||
±0.35 rad/s. Both directions work, but both fail the declared >0.5 rad test.
|
||||
No gain, torque, friction or capability threshold was changed to hide that result.
|
||||
|
||||
A private Bamboo candidate moved the start by 2.5 m without changing scale.
|
||||
Its physical straight test moved 0.679 m in 16 seconds with maximum tilt21.48°.
|
||||
R25 `airun-bd3ff5c9c78d42948e176e900e357465` then failed without useful AI
|
||||
motion. The streamed view showed a bamboo trunk beside/through the starting
|
||||
footprint. Nine ground-height samples had missed the trunk between the rays.
|
||||
Original operator settings were automatically restored; this candidate was not
|
||||
accepted as a replacement route.
|
||||
|
||||
`spawn_clearance.py` now tests actual triangles against the full metre-square
|
||||
occupied prism, using separating axes rather than vertices alone. It detects
|
||||
crossing faces even when every vertex is outside. The check is scene admission
|
||||
only: it does not change the mesh or feed future ground truth to AI. Synthetic
|
||||
regressions cover thin trunks, crossing faces, empty AABB corners, admitted
|
||||
5/10 cm surfaces, 12 cm obstruction, overhead geometry and translated/rotated
|
||||
sloping ground. On retained real colliders it finds5 intersecting triangles at
|
||||
the original Bamboo start,21 at Forest and37 at the R25 candidate. The current
|
||||
preparer fails early for these occupied starts instead of launching a stuck run.
|
||||
|
||||
A bounded authoring search around the original starts (±6 m,0.5 m spacing,
|
||||
24 headings,0.25 m path samples) found no two-metre straight candidate passing
|
||||
the full-volume check. The longest tested Bamboo prefix was0.5 m; Forest had
|
||||
isolated starting footprints only. This is not a proof that no curved path
|
||||
exists anywhere in either world. It establishes that these two automatic
|
||||
colliders have not supplied an admitted positive driving scenario.
|
||||
|
||||
### Prepared paired-source scene and Worker-local storage
|
||||
|
||||
The official [Habitat-GS dataset](https://huggingface.co/datasets/RukawaY/gs_scenes)
|
||||
supplies Gaussian assets together with separate collision meshes and navigation
|
||||
episodes. Scene62 was downloaded directly to Worker at pinned revision
|
||||
`ea6453855938dd3d4395c4c449fedefb7e6603b7` under its declared Apache-2.0 license.
|
||||
No Habitat engine, new model weights, paid service or avatar dependency was
|
||||
installed. The navmesh was retained as source evidence; it is not supplied to
|
||||
the inference graph or used to move the rover.
|
||||
|
||||
- Gaussian142,307,349bytes: `5429cf3fc6a7ee5088dada65aca4fb6cad73dbaa660f2aec209a43122ea546ae`.
|
||||
- Original mesh34,840,636bytes: `fdd8ae7d6d45907bbcaded91246f45390ebcb3a5d6c04a72fd16f5ed54ddce54`.
|
||||
- Derived GLB: `384573b1a7cb805e94124d42f4ed4c4e0d69fca357183803cd57ac4a42753835`.
|
||||
|
||||
The conversion retains all original vertices/triangles. Both the supplied Y-up
|
||||
mesh and the Gaussian visual use the same Rx(+90) conversion to metric Z-up.
|
||||
Five five-metre authoring candidates passed support and volume checks. The first,
|
||||
based on supplied episode3, passed an independent native straight drive:
|
||||
4.67955m over30simulationseconds, maximum tilt6.1906°, no stability stop.
|
||||
This qualifies physical contact for that start, not AI navigation or the actual
|
||||
owner's vehicle. Source metric calibration has not been independently surveyed.
|
||||
|
||||
The new authenticated `/worker/worlds` endpoint admits metadata from the current
|
||||
registered Worker instance. `register_paired_scene.py` validates real PLY bytes,
|
||||
count, both hashes and GLB structure, stages the pair on Worker and publishes
|
||||
only its descriptor. Repeated registration preserves operator-edited settings;
|
||||
changed immutable metadata is rejected. Core rejects source-file downloads for
|
||||
Worker-local worlds, and the Worker refuses a missing/changed local asset rather
|
||||
than requesting its large payload from the Mac. A paired collision manifest must
|
||||
match the admitted source, collider and transform. Existing upload worlds and
|
||||
model compositions remain supported.
|
||||
|
||||
Release `cdeff3dc45ac02f2` was installed2026-09-23T06:33:23.8998231Z
|
||||
(589verifiedfiles; archiveSHA
|
||||
`34b9b43fbdfaa59c53e35ddd6623ee3fe859e81d8ca90661273055c99ad88ab4`).
|
||||
Focused source tests passed before installation. Core8000 was updated through
|
||||
the canonical launch-agent workflow and passed health acceptance. The new world
|
||||
is `aiworld-bf03be7256514c7a819a6b9dc908ef78`, operator name `Riverside Path`.
|
||||
R26 is the first camera/AI test of this pair; physical qualification alone does
|
||||
not make it a completed autonomous route.
|
||||
|
||||
|
||||
### R26/R27: transaction deadline and moving route goal
|
||||
|
||||
R26 `airun-a5c7dcd4048b492199e7189d5c4e1fd0` moved on the paired scene,
|
||||
but failed after83.17simulationseconds. Its26k-point accumulated map took
|
||||
310–334ms to process; the HTTP observation transaction returned after300ms.
|
||||
121decisions therefore reported `waiting-for-plan`, perpetually abandoning
|
||||
each matching map just before it arrived. This was a coordination failure,
|
||||
not evidence that the road was blocked.
|
||||
|
||||
Release `ada7b6ecfc9879bb`, installed2026-09-23T06:50:55.3713014Z, raises
|
||||
that wait to600ms. The independent800ms camera deadman,500ms command deadman
|
||||
and full braking envelope are unchanged. A late result cannot be reused.
|
||||
The first150 R26 decisions yielded149 eligible replay observations:147 without
|
||||
navigation failure and2 footprint rejections,134 positive-speed commands.
|
||||
No last30 observation timed out. All23 native navigation scenarios passed.
|
||||
The public decision now distinguishes waiting for a plan from uncertain vision.
|
||||
|
||||
R27 `airun-94c3ba1ad14647708b852c8891bec427` had no `waiting-for-plan`
|
||||
results. It moved5.645m net,7.752m accumulated, but failed at80.13simulation
|
||||
seconds: the semantic local goal repeatedly moved ahead after an intermediate
|
||||
route waypoint had been missed. The route cursor remained at waypoint1.
|
||||
Movement alone is not route acceptance. The operator stream showed about17FPS;
|
||||
Worker rendering was roughly15–19FPS, with variable AI cadence.
|
||||
|
||||
The next candidate preserves the requested waypoint XY once at least three
|
||||
nearby semantic/range observations support it within25cm. It verifies the
|
||||
requested centre and both half-metre lateral edges in the current semantic
|
||||
image. CMU and the swept collision monitor still own path/command admission.
|
||||
An unobserved distant waypoint may use a local goal, but a newly selected goal
|
||||
must reduce remaining task distance. Clear road ahead cannot authorize driving
|
||||
away from a waypoint behind the rover. Regression tests cover fixed task
|
||||
coordinates, the observed close-goal blind strip, lost visual support, a missed
|
||||
waypoint and distant local progress. Thirty focused navigation/mission tests
|
||||
passed; the native navigation server and physical profile remain byte-identical
|
||||
to their qualified versions.
|
||||
|
||||
|
||||
R28 `airun-58202c67c5c947d1870f79fdc077bf16` used release
|
||||
`7a852d7e3e8b45ab` (installed06:55:49 UTC) and failed at97.98simulation
|
||||
seconds. It exposed a remaining camera-memory defect: an exact, previously
|
||||
observed route goal left the image around0.95m away, but the old retention
|
||||
rule only started at0.8m. The goal was replaced by a forward candidate and
|
||||
then lost. On recorded frame40 the task was0.786m away while its projected
|
||||
centre was at image y711 (600-pixel height); frame50 returned no goal at0.456m.
|
||||
This was not proof of a physical obstacle or successful route completion.
|
||||
|
||||
Candidate `020cf047a3872217` uses the measured camera projection for this blind
|
||||
strip. It retains only an exact, previously observed task goal, within the
|
||||
existing3.5m horizon and while current forward semantic support remains. Any
|
||||
visible part classified non-drivable invalidates retention. Every command still
|
||||
passes live CMU terrain and swept-body checks. The replay of the first50 R28
|
||||
observations now retains the exact task goal on frame50; removing current
|
||||
semantic support still returns no goal. Thirty focused mission/navigation tests
|
||||
passed again. Worker evidence is `qualification-observed-route-goal/result.json`.
|
||||
|
||||
|
||||
### R29: first accepted end-to-end route, with a latency limitation
|
||||
|
||||
Release `020cf047a3872217` was installed2026-09-23T07:01:15.5693574Z;
|
||||
589files verified, archive SHA
|
||||
`38f806b1f2dfb226ac9b79faf8d63ae984c305c712c1d785481d47b56ac458b4`.
|
||||
R29 `airun-1aa8d69367224be6b67eb6bfbe482c9d` reached all three Riverside
|
||||
waypoints in order and completed with `goal-reached`, not the duration limit.
|
||||
There were156 road decisions and11 latched goal-reached decisions, no recovery
|
||||
attempts. Accumulated travel4.7047m, net displacement4.6249m; goal latched at61.7s,
|
||||
last physics report63.9667s. Final centre distance0.3672m is within the unchanged
|
||||
0.4m arrival radius. All sampled applied commands after goal were zero; final
|
||||
measured speed0.00198m/s. Maximum chassis tilt6.158°.
|
||||
|
||||
This establishes one working closed-loop, five-metre authored route on the
|
||||
paired scene. The streamed view is a park with paved paths, grass, trees and a
|
||||
bench; it is not dirt-road/off-road acceptance. Source metric scale has not
|
||||
been independently surveyed, and Forest/Bamboo remain unqualified. No dynamic
|
||||
person/animal scenarios have been accepted. No real vehicle or VESC was driven.
|
||||
|
||||
Operator video was visually verified at15–17FPS; median Worker rendering16.85FPS,
|
||||
median telemetry AI cadence2.245decisions/s. The camera deadman held motion in
|
||||
109 of216 sampled reports. Median reported age of the latest completed frame
|
||||
was859ms (max1625ms); stale commands were stopped, not admitted. Thus the route
|
||||
is functional but sustained smooth real-time motion is not yet accepted.
|
||||
Per moving decision: CMU median304.5ms/p95515ms, RF-DETR63/141ms,
|
||||
SegFormer47/141ms (the two vision models run in parallel), full inference414/625ms,
|
||||
pre-inference wait94/203ms. Raw detailed timing and stop samples remain on Worker.
|
||||
|
||||
The exact models continue through the shared composition graph. No new weights,
|
||||
paid services or Mac-side simulation were used. The native hazard qualification
|
||||
remains23/23 on the byte-identical navigation server and physical profile;
|
||||
there are30 focused passing tests for the changed mission/goal behavior.
|
||||
|
||||
|
||||
A bounded CPU replay profiled130 accumulated maps (last28,258points).
|
||||
Terrain normalization consumed27.124s cumulatively under profiling. Pairwise
|
||||
NumPy norms consumed9.035s cumulatively. A private candidate replaces the
|
||||
N×N×2 distance temporary with separate X/Y differences and the same
|
||||
sum-and-square-root arithmetic. It changes no radius, step, slope, memory,
|
||||
command or deadline threshold. The candidate is not admitted until comparison
|
||||
of the complete normalized arrays and correction counts on the same live-source
|
||||
maps agrees and the native hazard scenarios pass.
|
||||
|
||||
|
||||
The paired A/B replay compared130 complete normalized maps and correction counts:
|
||||
all were exactly equal. On the last40 dense maps, median old340.253ms versus
|
||||
candidate156.618ms; maximum456.917ms versus191.607ms. Comparison uses the same
|
||||
container, observations, source ordering and cache policy. Candidate moved to
|
||||
source only after this equivalence check;20 navigation regressions then passed.
|
||||
Evidence: `qualification-route-latency/comparison.json` and both replay journals.
|
||||
|
||||
|
||||
### R30: installed optimization and final acceptance
|
||||
|
||||
All23 native hazard scenarios passed with the optimized source. Release
|
||||
`0d4c0a73bbbe2066` was installed2026-09-23T07:34:31.4941743Z after589-file
|
||||
verification; archiveSHA
|
||||
`ea485c2b292b84bfd8f6bbf5aa0ead501915ac4d7fa352b803a72f8ad8d9a80f`.
|
||||
R30 `airun-e15bae285fdf493e9c0507e4692c5628` reached all three waypoints
|
||||
without recovery.122road decisions and11 latched goal-reached decisions.
|
||||
Travel4.67475m, net4.67162m, final target distance0.3182m (arrival radius0.4m).
|
||||
The goal observation was captured at30.5167simulationseconds; completion was
|
||||
reported at32.6667s after the settling interval. First telemetry with zero applied
|
||||
speed arrived62ms after the goal decision completed. All sampled commands after
|
||||
that completion plus100ms were zero; final measured speed0.00145m/s. An earlier
|
||||
telemetry sample still contains the preceding command while the goal observation
|
||||
is in inference, so capture time must not be called actuation/latch time.
|
||||
Maximum tilt6.1195°.
|
||||
|
||||
Full inference median234ms/p95359ms/max391ms. CMU140/234/266ms;
|
||||
RF-DETR62/141/188ms; SegFormer47/141/172ms. Median pre-inference wait94ms.
|
||||
Median latest-result frame age531ms, max875ms. The unchanged camera deadman held
|
||||
3 of110 sampled telemetry reports (R29:109/216). Median Worker rendering16.54FPS,
|
||||
AI3.774decisions/s. The operator receives video and compact state only; no heavy
|
||||
source or sensor map is transmitted to drive this loop. Real-world end-to-end
|
||||
network latency is not inferred from these Worker-local timing figures.
|
||||
|
||||
Core8000 health and registered Worker availability passed after completion,
|
||||
with no active run. Docker baseline comparison at2026-09-23T07:37:12Z found
|
||||
all21 original containers,104 image identities and9 volumes present; no changes
|
||||
to compared names/images/restart policies/mounts/memory/GPU/port configurations.
|
||||
No temporary qualification containers or owned realtime episode processes
|
||||
remained. The temporary QA browser tab was closed; the canonical Core service
|
||||
remained running. No git stage, commit or push was performed.
|
||||
|
||||
Remaining acceptance scope: correct admitted starts/geometry for Forest and
|
||||
Bamboo, actual dirt/natural terrain routes, dynamic participants, and calibration
|
||||
against the owner's physical rover. This positive park route and23 synthetic
|
||||
navigation cases do not establish arbitrary off-road autonomy. The separate
|
||||
flat-ground pivot threshold test remains failed as recorded above; it was not
|
||||
silently relaxed by the performance change.
|
||||
|
||||
Ops reporting could not be updated in this continuation: agent instructions
|
||||
were available, but two direct project-list calls timed out after60s. No card was
|
||||
marked complete; this audit retains the full evidence and limitations locally.
|
||||
|
||||
|
||||
Closed-evidence index:40 sessions,8,243files,1,158,280,493bytes on Worker.
|
||||
`state/continuation-evidence-index-20260923.json` SHA-256
|
||||
`2a2a438646656db920cb44e890ceaa2591241d289659c1c2324fd9e173be0464`.
|
||||
Each session manifest records UTC/monotonic sealing time and raw-file hashes;
|
||||
sealing time is explicitly distinct from experiment acquisition time. Raw
|
||||
images, maps, logs and original assets remain private on Worker.
|
||||
@@ -0,0 +1,126 @@
|
||||
# Worker simulation: continuous actuation and complete dataset task
|
||||
|
||||
Owner request: explain and remove intermittent motion, maintain slow continuous
|
||||
travel between inference results, and qualify a complete scene task rather than
|
||||
claiming navigation from a short straight drive. Physical VESC control remains
|
||||
out of scope. Simulation, rendering, inference, sensor archives and physics
|
||||
telemetry remain on Worker006; Core8000 receives video and compact telemetry.
|
||||
|
||||
## Findings
|
||||
|
||||
The existing `LatestInference` already held the most recent valid decision;
|
||||
ordinary pending inference did not force zero. The pre-physics observer pose
|
||||
was used to render a post-physics rover, and displayed speed divided a prior
|
||||
physics displacement by unrelated render wall intervals. This exaggerated
|
||||
apparent speed variation. Native physics measurements are now authoritative.
|
||||
|
||||
After fixing that sampling mismatch, run `airun-a1f4bff97e284b2a89c81eee261407bb`
|
||||
revealed ten actual motion-to-zero transitions caused by camera-age protection.
|
||||
Heavy accumulated terrain processing, plus capture/model latency, exceeded the
|
||||
unchanged 800 ms frame budget. Ignoring those stops would hide a real timing
|
||||
failure. No inference exceptions occurred in this run. An earlier operator run
|
||||
had transient HTTP disconnections; error records now include private stack
|
||||
traces so any recurrence can be traced to the actual local provider.
|
||||
|
||||
## Implementation
|
||||
|
||||
- Native physics pre-step callback evaluates freshness and applies the latest
|
||||
valid command at 60 Hz. Wheel-surface acceleration is limited to 0.2 m/s²;
|
||||
both sides scale together, preserving requested curvature. Reductions and
|
||||
safety stops bypass the acceleration envelope. No additional braking delay.
|
||||
- Physics post-step updates the rover camera and observer before rendering.
|
||||
RGB, raycast origins, pose and camera calibration share the resulting pose.
|
||||
Speed is read from the articulation velocity, not render-frame differences.
|
||||
- Callback failures stop the run; pause telemetry reports zero applied command.
|
||||
Worker retains `physics-motion.jsonl` at physics frequency and an explicit
|
||||
simulation-only motion-control profile.
|
||||
- The terrain connectedness/close-pair hazard loop has a compiled C ABI helper.
|
||||
Plane fitting, neighborhoods, hazard thresholds, path planning, detectors and
|
||||
segmenters remain unchanged. Strict floating-point compilation avoids fused
|
||||
operations/fast-math. NumPy remains the portable reference implementation.
|
||||
A separate Docker image extends the pinned rectangular CMU image; model
|
||||
profiles and original images/containers are preserved.
|
||||
- Paired full-scene collision assets no longer inherit the generated 30 m
|
||||
tile admission bounds. Source, collider and calibration identities remain
|
||||
checked; physical start support/clearance stays mandatory. The first full-task
|
||||
attempt was rejected before starting Isaac by this incorrect tile check.
|
||||
- Mission memory retains the last observed waypoint when a frame rejects it,
|
||||
while returning no current goal/zero motion for that rejected observation.
|
||||
Revalidation on the next frame can recover the exact goal in the camera
|
||||
blind strip. The same causal goal survives a pause of the frozen world;
|
||||
new episodes, waypoint advancement and bounded recovery still reset it.
|
||||
- Shared composition identity includes the numerical helper source and image.
|
||||
No parallel model constructor or device-control path was introduced.
|
||||
|
||||
## Numeric qualification
|
||||
|
||||
The numerical/navigation image passed all 23 existing hazard scenarios.
|
||||
418 float32/float64 cases, including exact 12 cm adjacency and 10.01 cm height
|
||||
jump boundaries, matched the NumPy reference. All costs/counts matched on 130
|
||||
real observed maps. Dense-map median normalization: 168.6 -> 116.1 ms (max
|
||||
200.5 -> 150.4 ms). This comparison isolates the numeric stage, not end-to-end
|
||||
AI latency. Spatial-index and cropped-window alternatives did not improve the
|
||||
measured workload and are not shipped.
|
||||
|
||||
## Mission authoring
|
||||
|
||||
The dataset contains 100 start/goal tasks and a Detour navmesh, but no saved
|
||||
waypoint trajectories. An isolated Worker-only tool uses packaged Detour to
|
||||
extract complete routes. The original episode 3 route is 16.70 m including
|
||||
triangle crossings; its last corner fails the current rover's mesh support
|
||||
checks. It is not represented as a successfully traversable route.
|
||||
|
||||
Episode 97 is a complete 11.03 m source route (10.94 m source geodesic metadata).
|
||||
Its 53 sampled footprint checks passed: supported ground, <=20-degree authoring
|
||||
slope, <=7.5 cm plane residual, no triangle crossing the occupied body prism
|
||||
above the qualified step. Intermediate mission points occur every 2 m, with
|
||||
the original endpoint preserved. These are preparation checks, not proof that
|
||||
perception, control or physical contact can complete the mission. The live
|
||||
mission retains its existing 0.4 m arrival tolerance; the source task's 0.2 m
|
||||
benchmark radius is not claimed as benchmark acceptance.
|
||||
|
||||
The first full live task (R33) stopped at waypoint 2 because a rejected RGB
|
||||
frame erased the observed goal. Replay of frames 101–140 verified that the
|
||||
corrected memory still rejects frames 101 and 113, and recovers on the next
|
||||
valid observation. It does not override the semantic gate.
|
||||
|
||||
## Live acceptance and receipts
|
||||
|
||||
Installed release `22c28daad98da60b` (597 verified files), archive SHA-256
|
||||
`d30c177939ee88e6f70581d41624635844198b4891ea5a43becf81dee0aa8527`.
|
||||
Navigation image: `sha256:698228d0d378b166ceaf299aa86ab95b5e74179837532f2378c036c7f7621dcc`.
|
||||
|
||||
R34 `airun-8443e76e7fe94b5694009965dc591680` completed all six waypoints:
|
||||
10.5925 m start-to-finish displacement, final endpoint error 0.3441 m, 86.2 s
|
||||
simulation time, no recovery attempts or inference exceptions. Median body
|
||||
speed while commanded >=0.14 m/s: 0.145 m/s (p95 0.169). Median inference
|
||||
125 ms, p95 219 ms; median AI rate 4.57 Hz; median render rate 17.12 FPS.
|
||||
The live operator WebRTC view was observed at 14–16 FPS. These are measured
|
||||
rates, not a claim of 30 FPS video or 60 Hz AI.
|
||||
|
||||
Five motion-to-zero events were caused by rejected visual surface observations.
|
||||
They remain conservative stops; perception temporal stability is not solved.
|
||||
There were no in-motion freshness interruptions: the sole moving-to-stale event
|
||||
spanned a 48.703 s operator pause. Startup and resume correctly wait for fresh
|
||||
observations. Pause held the world at 76.5 s, applied command zero and AI rate
|
||||
zero; continuing retained the mission and reached the endpoint. The operator
|
||||
interface showed completed state and connected Worker afterward.
|
||||
|
||||
44 focused unit/lifecycle/composition tests passed; numerical and 23 native
|
||||
navigation hazard gates are recorded above. Original Docker inventory at this
|
||||
turn's baseline: 21 containers with unchanged Name/Config/HostConfig, 110 image
|
||||
identities retained, 9 volumes retained. No temporary qualification containers
|
||||
or own realtime simulator processes remain. The discarded SciPy candidate image
|
||||
created by this experiment was removed. Core8000 and Worker registration were
|
||||
healthy and idle at handoff; the temporary browser viewer was closed.
|
||||
|
||||
Private receipt `state/continuous-motion-evidence-20260923.json` covers seven
|
||||
closed sessions, 3,961 files and 126,985,705 bytes. Receipt SHA-256:
|
||||
`5c1d0bb5f081cb74d440c43cdaf4d41a8e82e488a5050834a9e727827752007b`.
|
||||
Source journals, failures and comparisons are retained; no older sealed outputs
|
||||
were overwritten. The direct Ops instruction MCP timed out after 60 s, so this
|
||||
engineering report was saved locally and the Ops card was not updated.
|
||||
|
||||
Acceptance is limited to this complete paved park task. The original 16.7 m
|
||||
route, Forest/Bamboo, whole-location coverage, dynamic actor encounters and
|
||||
physical vehicle load/braking calibration are not established by this run.
|
||||
@@ -0,0 +1,327 @@
|
||||
# AI-полигон на Worker 006
|
||||
|
||||
Актуальная схема после миграции 21.09.2026: Worker исполняет мир, физику,
|
||||
камеры, AI и команды виртуального ровера. Mission Core на Mac принимает видео,
|
||||
компактную телеметрию и передаёт команды оператора. В AI-профиле нет локального
|
||||
3D-движка, загрузки PLY в браузер или передачи RGB через Mac для inference.
|
||||
LCC Gaussian Mirror и AI Inference остаются отдельными профилями.
|
||||
|
||||
## Установка и постоянный запуск
|
||||
|
||||
- Единственный Core: `http://127.0.0.1:8000`.
|
||||
- Worker: существующий Windows / RTX 4090 / Docker Desktop, SSH `mission-gpu`.
|
||||
- Native Isaac 6.1.0: `D:\NDC_MISSIONCORE\runtime\simulation\isaac-sim-6.1.0`.
|
||||
- Служба: Windows Scheduled Task `ndc-ai-polygon-worker`, запускается при входе
|
||||
текущего пользователя и восстанавливается после аварийного выхода. Это запуск
|
||||
**при пользовательском входе**, не headless-запуск до входа в Windows.
|
||||
- Управление использует существующий постоянный reverse tunnel:
|
||||
Worker `127.0.0.1:18080` → Core `127.0.0.1:8000`. Старый foreground launcher
|
||||
`start_worker.py` и дополнительный туннель 18081 больше не нужны.
|
||||
- Поток: официальный NVIDIA Omniverse Web SDK 6.7.0, native livestream Isaac,
|
||||
1280×720, запрос 30 FPS. TCP49100 / UDP47998 идут напрямую по Tailscale;
|
||||
Windows Firewall разрешает только текущий приватный адрес операторского Mac.
|
||||
Публичного доступа нет. Сам Isaac endpoint не предоставляет pairing/auth:
|
||||
доверенная граница здесь — Tailscale и ограничение firewall. Один viewer.
|
||||
|
||||
`build_bundle.py --output <private-directory>` создаёт архив и манифест хешей.
|
||||
Доставить их в `simulation/releases`, проверить SHA-256 архива и каждого файла,
|
||||
распаковать в новый `ai-polygon-<16-hex-release>`. Из SSH-сеанса с приватного
|
||||
операторского адреса выполнить поставляемый установщик:
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\simulation\ai-polygon\Install-RealtimeWorker.ps1 -Release <16-hex-release>
|
||||
```
|
||||
|
||||
Установщик отказывается менять службу при `state/active.json`. Он сохраняет
|
||||
исходные Windows Kit Block rules в `private/stream-firewall-backup.json`,
|
||||
ограничивает исключение двумя портами и одним операторским адресом, оставляя
|
||||
остальные подключения заблокированными. Ошибка firewall откатывает изменения.
|
||||
Обновление выполняется только при отсутствии активного прогона; после него
|
||||
проверить регистрацию актуальных `runtime_sources` перед новым Start.
|
||||
|
||||
Откат: установить предыдущий проверенный release тем же установщиком. Удаление
|
||||
службы: его параметр `-Remove` при отсутствии активного прогона. Он также
|
||||
восстанавливает исходные Block rules и удаляет собственные исключения.
|
||||
|
||||
Isaac на новом Worker устанавливает `Prepare-IsaacRuntime.ps1`. Модельные
|
||||
пакеты предварительно готовятся штатным AI Inference workflow. При старте
|
||||
проверяются закреплённые images/checkpoints/runners/labels из
|
||||
`models.worker-006.json`; существующие профили не заменяются. Новый realtime
|
||||
ровер использует метрическую геометрию `rover_profile.py`, Jetbot не требуется.
|
||||
|
||||
Токен существует только в защищённых файлах: `ai-polygon/worker.token` текущего
|
||||
Core data directory и `simulation/private/worker.token` на Worker. Не выводить
|
||||
его и не передавать аргументом командной строки.
|
||||
|
||||
## Работа оператора
|
||||
|
||||
1. LAB → «Симуляции» → «AI-полигон» → «Доступные локации» → «Открыть».
|
||||
Выбрать настройки и состав AI, затем «Открыть симуляцию».
|
||||
Worker подготавливает выбранный мир; открывается настоящая удалённая сцена
|
||||
с состоянием «Сцена открыта · AI выключен».
|
||||
2. В «Старт и масштаб» задаются подготовка сцены и состав AI через общий
|
||||
конструктор модулей. «Запустить AI» поднимает три временных контейнера
|
||||
и включает локальные физику/камеру/inference. Пока модели не готовы,
|
||||
виртуальный привод получает нулевую команду.
|
||||
3. «За ровером», «Обзор», «Камера AI» переключают **камеру на Worker**.
|
||||
Камера AI в потоке показывает тот же ракурс; модели получают локальный
|
||||
несжатый RGB800×600 до операторского видеокодека.
|
||||
4. «Пауза» после подтверждения Worker останавливает физику и новые inference-
|
||||
запросы. Уже выполнявшийся запрос не может вернуть команду после паузы.
|
||||
Контейнеры остаются готовы к продолжению. После продолжения сбрасываются
|
||||
локальная визуальная цель и причинное состояние ROS-планировщика; требуется
|
||||
новое наблюдение. Номер точки маршрута и зафиксированный отказ сохраняются.
|
||||
5. «Завершить симуляцию» останавливает native runtime и удаляет только собственные
|
||||
временные контейнеры по точным ID. Терминальный статус появляется после
|
||||
подтверждения освобождения ресурсов.
|
||||
6. Круглая стрелка возвращает к локациям и отсоединяет видео. **Сам прогон
|
||||
продолжает работать на Worker**. Повторное «Открыть» присоединяет тот же run.
|
||||
Для завершения нужен отдельный явный Stop. Развёрнутый viewer сохраняет
|
||||
управление; Escape возвращает обычный размер.
|
||||
|
||||
Частоты разделены: «Видео» — реально декодируемые кадры браузера; «Камера» —
|
||||
кадры сенсора, переданные очереди AI; «AI» — завершённые решения; «Симуляция» —
|
||||
отношение физического времени к реальному. 30 FPS видео не означают AI30Hz.
|
||||
Интерфейс также показывает inference и возраст кадра. Очередь хранит только
|
||||
последний кадр. При возрасте наблюдения более800мс или готовой команды более500мс привод получает
|
||||
ноль, но физический мир продолжает идти. Горизонт проверки корпуса включает те же
|
||||
800мс, запас500мс и торможение; эти пределы нельзя менять независимо.
|
||||
|
||||
## Жизненный цикл и архив
|
||||
|
||||
Один coordinator владеет episode. Windows Job Object завершает его native
|
||||
потомков при аварийном выходе coordinator. Сведения об exact container IDs
|
||||
сохраняются до ожидания готовности моделей. После перезапуска coordinator
|
||||
сверяет владельца, очищает собственные остатки и подтверждает завершение Core;
|
||||
старое движение не воспроизводится заново.
|
||||
|
||||
Потеря Core/viewer не блокирует физический tick. При потере управляющей связи
|
||||
Worker продолжает **ограниченный по времени лабораторный прогон** по последней
|
||||
команде; локальный watchdog inference остаётся активен. UI показывает отсутствие
|
||||
связи, а Core удерживает reservation до явного finish. После reconnect возвращается
|
||||
тот же run, без повторного Start. Stop без связи не считается подтверждённым.
|
||||
Стандартная длительность — 30 минут, API допускает 10 секунд–2 часа. Это политика
|
||||
только виртуального полигона, не политика физического аппарата.
|
||||
|
||||
Журналы хранятся на Worker: `simulation/state/<run_id>/`:
|
||||
|
||||
- `run.json`, `robot-profile.json`, `motion.jsonl`, `result.json`, `worker-result.json`;
|
||||
- `camera/decisions.jsonl`: monotonic и simulation timestamps, решения, boxes,
|
||||
ссылки и SHA-256 сохранённых кадров;
|
||||
- `camera/*.jpg`: кадры, использованные для решений, JPEG quality90. Это архивные
|
||||
копии, не lossless RGB. Inference получает исходный массив до JPEG-кодирования.
|
||||
- `composition.json`: точная композиция, контракты и идентичности модулей;
|
||||
- `camera/*.labels.png`, `*.surface.png`, `*.range.npz`: исходная таксономия модели,
|
||||
кандидаты поверхности, наблюдённый лидар и калибровка камеры;
|
||||
- `terrain.json`, `initial-contact.json`: идентичность collision proxy и размещение;
|
||||
- `local-state.sqlite3`: оперативный IPC coordinator/Isaac, WAL, не архив кадров.
|
||||
|
||||
Core получает только последний ограниченный snapshot, команды и итог. Полного
|
||||
автоматического переноса архива на Mac в этом этапе нет. Прежний lockstep-архив
|
||||
остаётся историческим и не является источником текущего видео.
|
||||
|
||||
## Миры и границы проверки
|
||||
|
||||
Forest Scan (draftmode, CC BY4.0): 2 142 439 splats, 505 617 082 bytes.
|
||||
Bamboo Trail (luckysplat, CC BY4.0): LOD0, 5 818 957 splats, 325 861 955 bytes.
|
||||
Оба PLY скачаны, проверены и кэшируются на Worker по SHA-256. Открытие не
|
||||
пересылает их повторно при совпавшем кэше. Импорт дополнительных авторизованных
|
||||
PLY остаётся отдельной операцией; author/license/source URL сохраняются.
|
||||
|
||||
Ровер имеет явный footprint1×1м и независимые левый/правый приводы. Радиус колёс
|
||||
0.25м, база0.5м, колея0.9м, масса24кг и коэффициенты трения — лабораторные
|
||||
допущения, не калибровка настоящего аппарата. Масштаб Gaussian-сцен пока не
|
||||
подтверждён измеренной опорой. Скрытая плоскость заменена collision mesh,
|
||||
полученным SplatTransform3.4.0: voxel0.06м, opacity0.25, floor-fill0.3м.
|
||||
Загрузка сверяет источник, преобразование, охват тайла и SHA-256 меша.
|
||||
Старт проверяет поддержку footprint, локальную плоскость и остаточную неровность.
|
||||
Изменение камеры/старта внутри готового тайла не пересобирает коллизии.
|
||||
|
||||
Gaussian collision proxy не имеет семантики мягкой растительности: часть травы
|
||||
и листвы может попасть в геометрию. Это известное ограничение, а не проверенная
|
||||
модель деформируемой травы. Полное прохождение тропы, реальный тормозной путь,
|
||||
скользкий грунт и динамические люди/животные требуют отдельной сценарной приёмки.
|
||||
|
||||
## Композиция восприятия и движения
|
||||
|
||||
Используется тот же `ModuleRegistry/ModuleSpec/CompositionSpec`, что в AI Inference,
|
||||
с режимом `worker-local-simulation` и изолированным пространством портов pinhole.
|
||||
Контракты recorded K1 не переиспользуются под другим смыслом. Выбор хранит
|
||||
module id, SHA-256 и параметры; произвольный код в выборе не принимается.
|
||||
|
||||
По умолчанию: NVIDIA SegFormer B2 ADE150 → кандидаты грунта/камня/дороги,
|
||||
RF-DETR → люди/животные, «Маршрут · контроль продвижения» → локальная цель
|
||||
и состояние миссии, CMU terrain_analysis/localPlanner/pathFollower → путь
|
||||
и скорость/поворот. DDRNet GOOSE64 остаётся доступной альтернативой; его прежний
|
||||
image/checkpoint и профили не меняются. Два независимых провайдера исполняются
|
||||
параллельно, навигация — после их результата. Исходные class IDs сохраняются.
|
||||
SegFormer использует официальный pinned checkpoint и лицензию NVIDIA для
|
||||
research/evaluation; этот профиль предназначен для лабораторных испытаний.
|
||||
|
||||
Виртуальный лидар: 15 вертикальных колец ×144 азимута, дальность8м, первый
|
||||
физический контакт, наблюдения около5Гц. Дополнительные кольца −80/−75/−70°
|
||||
наблюдают ближний грунт перед корпусом. Меш/карта мира не передаются AI.
|
||||
Необязательные операторские точки XY задают задачу, но не разрешённую траекторию.
|
||||
Семантический waypoint выбирается по RGB и диапазону,
|
||||
готовый CMU-планировщик проверяет рельеф. Дополнительный монитор проверяет
|
||||
квадратный корпус на дуге текущей команды с горизонтом watchdog и торможения.
|
||||
Пределы лабораторного профиля: ступень0.10м, уклон25°, аварийный наклон30°.
|
||||
Ступени0.15м и выше не прошли отдельную физическую проверку. Нулевая команда
|
||||
удерживает физические колёсные шарниры приводом положения, без фиксации корпуса
|
||||
или телепортации. На ровных уклонах10–25° проверено удержание после остановки.
|
||||
Параметры solver/contact и привода фиксируются в `robot-profile.json`.
|
||||
Колёса используют штатную выпуклую аппроксимацию цилиндров PhysX:
|
||||
`SETTING_COLLISION_APPROXIMATE_CYLINDERS=true`. Точная форма цилиндра вызывала
|
||||
зависание контакта с Forest; размеры колёс сохранены. Для новой формы повторены
|
||||
проверки прямого/обратного движения, торможения, ступеней и уклонов.
|
||||
В pinned localPlanner image добавлена проверка метрового прямоугольного корпуса
|
||||
с запасом5см при выборе примитива и начального поворота. Если наблюдаемая точка
|
||||
уже находится в запасе, допускается только сохранение или увеличение расстояния
|
||||
от неё. Пересечение самого корпуса запрещено; отдельный монитор команды сохранён.
|
||||
Это объявленное изменение upstream C++, воспроизводимое через
|
||||
`navigation/Prepare-RectangleNavigation.ps1`, а не неизменённый CMU бинарник.
|
||||
`terrain_costs.py` нормализует ложную высоту препятствия только для достаточно
|
||||
наблюдённого гладкого уклона2–25°. Резкие ступени и неподтверждённые поверхности
|
||||
остаются заблокированными; геометрия сцены не меняется.
|
||||
Оценка грунта CMU использует штатный `quantileZ=0.25`. Экспериментальная медиана
|
||||
0.5 отклонена: стены искажали оценку опоры в узком коридоре. Штатная настройка
|
||||
прошла23 сценария, включая уступы12/15см и обрыв40см.
|
||||
CMU сохраняет наблюдённые точки ближе4м, пока они скрыты корпусом; исчезновение
|
||||
возврата не означает свободный путь. Это консервативная память статического
|
||||
рельефа; очистка следов динамических участников отдельно не квалифицирована.
|
||||
Наблюдения и решения должны быть свежими, иначе привод получает ноль.
|
||||
|
||||
Маршрут задаётся до открытия симуляции через существующую форму подготовки
|
||||
сцены (до32точек XY). Пустой маршрут оставляет режим видимой тропы. После8с без продвижения к цели хотя бы0.10м модуль поведения проверяет
|
||||
короткий отход назад по наблюдаемой опоре и выбирает другую цель. Отход ограничен
|
||||
6с и скоростью0.1м/с; CMU и проверка корпуса сохраняют право остановки. Максимум
|
||||
три попытки. Отход от цели не обновляет бюджет попыток. Это локальное восстановление,
|
||||
не готовый глобальный объезд. Достижение последней точки, исчерпание попыток или
|
||||
опасный наклон завершают прогон с явной причиной и освобождением ресурсов.
|
||||
Физическое время используется для контроля продвижения; пауза его не расходует.
|
||||
|
||||
Подготовка новых зависимостей выполняется версионированными
|
||||
`segformer/Prepare-Segformer.ps1`, `navigation/Prepare-Navigation.ps1`,
|
||||
`navigation/Prepare-RectangleNavigation.ps1`, `navigation/Prepare-Terrain.ps1`. Образы и checkpoints закреплены в
|
||||
`models.worker-006.json`. ROS-обмен остаётся внутри собственного контейнера;
|
||||
его Fast DDS профиль использует loopback UDP и не зависит от старых SHM-сегментов.
|
||||
|
||||
Core резервирует существующую AI Inference queue. Другие Gaussian GPU jobs
|
||||
пока не используют общий reservation: их нельзя запускать параллельно с этой
|
||||
симуляцией. Не запускать второй coordinator, не удалять markers вручную и не
|
||||
делать `docker system prune` или `compose down` чужих стеков.
|
||||
|
||||
Планировщик сокращает локальный путь шагом0.1м до минимальных0.2м, чтобы не
|
||||
пропускать короткие манёвры на изгибе тропы. Дистанция остановки follower0.08м
|
||||
относится к этому локальному отрезку; достижение маршрутной точки и полный
|
||||
тормозной контур проверяются независимо. Простое снижение минимальной длины
|
||||
при штатном шаге0.5м не включает эти короткие кандидаты.
|
||||
|
||||
Наблюдённые низкие точки уже внутри корпуса (отступ5см от краёв) сверяются с
|
||||
измеренной позой и высотой опоры. Полоса±8см не расширяет предел ступени10см.
|
||||
Точки впереди, высокие препятствия и провалы сохраняются; исходная память CMU
|
||||
не изменяется. Поза должна принадлежать той же транзакции наблюдения, с допуском
|
||||
округления ROS не более1000нс. Число коррекций записывается в журнал решений.
|
||||
|
||||
Последний установленный release `0d4c0a73bbbe2066` (2026-09-23 07:34:31 UTC); предыдущие версии сохранены
|
||||
для воспроизводимости. Версии до `0ad2b4bf9b3dcfa6` используют неверное совпадение визуальной
|
||||
и физической сцены; откат к ним не является рабочим режимом для Gaussian-навигации. При изменении Python registry композиции нужно
|
||||
согласованно перезапустить Core8000 перед новым прогоном, затем проверить
|
||||
health, Worker registration и module identities. Не выполнять перезапуск
|
||||
во время активных операций других операторских задач.
|
||||
|
||||
Текущие проверки и ограничения (результаты каждой локации отдельно):
|
||||
[Route recovery audit](../audits/2026-09-22-ai-polygon-route-recovery.md).
|
||||
Исходная интеграция композиции и UI:
|
||||
[Composed terrain navigation audit](../audits/2026-09-22-ai-polygon-composed-terrain-navigation.md).
|
||||
|
||||
Предыдущие результаты миграции:
|
||||
[Realtime audit](../audits/2026-09-21-ai-polygon-realtime-placement.md).
|
||||
Ранние lockstep-измерения остаются в integration/operator-revision audits и не
|
||||
должны трактоваться как текущая архитектура.
|
||||
|
||||
### Совпадение Gaussian-изображения и коллизий
|
||||
|
||||
SplatTransform 3.4.0 присваивает входному PLY поворот Rz(180). Подготовка сначала
|
||||
отменяет его, применяет пользовательское XYZ-вращение и масштаб, затем Rx(-90)
|
||||
для glTF. Загрузка физики выполняет обратный переход `(x,y,z) → (x,-z,y)`.
|
||||
Версионный `qualify_terrain_coordinates.py` проверяет реальный генератор на
|
||||
контрольном объекте с известными координатами.
|
||||
|
||||
Только известный старый генератор и точная ориентация `[-90,0,180]` допускают
|
||||
миграцию готового меша поворотом на180° по горизонтали. Это точное преобразование
|
||||
всех вершин, без изменения препятствий; оригинал остаётся неизменным. SHA обоих
|
||||
мешей и исходный manifest сохраняются в `coordinate-correction.json`. Область
|
||||
подготовленной геометрии также переносится в правильные координаты. Прежние
|
||||
стартовые положения и маршруты необходимо проверить заново.
|
||||
|
||||
### Готовая пара Gaussian и collision mesh на Worker
|
||||
|
||||
`register_paired_scene.py` принимает `--root`, `--source`, `--collider` и
|
||||
`--descriptor` в подготовленном Python Worker. Descriptor соответствует
|
||||
`WorkerWorldCreate`: происхождение и лицензия, размер, SHA-256 обоих файлов,
|
||||
число splats и настройки сцены. После проверки реальных байтов инструмент
|
||||
сохраняет исходник в `state/worlds/<sha>.ply`, collision manifest — в
|
||||
`assets/prepared-worlds/<sha>/terrain.json`. В Core передаётся только описание.
|
||||
Регистрация требует токен и текущий Worker-Instance. В этой ветке нет загрузки
|
||||
больших файлов через операторскую машину; повреждённый локальный исходник
|
||||
приводит к ошибке, а не к сетевому fallback.
|
||||
|
||||
Перед стартом проверяется весь метровый объём, включая узкие стволы между
|
||||
лучами определения грунта. Старые стартовые точки Forest/Bamboo эту проверку
|
||||
не проходят. Не отключать проверку и не повышать предел ступени ради запуска.
|
||||
Riverside Path использует готовую пару Habitat-GS scene62; её физическая
|
||||
проверка прошла4.68м. Полный маршрут R29 завершён по трём точкам с остановкой
|
||||
у цели; ограничения и дальнейшие замеры зафиксированы в route audit.
|
||||
|
||||
|
||||
Ожидание одной транзакции CMU —600мс: накопленная карта реальной сцены
|
||||
может обрабатываться дольше300мс. Независимые deadman800мс для камеры и500мс
|
||||
для команды сохраняются; это не разрешение исполнять просроченные результаты.
|
||||
|
||||
Когда заданная маршрутная точка подтверждена семантическими и дальномерными
|
||||
наблюдениями, локальная цель сохраняет её XY. Уже наблюдённая точка может
|
||||
войти в слепую полосу камеры; её граница определяется реальной проекцией,
|
||||
а не фиксированной дистанцией. Текущая видимая поверхность, причинная карта
|
||||
CMU и контроль полного корпуса продолжают ограничивать команды. Новая локальная
|
||||
цель не должна уводить ровер дальше от пропущенной маршрутной точки.
|
||||
|
||||
|
||||
Предыдущая проверка: R30 прошёл три точки Riverside Path и остановился у цели,
|
||||
4.675м за32.67с. Медиана полного inference234мс, AI3.77решения/с,
|
||||
рендер16.54FPS. Оптимизация расчёта расстояний побитно совпала на130 картах,
|
||||
все23 проверки опасных сценариев прошли; deadman и пределы проходимости сохранены.
|
||||
Это подтверждение данного паркового маршрута, а не Forest/Bamboo или бездорожья.
|
||||
|
||||
|
||||
### Непрерывное управление и полное задание — 23 сентября
|
||||
|
||||
Текущая сборка `22c28daad98da60b`; подробные изменения и receipts:
|
||||
[Continuous motion audit](../audits/2026-09-23-ai-polygon-continuous-motion.md).
|
||||
|
||||
Привод обновляется в native physics pre-step на 60 Гц, с ограничением
|
||||
нарастания скорости поверхности колёс 0.2 м/с². Защитное снижение/остановка
|
||||
не задерживаются. Камера и калибровка обновляются после физики; скорость берётся
|
||||
из articulation velocity. `physics-motion.jsonl` и `motion-control.json`
|
||||
остаются на Worker. Пауза останавливает физику и inference; продолжение требует
|
||||
свежих наблюдений и сохраняет уже наблюдённую маршрутную цель.
|
||||
|
||||
Для CPU-ускорения существующего анализа связности используется отдельный образ
|
||||
`ndc-ai-polygon-cmu:connectivity-v1`, image digest
|
||||
`sha256:698228d0d378b166ceaf299aa86ab95b5e74179837532f2378c036c7f7621dcc`.
|
||||
Подготовка — `navigation/Prepare-Connectivity.ps1` поверх проверенного
|
||||
`rectangle-v3`. Не подменять numerical thresholds, не включать fast-math.
|
||||
NumPy-эквивалентность и hazard qualification обязательны для новой сборки.
|
||||
|
||||
Полные paired-source коллайдеры допускают старт по всему исходному мешу;
|
||||
ограничение 30-метрового generated tile к ним не применяется. Hash/calibration
|
||||
и физическая проверка полной опоры/объёма сохраняются. `route_author` использует
|
||||
готовый Detour для чтения Habitat navmesh; маршрут задаёт миссию и не передаёт
|
||||
привилегированную геометрию в runtime inference.
|
||||
|
||||
Сейчас Riverside Path настроен на полное задание 97: шесть точек, путь около
|
||||
11 м. R34 достиг исходного конечного положения в допуске миссии 0.4 м
|
||||
(ошибка 0.344 м), перемещение 10.59 м за 86.2 с мира. Медиана inference125мс,
|
||||
AI4.57Гц, рендер17.12FPS. Пять кратких остановок из-за семантической
|
||||
неуверенности остаются; пауза/продолжение проверены. Это не подтверждение
|
||||
всей карты, исходного задания3, бездорожья или реального привода.
|
||||
Reference in New Issue
Block a user