Files
NODEDC_MISSION_CORE/docs/audits/2026-09-23-ai-polygon-continuous-motion.md
T

127 lines
7.6 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.
# 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.