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

7.6 KiB
Raw Blame History

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.