You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Scene currently assumes a perception-capable target even when a deployment only needs manually annotated rooms and robot pose. This blocks low-memory Jetson devices such as Orin Nano from using the deterministic parts of Scene.
Scene's camera transform path also has unclear precedence. The authoritative body geometry already comes from the robot URDF: Soma stores the complete URDF, and the robot-description primitive publishes /robot_description, /tf, and /tf_static. Scene should read TF first. The explicit robonix/primitive/camera/extrinsics capability should only be a compatibility fallback when the required TF is unavailable.
The old system/soma/sensor_extrinsics schema is not an intended future API and should be removed rather than implemented.
Current behavior
1. No genuinely lightweight Scene target
Providing explicit observations without RGB/depth prevents detector construction at runtime.
However, Jetson build/start still downloads or checks Torch, YOLO-World, MobileSAM, OpenCLIP, ConceptGraphs, Open3D/faiss, and related heavy dependencies.
Core features do not require these models: robot pose, room/annotation CRUD, map binding, room lookup, annotation-only scene graph output, and occupancy-backed goal_room are deterministic paths.
Object memory and LLM scene-graph enrichment are also enabled by default, so omitting camera observations alone is not a complete low-memory mode.
Relevant code at dev-next 8c2551ce:
system/scene/scripts/build.sh
system/scene/scripts/start_native.sh
system/scene/scene_service/service.py
system/scene/scene_service/ingest/__init__.py
system/scene/scene_service/state/__init__.py
2. Scene does not consistently use TF as the authoritative camera transform
Scene's RGB-D path can consume this contract and compose T(world <- base) @ T(base <- camera). It can also query tf2, but the precedence and validation are not strict enough.
Problems:
Scene does not consistently make tf2 the first source for the selected camera frame.
Scene does not validate the explicit transform parent/child frames against the selected RGB/depth frames.
Extrinsics readiness is not included in the metric-grounding status.
The Tiago camera fallback publishes once although the contract mentions recalibration updates.
Without camera_provider_id, RGB, depth, intrinsics, and extrinsics may be selected independently from different providers.
A flattened base-to-camera transform is not sufficient for articulated or arm-mounted cameras; current joint state plus the URDF/TF tree is required.
A hard-coded camera-height/axis fallback can silently produce incorrect object coordinates.
system/soma/sensor_extrinsics exists as unused schema only and duplicates the URDF/TF ownership model.
Problem
Scene currently assumes a perception-capable target even when a deployment only needs manually annotated rooms and robot pose. This blocks low-memory Jetson devices such as Orin Nano from using the deterministic parts of Scene.
Scene's camera transform path also has unclear precedence. The authoritative body geometry already comes from the robot URDF: Soma stores the complete URDF, and the robot-description primitive publishes
/robot_description,/tf, and/tf_static. Scene should read TF first. The explicitrobonix/primitive/camera/extrinsicscapability should only be a compatibility fallback when the required TF is unavailable.The old
system/soma/sensor_extrinsicsschema is not an intended future API and should be removed rather than implemented.Current behavior
1. No genuinely lightweight Scene target
goal_roomare deterministic paths.Relevant code at dev-next
8c2551ce:system/scene/scripts/build.shsystem/scene/scripts/start_native.shsystem/scene/scene_service/service.pysystem/scene/scene_service/ingest/__init__.pysystem/scene/scene_service/state/__init__.py2. Scene does not consistently use TF as the authoritative camera transform
The current explicit fallback contract is:
robonix/primitive/camera/extrinsicstopic_outgeometry_msgs/TransformStampedT(parent <- child), normallyT(base <- camera_optical)Scene's RGB-D path can consume this contract and compose
T(world <- base) @ T(base <- camera). It can also query tf2, but the precedence and validation are not strict enough.Problems:
camera_provider_id, RGB, depth, intrinsics, and extrinsics may be selected independently from different providers.system/soma/sensor_extrinsicsexists as unused schema only and duplicates the URDF/TF ownership model.Relevant code:
capabilities/primitive/camera/extrinsics.v1.tomlsystem/scene/scene_service/ingest/ros_subscribers.pysystem/scene/scene_service/ingest/perception_concept_graphs.pysystem/scene/scene_service/ingest/capabilities.pycapabilities/system/soma/sensor_extrinsics.v1.tomlcapabilities/lib/soma/msg/SensorExtrinsic.msgcapabilities/lib/soma/srv/GetSensorExtrinsics.srvProposed design
A. Add an explicit lightweight Scene profile
Provide a named
staticorcoretarget/profile that:get_robot_context, room lookup, and occupancy-backedgoal_room;Keep the current full perception target as the default for compatibility unless a separate migration decision is made.
B. Use a single transform ownership and fallback order
/robot_description,/tf, and/tf_static.robonix/primitive/camera/extrinsicsas an explicit compatibility fallback.system/soma/sensor_extrinsicscontract and IDL instead of implementing a duplicate extrinsics service.For the explicit camera fallback:
camera_provider_idwhen multiple camera providers match;Acceptance criteria
Lightweight profile
goal_roomworks when an occupancy grid is present and reports a clear unavailable/deferred state when it is not.Camera transform