Add XR camera picture-in-picture feedback - #6818
Conversation
Greptile SummaryAdds task-configured XR camera picture-in-picture feedback throughout the teleoperation stack.
Confidence Score: 4/5The PR appears safe to merge, with a non-blocking robustness gap when optional Scene UI runtime initialization fails after its modules import successfully. The core camera-output and rendering changes are internally consistent, but the two entrypoints currently allow a late PiP initialization exception to terminate the parent workflow rather than disabling the optional presentation layer. Files Needing Attention: source/isaaclab_teleop/isaaclab_teleop/camera_feed.py, scripts/environments/teleoperation/teleop_se3_agent.py, scripts/tools/record_demos.py Important Files Changed
Sequence DiagramsequenceDiagram
participant Task as Task configuration
participant Script as Teleop/record script
participant Env as Isaac Lab environment
participant Camera as Camera sensor
participant RTX as Isaac RTX renderer
participant PiP as Scene UI presenter
Task->>Script: XR feed names and layout
Script->>Script: Prepare and validate feed session
Script->>Env: Construct environment
Env->>Camera: Initialize selected cameras
Camera->>RTX: Create render product on output device
Script->>PiP: Bind feed session
loop Rendered frames
RTX->>Camera: Produce RGBA output
PiP->>Camera: Read persistent RGBA buffer
PiP->>PiP: Upload image and place panel
end
Reviews (1): Last reviewed commit: "Add XR camera picture-in-picture feedbac..." | Re-trigger Greptile |
There was a problem hiding this comment.
Isaac Lab Review Bot
The XR PiP design cleanly separates camera pixel-output placement from simulation state and adds render-product-local DLSS controls. Two fixes remain: the new README example uses a repository-unsupported invocation path, and the pre-6.1 Ray Reconstruction fallback only runs during PiP preparation even though reference task cameras enable Ray Reconstruction unconditionally.
- Design and architecture: The renderer boundary for output-device resolution and render-product-local settings is appropriate. However, compatibility handling for Isaac Sim versions before 6.1 is confined to
_XrCameraFeedSession.prepare(). Consequently, the same task cameras retain Ray Reconstruction in non-XR, disabled-PiP, and kitless paths, bypassing the stated ghosting fallback. Resolve the effective setting in the RTX renderer or another path shared by every camera consumer. - API: The public
XrCameraFeedCfgandXrCameraFeedLayoutCfgtypes are exported and integrated into the API and feature documentation. No unsupported public API removal or compatibility break was established. - Implementation: Camera state and image-output allocation paths, post-annotator render-product setting order, reset rebinding, and control reset latching were traced. Update the new README command from
./isaaclab.sh -ptouv run pythonper repository workflow rules, and ensure the pre-6.1 DLSS fallback also applies when reference cameras run outside an active PiP session.
Minor fixes needed. Posted 2 actionable findings inline.
Automated review; human maintainers own approval decisions.
Signed-off-by: Hougant Chen <hougantc@nvidia.com>
Move the pre-6.1 Ray Reconstruction fallback into the Isaac RTX renderer so every camera consumer gets compatible behavior. Enable camera extensions in the Pink IK test now that reference tasks include image observations. Align the documentation with supported invocation and error contracts. Signed-off-by: Hougant Chen <hougantc@nvidia.com>
db52ef3 to
6efecde
Compare
Description
Adds low-latency XR camera picture-in-picture (PiP) feedback to IsaacTeleop so teleoperators can see the same task-configured camera views that are captured in demonstration data.
The implementation:
IsaacTeleopCfg.xr_camera_feeds.teleop_se3_agent.pyandrecord_demos.py.cuda:0.MultiBackendRendererCfgfor the GR1T2 and G1 reference cameras so other renderer backends remain valid.Core changes are limited to two capabilities unavailable through existing public APIs: separating camera pixel output from the simulation device, and applying camera-local RTX settings when the renderer creates its render product. This keeps CPU physics and camera state on CPU while producing CUDA pixels without a readback, and avoids changing the XR headset renderer globally. Existing renderer behavior is preserved by default.
Canonical example:
Type of change
Screenshots
Quest 3 and IsaacTeleop Web Client acceptance was completed. A headset demonstration video was recorded separately and can be attached to the PR.
Validation
pre-commit run --all-filescuda:0Checklist
pre-commitchecks with./isaaclab.sh --formatsource/<pkg>/changelog.d/for every touched package (do not editCHANGELOG.rstor bumpextension.toml— CI handles that)CONTRIBUTORS.mdor my name already exists there