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