Skip to main content

Quest 3 raw input and streaming helpers for RoboVR

Project description

RoboVR

Quest 3 teleoperation prototype for Ubuntu hosts.

Current milestone: bring up the wired development loop.

  • host_bridge/: Ubuntu C++ TCP bridge demo.
  • proto/: shared packet header and packet type definitions.
  • quest_client/: Android/Quest client skeleton.
  • examples/quest_streaming.py: shared Python protocol and H.264 streaming helpers.
  • tools/: ADB and local launch helpers.
  • docs/: design notes and test procedures.

Host smoke test

Install the host compiler toolchain if needed:

sudo apt update
sudo apt install build-essential
cmake -S . -B build
cmake --build build
./build/host_bridge_demo 7777

The first Quest client build sends HELLO and HEARTBEAT packets over adb reverse tcp:7777 tcp:7777.

Quest prerequisites

adb devices
adb reverse tcp:7777 tcp:7777

adb devices must show the Quest as device, not unauthorized or no permissions.

Quest client build

This repo currently contains Gradle project files but not a checked-in Gradle wrapper. Build with Android Studio, or install Gradle/Android SDK and run:

cd quest_client
gradle assembleDebug

The initial APK is a transport bring-up client. It opens a regular Android Activity on Quest and sends HELLO/HEARTBEAT packets to the Ubuntu host. Native OpenXR rendering is the next milestone after this loop is verified.

ToolHang Quest teleop

Use the fixed launcher instead of hand-building the long command:

tools/run_tool_hang_quest.sh

The launcher configures adb reverse tcp:7777 tcp:7777 and starts ToolHang with H.264 stereo video, head tracking, and right-controller arm teleop.

Controls:

  • A or X: reset the headset neutral frame. Head camera motion and arm motion share this frame.
  • Right squeeze: hold to clutch and move the arm.
  • Right trigger: press once to toggle gripper open/closed.
  • B or Y: reset the arm clutch neutral while keeping the shared headset frame.

Quest 3 Raw Python API

RoboInfra should consume the raw Quest input API from robovr.quest3. This API only exposes headset/controller state and connection stats; it does not own robot teleop mapping.

from robovr.quest3 import Quest3Server, Quest3VideoStreamer

server = Quest3Server(port=7777, adb_reverse=True)
server.start()
streamer = Quest3VideoStreamer(server)

state = server.wait_for_state(timeout_s=5.0)
while True:
    state = server.latest()
    if state is not None and state.connected:
        head = state.head
        right_grip = state.right_grip
        trigger = state.right_trigger
        squeeze = state.right_squeeze

    # left_rgb and right_rgb are uint8 RGB arrays with shape H x W x 3.
    streamer.send(left_rgb, right_rgb)

Quest3VideoStreamer defaults to the validated Quest 3 stereo path: 800x450 per eye, H.264, 72 FPS target, and RoboVR's internal flip/SurfaceTexture packet handling. If the Quest is not connected, send() returns False instead of raising.

Manual monitor:

python -m robovr.quest3.monitor --port 7777 --adb-reverse

Python Package Publishing

The PyPI package is scoped to the robovr Python package only. Quest APK/native client code and local build artifacts stay in the repository but are excluded from the wheel.

See docs/publishing.md for build, twine check, TestPyPI, and PyPI upload commands.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

robovr-0.1.0.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

robovr-0.1.0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file robovr-0.1.0.tar.gz.

File metadata

  • Download URL: robovr-0.1.0.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for robovr-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7758550d10d85baf9c6abb27f6626bae2ca0c9408b01efe7f7b3e2d047973126
MD5 e342e8b7a79c14f419df0144a9fcdef6
BLAKE2b-256 d1c891e6132db5decdd957679cbbc84e849de6e46a0ac3aa0e392a678c7b3220

See more details on using hashes here.

File details

Details for the file robovr-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: robovr-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for robovr-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1c1b4967ffc3dc16e5fd9e5c366ed7ef0ad4799ea304c3db2e2dd2d38c4cdee5
MD5 9229eca9894aee2a799e17f0975993fe
BLAKE2b-256 560a1b6cf174e8073beb93bd2d8525a8fd7efcca50713c7675e68e141761373b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page