187 lines
17 KiB
Markdown
187 lines
17 KiB
Markdown
# 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).
|