scene_service.scene_graph.geometric_loop¶
Fast geometric relation loop.
Produces the one metric, robot-actionable relation geometry still owns under
the VLM-primary scene graph — reachable_by (a real 3D gripper→object
distance) — at a high rate so it reaches Pilot within ~1-2 s of an object
stabilizing, independent of (and far faster than) the LLM scene-graph builder.
Writes the geometric slice (nodes + edges) into SceneGraphStore; the
image-grounded builder fills the relational + semantic edges asynchronously.
Contact/containment (on_top_of/under/inside/contains) is no
longer computed here: the AABB tests misfired on full-volume boxes and
same-surface objects, so the image-grounded VLM owns those now. near is not
emitted as an edge either — proximity is served as a query
(get_object_context.nearby_objects).
Classes
|
High-rate geometric relation producer; owns the store's geometric slice. |
- class scene_service.scene_graph.geometric_loop.GeometricRelationLoop(registry, store: SceneGraphStore, *, hz: float | None = None, min_observations: int | None = None)[source]¶
Bases:
objectHigh-rate geometric relation producer; owns the store’s geometric slice.
Each tick recomputes contact/containment + reachable_by from the registry and runs the result through a debounce hysteresis band so EMA pose jitter (object_registry alpha=0.3) does not flicker the graph, while keeping emission latency under ~1 s. Read path: callers use
SceneGraphStore.get_snapshot(); this loop only writes.