Add CloudXR VR streaming support for PICO 4 Ultra (Early Access)

Replaces manual H264/TCP stereo streaming with NVIDIA CloudXR for
higher-quality stereoscopic rendering and lower latency.

Changes:
- teleop_xr_agent.py: add --cloudxr flag (enables Isaac Sim XR mode,
  disables manual StreamingManager)
- deps/cloudxr/: NVIDIA CloudXR.js SDK (Early Access) with Isaac Lab
  teleop React web client
- deps/cloudxr/Dockerfile.wss.proxy: HAProxy WSS proxy for PICO 4 Ultra
  HTTPS mode (routes wss://48322 → ws://49100)
- deps/cloudxr/isaac/webpack.dev.js: disable file watching to avoid
  EMFILE errors with large node_modules
- deps/cloudxr/INSTALL.md: full setup guide

Usage:
  # Start CloudXR Runtime + Isaac Lab
  cd ~/IsaacLab && ./docker/container.py start \
      --files docker-compose.cloudxr-runtime.patch.yaml \
      --env-file .env.cloudxr-runtime

  # Run teleop with CloudXR
  ~/IsaacLab/isaaclab.sh -p teleop_xr_agent.py \
      --task Isaac-MindRobot-2i-DualArm-IK-Abs-v0 --cloudxr

  # Serve web client
  cd deps/cloudxr/isaac && npm run dev-server:https
This commit is contained in:
2026-03-26 14:29:03 +08:00
parent eef7ff838d
commit 623e05f250
133 changed files with 24869 additions and 2 deletions

1
deps/cloudxr/docs/assets/hierarchy.js vendored Normal file
View File

@@ -0,0 +1 @@
window.hierarchyData = "eJyrVirKzy8pVrKKjtVRKkpNy0lNLsnMzytWsqqurQUAmx4Kpg=="

120
deps/cloudxr/docs/assets/highlight.css vendored Normal file
View File

@@ -0,0 +1,120 @@
:root {
--light-hl-0: #795E26;
--dark-hl-0: #DCDCAA;
--light-hl-1: #000000;
--dark-hl-1: #D4D4D4;
--light-hl-2: #A31515;
--dark-hl-2: #CE9178;
--light-hl-3: #008000;
--dark-hl-3: #6A9955;
--light-hl-4: #001080;
--dark-hl-4: #9CDCFE;
--light-hl-5: #0070C1;
--dark-hl-5: #4FC1FF;
--light-hl-6: #0000FF;
--dark-hl-6: #569CD6;
--light-hl-7: #098658;
--dark-hl-7: #B5CEA8;
--light-hl-8: #000000;
--dark-hl-8: #C8C8C8;
--light-hl-9: #AF00DB;
--dark-hl-9: #C586C0;
--light-hl-10: #EE0000;
--dark-hl-10: #D7BA7D;
--light-hl-11: #800000;
--dark-hl-11: #569CD6;
--light-hl-12: #0000FF;
--dark-hl-12: #CE9178;
--light-hl-13: #267F99;
--dark-hl-13: #4EC9B0;
--light-code-background: #FFFFFF;
--dark-code-background: #1E1E1E;
}
@media (prefers-color-scheme: light) { :root {
--hl-0: var(--light-hl-0);
--hl-1: var(--light-hl-1);
--hl-2: var(--light-hl-2);
--hl-3: var(--light-hl-3);
--hl-4: var(--light-hl-4);
--hl-5: var(--light-hl-5);
--hl-6: var(--light-hl-6);
--hl-7: var(--light-hl-7);
--hl-8: var(--light-hl-8);
--hl-9: var(--light-hl-9);
--hl-10: var(--light-hl-10);
--hl-11: var(--light-hl-11);
--hl-12: var(--light-hl-12);
--hl-13: var(--light-hl-13);
--code-background: var(--light-code-background);
} }
@media (prefers-color-scheme: dark) { :root {
--hl-0: var(--dark-hl-0);
--hl-1: var(--dark-hl-1);
--hl-2: var(--dark-hl-2);
--hl-3: var(--dark-hl-3);
--hl-4: var(--dark-hl-4);
--hl-5: var(--dark-hl-5);
--hl-6: var(--dark-hl-6);
--hl-7: var(--dark-hl-7);
--hl-8: var(--dark-hl-8);
--hl-9: var(--dark-hl-9);
--hl-10: var(--dark-hl-10);
--hl-11: var(--dark-hl-11);
--hl-12: var(--dark-hl-12);
--hl-13: var(--dark-hl-13);
--code-background: var(--dark-code-background);
} }
:root[data-theme='light'] {
--hl-0: var(--light-hl-0);
--hl-1: var(--light-hl-1);
--hl-2: var(--light-hl-2);
--hl-3: var(--light-hl-3);
--hl-4: var(--light-hl-4);
--hl-5: var(--light-hl-5);
--hl-6: var(--light-hl-6);
--hl-7: var(--light-hl-7);
--hl-8: var(--light-hl-8);
--hl-9: var(--light-hl-9);
--hl-10: var(--light-hl-10);
--hl-11: var(--light-hl-11);
--hl-12: var(--light-hl-12);
--hl-13: var(--light-hl-13);
--code-background: var(--light-code-background);
}
:root[data-theme='dark'] {
--hl-0: var(--dark-hl-0);
--hl-1: var(--dark-hl-1);
--hl-2: var(--dark-hl-2);
--hl-3: var(--dark-hl-3);
--hl-4: var(--dark-hl-4);
--hl-5: var(--dark-hl-5);
--hl-6: var(--dark-hl-6);
--hl-7: var(--dark-hl-7);
--hl-8: var(--dark-hl-8);
--hl-9: var(--dark-hl-9);
--hl-10: var(--dark-hl-10);
--hl-11: var(--dark-hl-11);
--hl-12: var(--dark-hl-12);
--hl-13: var(--dark-hl-13);
--code-background: var(--dark-code-background);
}
.hl-0 { color: var(--hl-0); }
.hl-1 { color: var(--hl-1); }
.hl-2 { color: var(--hl-2); }
.hl-3 { color: var(--hl-3); }
.hl-4 { color: var(--hl-4); }
.hl-5 { color: var(--hl-5); }
.hl-6 { color: var(--hl-6); }
.hl-7 { color: var(--hl-7); }
.hl-8 { color: var(--hl-8); }
.hl-9 { color: var(--hl-9); }
.hl-10 { color: var(--hl-10); }
.hl-11 { color: var(--hl-11); }
.hl-12 { color: var(--hl-12); }
.hl-13 { color: var(--hl-13); }
pre, code { background: var(--code-background); }

18
deps/cloudxr/docs/assets/icons.js vendored Normal file

File diff suppressed because one or more lines are too long

1
deps/cloudxr/docs/assets/icons.svg vendored Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

60
deps/cloudxr/docs/assets/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
window.navigationData = "eJydlG9LwzAQxr9KyOv5B6dj7N1QkMF00zoURI6sva3FNinpdVPE7y7NYtd2nW1923vu9zxJ7vr6xQk/iI/4bIN6E+CW93gsyOcj7ik3jVBScvZbO/UpCnmPvwfS46NhfzgcnA+/eznjFokCuWYOCU3o1aGsBKykltjjrh+EnkbJR6853BFRHCK7DgOUxE7YMy5vp20sdo2wa4QTMI1NR6m6PaJw6T9uprHe7a3oh0kSKMnG80mdiy3DeD5pSm4jO0hpXIeyyUy9iXWPtFX63bzpMd5e047p+GrLrkWCSe1BfbUFU+0wGpNECJdNxZI9YYiqNmYBbOQwFUvYybsMoZ3wRcwc1BvUbKW0dUUtKFCyq7lFwiKGHRJWSkMJ2XSlBbFcMyXZHZJgDykmxPpd85RgoCRkMDAw6Dclqb4Ee9IqXYaY+EplvK5hqh+gwju2WG+V24mQ9GedeV5svOPmg7TKVlxUlXovj3tSpLw0xGxDTaHcf3FsIM2PwSFBuCehTKM9p6iphDr8A91giGtBxe0MJKFeCRcPkLm4kvVqcAiexdkot8JaaQtoG9pfGFejIDyArVLpmgg5qyQsEweX2cD9API9f+w="

1
deps/cloudxr/docs/assets/search.js vendored Normal file

File diff suppressed because one or more lines are too long

1611
deps/cloudxr/docs/assets/style.css vendored Normal file

File diff suppressed because it is too large Load Diff