Files
NODEDC_MISSION_CORE/docs/audits/2026-09-22-ai-polygon-route-recovery.md
T

713 lines
50 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-полигон · привод, маршрут и проверка корпуса
Обновление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.