Repository navigation
Add kitless teleoperation and replay with SO101 support - #8788
hougantc-nvda wants to merge 4 commits into
Conversation
e933899 to
4d7c54f
Compare
fe8d8d2 to
8d56932
Compare
Signed-off-by: Hougant Chen <hougantc@nvidia.com>
8d56932 to
293a54c
Compare
293a54c to
bb8944d
Compare
|
@greptile Please review the latest changes in this PR. |
[High impact] The PR adds an optional kitless teleoperation path and changes shared renderer and runtime code. Fix replay reset ordering and Kit’s separate render-anchor updates before merging. FindingsSummaryAdds kitless OVXR teleoperation and MCAP replay, with SO101 CPU OvPhysX selection.
Diagram%%{init: {'theme': 'neutral'}}%%
flowchart LR
Input["Live tracking or MCAP"] --> Device["IsaacTeleopDevice"]
Device --> Env["Environment step"]
Env --> Publisher["Scene publisher"]
Publisher --> Stage["Borrowed OVStage"]
Stage --> Worker["Capture OVXR worker"]
Worker --> View["Headset view"]
Reviews (2) · Last reviewed commit: "Add live and recorded OVXR teleoperation..." · Reviewed by Greptile |
Signed-off-by: Hougant Chen <hougantc@nvidia.com>
bb8944d to
62a1200
Compare
| print("OVXR viewer requested shutdown before replay completed.") | ||
| stats.outcome = "incomplete" | ||
| break | ||
| action = _advance_replay_input(teleop_interface, presentation) |
There was a problem hiding this comment.
With a dynamic anchor, such as G1’s pelvis anchor, reset clears the pose used by input. If request_render() returns None, _ReplayPresentation.publish() keeps the reset pending, but the next loop iteration calls _advance_replay_input() before retrying it. Reading world_T_anchor then raises and ends the replay with a failure.
Retry the forced reset publication before advancing recorded input, as the live loop already does.
| settings = carb.settings.get_settings() | ||
| settings.set_float("/persistent/xr/render/nearPlane", self._xr_cfg.near_plane) | ||
| settings.set_string("/persistent/xr/anchorMode", "custom anchor") | ||
| settings.set_string("/xrstage/customAnchor", self._xr_render_anchor_path) |
There was a problem hiding this comment.
With anchor_prim_path and either render override set, Kit selects the separate render anchor, but each frame still updates only _xr_anchor_headset_path. The view therefore follows its parent’s raw motion instead of the tracking anchor’s fixed-height and rotation rules. Even the first update can put the two frames at different heights.
Update both anchors from the same filtered pose and preserve the render offset, as the OVXR path does.
Description
Review stack · 2/5: #8787 → #8788 → #8789 → #8790 → #8791
Review only this PR’s changes. The PRs target
main; the comparison isolates this layer from its predecessors.Connect live Capture tracking and recorded MCAP input to kitless simulation through the OVXR adapter from #8787. SO101 gains CPU OvPhysX selection and the current Capture home-transform, clutch and gripper integration.
isaaclab_teleop.entrypoints; existing script paths delegate to those package entrypoints. Task discovery, callable CLI argument restoration and exit status follow upstream dispatch.isaaclab_teleopowns control events, target-frame rebasing, input policy and session cleanup; task-specific action preparation remains with the task.--xrpath; kitless uses--ovxr.Shared fixes address empty CPU Warp arrays, Newton graph capture overlapping legacy-stream uploads, and simulation-context ownership after a failed asynchronous drain. Kit fixes defer native USD imports until runtime launch and keep headless XR updating without changing ordinary headless on-demand capture.
See the live/replay runtime guide.
Dependencies: compatible Isaac Capture OVXR packages and the provider upgrade in #8858. Native-provider defaults are unchanged.
Type of change
The public source-installation guide defines a separate optional XR selection without changing project-wide provider defaults. If input retirement fails, the entry points request worker shutdown without acknowledging quiescence or destroying borrowed resources.
Testing
The complete stack is based on upstream main
0ca25c56eec6fe7860fdcba44f8848f19693d6f6, including #8845. These are targeted checks, not a full-repository or per-PR runtime qualification. Kitless runs use Python 3.12 and Isaac Captureae48621f1cc13054c2246210d8f92d30e27fe354built from source.The preceding baseline also passed 205 distinct selected Lab/Kit tests, five kitless IWER scene variants, and ordinary headless Kit Franka XR motion/Reset. That broader matrix was not rerun for these focused corrections and is not transferred as fresh acceptance of the new heads.
Limits: synthetic IWER does not qualify physical-headset use or full task completion. Cold renderer attach, intermittent GR1T2 first-Play recovery and SO101 cube retention remain open; the concrete reset-order fix does not establish the cause of the historical first-Play symptom. Kit's upstream dependency selection has nine previously recorded metadata inconsistencies. Full-repository, hosted-CI and arm64 coverage are not claimed; upstream changes after the frozen base are not included.
Checklist
pre-commitchecks withuv run isaaclab --formatsource/<pkg>/changelog.d/for every touched package (do not editCHANGELOG.rstor bump package versions — CI handles that)CONTRIBUTORS.mdor my name already exists thereThe warnings checkbox remains open: dependency warnings and the separate Kit metadata audit are unresolved.