Decide: the pose contract — shape, units, site frame #7
Notifications
Due Date
No due date set.
Blocks
#14 Write the Session 1 spec (pose to splat rendering)
lars/splat-indoor-navigation
Reference: lars/splat-indoor-navigation#7
Reference in New Issue
Block a user
Question
Lock the interface that the positioning half produces and the rendering half consumes, so integrating them later is plumbing rather than redesign.
Settle:
{timestamp, position{x,y,z}, heading{yaw,pitch,roll}, confidence{positionM, headingDeg}}.Also worth deciding here: whether deck identity is part of position from the start or added later (see the map's fog).
Part of the wayfinder map #1.
Hard constraint on the
confidencefield — ARKit gives you almost nothing to fill it with.From the ARKit research pass:
trackingState(normal/limited/notAvailable) plus two documented reasons that matter indoors:.excessiveMotionand.insufficientFeatures("blank walls, low lighting" — i.e. a ship corridor).limitedtracking still returns a pose. Covering the camera or facing a blank bulkhead does not stopARCamera.transform; it silently degrades to inertial dead reckoning. Nothing in the API tells you the pose just got much worse.So
confidence.positionMcannot be read from the platform — it has to be modelled. The realistic inputs are: distance travelled since the last absolute fix (see #15: drift is 0.5–8% of distance), time inlimitedstate, and the tracking-state reason. That makes two fields worth adding to the contract:metresSinceLastFix(ortimeSinceLastFix) — the actual driver of positional uncertainty under VIO.trackingQuality— pass ARKit's state through rather than collapsing it into a number, so the renderer can distinguish "drifting slowly" from "flying blind".This matters more than usual because the display is a photorealistic render: a confidently-wrong pose produces a convincing image of the wrong place. The contract should make it impossible to render confidently without asserting a fix age.