Skip to content

Commit 1c87db4

Browse files
committed
chore(oob): Handle auto connection through CDP
1 parent 513a538 commit 1c87db4

6 files changed

Lines changed: 436 additions & 57 deletions

File tree

docs/source/references/oob_teleop_control.rst

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ Quick start
1717

1818
**Step 1 — Start the streaming host with OOB enabled**
1919

20+
On first use, it is recommended to run once **without** ``--setup-oob`` to
21+
confirm ``adb devices`` sees the headset, verify USB debugging is enabled, and
22+
accept the self-signed certificate in the headset browser manually (both the
23+
web client page and the ``https://<host>:48322`` proxy page). Once that
24+
baseline works, add ``--setup-oob`` to automate the full flow.
25+
2026
Launch the CloudXR runtime with the ``--setup-oob`` flag (add ``--accept-eula``
2127
on first run):
2228

@@ -29,6 +35,8 @@ This will:
2935
1. Verify a USB-connected headset is available via ``adb devices``
3036
2. Start the WSS proxy with the OOB control hub
3137
3. Open the teleop page on the headset via ``adb shell am start``
38+
4. Accept the self-signed certificate and click CONNECT automatically
39+
via Chrome DevTools Protocol (CDP)
3240

3341
You should see output confirming the hub is running:
3442

@@ -45,7 +53,8 @@ You should see output confirming the hub is running:
4553
- **Connected to WiFi** on the same network as the streaming host (for web
4654
page access and CloudXR streaming)
4755

48-
No ``adb reverse`` or USB tethering is used.
56+
Streaming and web page access use WiFi, not USB tethering.
57+
``adb forward`` is used only temporarily for CDP automation.
4958

5059
**Step 2 — (Manual fallback) Open the web client on the headset**
5160

@@ -110,11 +119,12 @@ configuration overrides via the HTTP config API:
110119
111120
See ``GET /api/oob/v1/config`` below for all supported keys.
112121

113-
**Step 5 — Connect and stream; poll for metrics**
122+
**Step 5 — Stream and poll for metrics**
114123

115-
Press **CONNECT** on the headset to start the CloudXR streaming session. Once
116-
streaming begins, the headset reports metrics to the hub every 500 ms. Poll the
117-
state endpoint from a PC to collect them:
124+
With ``--setup-oob``, CONNECT is clicked automatically via CDP. If running
125+
without it, press **CONNECT** on the headset manually. Once streaming begins,
126+
the headset reports metrics to the hub every 500 ms. Poll the state endpoint
127+
from a PC to collect them:
118128

119129
.. code-block:: bash
120130
@@ -128,21 +138,26 @@ ADB automation
128138

129139
The ``--setup-oob`` flag automates headset setup via USB ``adb``:
130140

131-
1. **adb devices** verifies exactly one device is connected
132-
2. **am start** opens the teleop bookmark URL in the headset browser with
141+
1. **adb devices** verifies exactly one device is connected
142+
2. **am start** opens the teleop bookmark URL in the headset browser with
133143
the correct ``oobEnable=1``, ``serverIP``, and ``port`` parameters
144+
3. **CDP connect** forwards the browser's DevTools socket over ``adb``,
145+
accepts the self-signed certificate interstitial, and clicks CONNECT
146+
via Chrome DevTools Protocol (``Input.dispatchMouseEvent``)
134147

135-
No ``adb reverse`` ports or USB tethering is used. The headset reaches the
136-
streaming host directly over WiFi.
148+
Streaming and web page access use WiFi, not USB tethering. The headset
149+
reaches the streaming host directly over WiFi. ``adb forward`` is used only
150+
temporarily during CDP automation to reach the browser's DevTools socket.
137151

138152
Prerequisites:
139153

140154
- ``adb`` must be on ``PATH`` (Android SDK Platform Tools)
141155
- The headset must be connected via USB with USB debugging enabled
142156
- The headset must be on the same WiFi network as the streaming host
143157

144-
If adb automation fails, the hub still starts and you can open the URL
145-
on the headset manually.
158+
If any step fails, the hub still starts. Fall back to
159+
``chrome://inspect/#devices`` from the PC or tap CONNECT on the headset
160+
directly.
146161

147162
Architecture
148163
------------
@@ -161,7 +176,7 @@ Architecture
161176
* - **Streaming host**
162177
- ``python -m isaacteleop.cloudxr --setup-oob``
163178
- Runs CloudXR runtime + WSS proxy + OOB hub on a single TLS port.
164-
Opens the teleop page on the headset via USB adb.
179+
Opens the teleop page and clicks CONNECT via USB adb + CDP.
165180
* - **Operator / scripts**
166181
- ``curl``, browser, or custom tooling
167182
- Reads state via HTTP, optionally pushes config via HTTP.
@@ -312,10 +327,10 @@ The following URL parameters override their corresponding form fields (and
312327
``localStorage`` values) so that bookmarked links always take priority over
313328
previously saved settings:
314329

315-
- ``serverIP`` CloudXR server IP address
316-
- ``port`` CloudXR server port
317-
- ``codec`` video codec
318-
- ``panelHiddenAtStart`` hide the control panel on load
330+
- ``serverIP`` CloudXR server IP address
331+
- ``port`` CloudXR server port
332+
- ``codec`` video codec
333+
- ``panelHiddenAtStart`` hide the control panel on load
319334

320335
Environment variables
321336
---------------------
@@ -342,7 +357,3 @@ Environment variables
342357
- Default video codec for headset bookmarks
343358
* - ``TELEOP_CLIENT_PANEL_HIDDEN_AT_START``
344359
- Hide control panel on load (``true`` / ``false``)
345-
* - ``TELEOP_CLIENT_PER_EYE_WIDTH``
346-
- Per-eye render width override
347-
* - ``TELEOP_CLIENT_PER_EYE_HEIGHT``
348-
- Per-eye render height override

src/core/cloudxr/python/__main__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ def _parse_args() -> argparse.Namespace:
5151
action="store_true",
5252
default=False,
5353
help=(
54-
"Enable OOB teleop control hub and open the teleop page on the headset via USB adb. "
54+
"Enable OOB teleop control hub, open the teleop page on the headset via USB adb, "
55+
"and auto-click CONNECT via CDP (Chrome DevTools Protocol). "
5556
"The headset must be connected via USB cable (for adb) and on WiFi (for streaming). "
5657
'See docs: "Out-of-band teleop control".'
5758
),

0 commit comments

Comments
 (0)