17 KiB
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-256187ca07bea003a5717c63d04ea90b07f33cd033c0ebf44b4b89fce5070d6c8f3. Лицензия research/evaluation соответствует лабораторному применению; коммерческое применение этим отчётом не разрешается. - Существующий RF-DETR Large: обнаружение людей/животных. Изображение, checkpoint и остальные профили не заменялись.
- CMU
terrain_analysis / localPlanner / pathFollower, ROS2 Humble, upstream158e67b31b644ed1e8b06eb1d7f70e183cc62591: готовый анализ рельефа, поиск локального пути и команды скорости/поворота. 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, CMU autonomy stack, Omniverse WebRTC.