CERES user guide
Stream to a robot with Bridge
Bridge sends one outward camera view, head pose and both hands from Quest 3 to a robot or Python application on the same network. Video is 640 pixels wide, and poses update with fresh headset observations. Bridge uses the same loading intro and XR interface as Solo, including hand appearance controls and tracking indicators. Recording, runs, takes and exports are unavailable in Bridge.
Prepare the receiver
Install the public CERES receiver on Ubuntu 24.04 with Python 3.12. Its installation guide includes the required GStreamer packages. Start the receiver:
ceres-bridge doctor
ceres-bridge listen --name lab-receiver
Keep that terminal open. The receiver displays an eight-character pairing code and a link to open on the headset.
Select Bridge
- Open CERES in Quest Browser and select Bridge beside Duet and Solo, or open Bridge directly.
- Select Enable camera, then enter the receiver code and select Pair.
- Check the displayed receiver name, then select Start streaming.
- Allow hand tracking access and hold both hands in view.
Pairing uses the internet. After setup, video and poses travel directly over the local network. The receiver cannot start recording, operate headset controls or issue robot commands through Bridge.
Read the headset display
The circular reticle shows video FPS on the left and motion FPS on the right. The connection state and receiver name appear beneath it. The camera margin remains visible and the top task bar is hidden.
REC sits in the upper-left corner of the camera reticle and shows streaming activity. Exit, Pause and the microphone toggle form a vertical stack in the upper-right corner at 50% opacity. Exit and Pause use red icons. Select Pause to suspend video, audio and poses, then select it again to resume. REC pulses faintly while paused. Exit closes XR.
The microphone starts off with a crossed-out red icon. Select it to change outgoing audio. The same setting is available beside Enable camera before entering XR. Local voice commands remain available independently of outgoing audio, including while streaming is paused.
The HUD control at the lower right cycles through three views:
- OFF keeps the reticle, REC, Exit, Pause, microphone toggle and lower-right controls.
- LIGHT shows the standard Bridge display, including frame rates, connection status and camera margin.
- FULL adds a vertical pitch ladder and horizon line at 50% opacity.
Four icons stack upwards from the lower-right corner for hand appearance, shading, trails and HUD mode. They stay at 50% opacity in every HUD mode. Pointing at an icon gently reveals its current setting to the left, and selecting it cycles the value. The scan-eye icon selects the HUD mode.
Use Python, ROS 2 or Foxglove
The receiver worker keeps running while your Python application reads the latest observations:
from ceres_bridge import Receiver
with Receiver(video=False) as receiver:
observation = receiver.latest()
head = observation["poses"].get("1", {})
if head.get("tracked"):
print(head["pose"]["values"])
The package also includes a ROS 2 Jazzy adapter and a Foxglove output. They share the receiver's incoming stream. Follow the ROS 2 guide or install the optional Foxglove package and run:
ceres-bridge foxglove
Follow View Bridge in Foxglove to open the standard Foxglove workspace, import the supplied layout and display video, Quest and hand meshes, tracking state and live plots.
Stop and reconnect
Use the CERES exit control or leave XR with the Quest system gesture. The connection closes and the camera preview remains available. Select Start streaming to begin again. Leaving Bridge releases the camera.
Bridge remembers the receiver across browser and receiver restarts. Restart ceres-bridge listen on Linux, open Bridge on the headset and select Start streaming. A new code is needed after pairing is forgotten.
Select Forget receiver on the headset to revoke pairing. To forget the headset from Linux, stop the worker and run ceres-bridge listen --forget.
After streaming stops, select Solo or Duet to return to recording. Those modes open their own capture surface and recording workflow.