Skip to main content
By default the Quest streams controller pose to the robot over Wi-Fi. On some networks the headset’s Wi-Fi power-save buffering holds pose packets and releases them in bursts, adding ~150 ms gaps between updates that show up as stair-stepped, laggy arm motion. Quest over USB moves the active pose link onto a USB cable via an adb reverse tunnel, so the link is wired and deterministic — while keeping Wi-Fi as an automatic standby if the cable drops.
USB carries controller poses only. Camera video still streams over the LAN — WebRTC can’t cross the adb TCP forward — so you connect to the robot’s address as usual and the cameras keep working over Wi-Fi/Ethernet. USB just takes over the pose link.
When USB is selected, the headset sends every pose frame over both the cable and Wi-Fi. The robot prefers the wired stream and uses the Wi-Fi frames only while the cable goes quiet, so a mid-session USB drop (or a yanked cable) fails over to Wi-Fi instantly with no reconnect, and the cable reclaims the link the moment it comes back. You get the wired link’s low latency whenever it’s up, without teleop stalling when it isn’t.

One-time setup

1

Enable Developer Mode on the Quest

  1. Open the Meta Quest mobile app on your phone, with your headset connected.
  2. Go to Menu → Devices → select your headset → Headset Settings → Developer Mode, and toggle it on (you may be prompted to create a free Meta “organization” first).
  3. Restart the headset.
This is the same Developer Mode used for remote teleop.
2

Confirm adb is installed on the robot machine

Nothing to do on the Perception Kit ZED Box or any one-command installaxol provision sets up adb and the Quest udev rule for you. On a development install, run axol provision once.

Connect and drive

1

Plug the headset into the robot machine

Use a data-capable USB-C cable from the headset to the machine running axol serve (the one wired to the robot).
2

Authorize and connect from the control panel

In the control panel, the Quest USB settings tab shows the headset state. The first time, accept the Allow USB debugging? prompt in the headset (check Always allow from this computer). Once authorized, the tunnel comes up automatically and the status turns green (Controller over USB); the tab’s Connect button is a manual fallback / reconnect.
3

Enable USB in the VR app

Open the VR app at axol.almond.bot, enter the robot’s address as usual, and tick Quest over USB before connecting.
4

Authorize the USB certificate

The USB link uses wss://localhost:8000, whose self-signed certificate is a separate origin from the host cert you already approved. Until it’s approved the app runs on Wi-Fi and shows WiFi fallback — USB link down with an Authorize USB certificate button — tap it and proceed past the warning (equivalently, open https://localhost:8000 in the headset browser and proceed). The status then flips to controller over cable.
5

Enter VR

Press Enter VR and teleoperate as usual. You don’t have to wait for the USB link — Wi-Fi drives the arm until the cable comes up, then the robot switches to the wired stream automatically.
If the Quest USB settings tab shows unauthorized, re-accept the prompt in the headset. If it shows no device, replug the cable and confirm Developer Mode is on. A flaky cable is the most common cause of a link that won’t come up.

Next steps

Web Control Panel

Where the Quest USB settings tab lives and how connections work.

VR Interface

The WebXR app, camera views, and connection details.