Files
NODEDC_MISSION_CORE/docs/audits/2026-09-22-ai-polygon-composed-terrain-navigation.md
T

187 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).