Skip to content

Meta Quest 3 / 3S Setup Guide

Preparation

Teleoperation device side

meta_adam

Device Quantity Description Notes
PND robot 1 Adam series robot Configure teleoperation program
User Computer 1 / Install Foxglove Studio
Meta Quest 3 / 3S 1 VR headset + left/right controllers Follow the official Set up Meta Quest 3S guide to wear the device correctly

First-time setup

  1. Press and hold the power button on the right side of the headset for 3 seconds to power on.
  2. Complete unboxing and fit adjustment per the official guide.
  3. Download Meta Horizon on your mobile device (Mainland China accounts are not supported—switch to an overseas account), pair the headset with Meta Horizon, and complete initial setup such as account creation.
Meta controller reference

Controllers Map

  1. Trigger buttons
  2. Y, X, A, B buttons
  3. Thumbstick
  4. Grip buttons
  5. Menu buttons
  6. Meta buttons

Robot side

Follow the standard boot process to start the robot. Ensure your PC and the robot are on the same network segment. See network connection.

  1. On your PC, open a terminal and connect to the robot.

    ssh pnd-humanoid@192.168.XX.XX # Replace XX.XX with the actual IP (on the back of the remote control handle); default password: pndxyz
    
  2. Install the teleoperation program (requires internet; skip if already installed).

    curl -fsSL https://raw.githubusercontent.com/pndbotics/pnd_teleoperation/refs/heads/main/install.sh | bash
    


Operation

Run the teleoperation program

ssh pnd-humanoid@192.168.XX.XX # Replace XX.XX with the actual IP (on the back of the remote control handle); default password: pndxyz
source /opt/pnd/pnd_teleop/setup_cli.bash
# Same command for all models:
spteleop teleop adam_u webvr mink

Meta headset setup

  1. Wear the device per the official Set up Meta Quest 3S guide.
  2. In Settings, connect to the same Wi‑Fi network as the robot. meta_wifi
  3. Open the browser and enter https://192.168.XX.XX/webvr (replace with the robot IP). meta_browser
  4. Click AdvancedProceed to 192.168.XX.XX. meta_webvr1meta_webvr2
  5. Click Start Controller TrackingAllow to start tracking. meta_start_tracking

Visualization preview

  1. Install and launch Foxglove Studio on your PC.
  2. Sign in and click Open Connection. fox_open
  3. Connect via WebSocket: ws://localhost:8765 (replace localhost with the robot IP). fox_localhost
  4. Open the 3D panel settings. 3D panel config
  5. Paste the configuration below and click Apply to preview motion mapping in real time.
Click to expand configuration code
{
  "layers": {
    "845139cb-26bc-40b3-8161-8ab60af4baf5": {
      "visible": true,
      "frameLocked": true,
      "label": "Grid",
      "instanceId": "845139cb-26bc-40b3-8161-8ab60af4baf5",
      "layerId": "foxglove.Grid",
      "size": 10,
      "divisions": 10,
      "lineWidth": 1,
      "color": "#248eff",
      "position": [
        0,
        0,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "order": 1
    }
  },
  "cameraState": {
    "perspective": true,
    "distance": 8.362406704377788,
    "phi": 74.10829292531537,
    "thetaOffset": 13.624928863620116,
    "targetOffset": [
      1.3462285617160472,
      3.872395794634993,
      -4.022926534191149e-17
    ],
    "target": [
      0,
      0,
      0
    ],
    "targetOrientation": [
      0,
      0,
      0,
      1
    ],
    "fovy": 45,
    "near": 0.5,
    "far": 5000
  },
  "followMode": "follow-pose",
  "followTf": "world",
  "scene": {
    "meshUpAxis": "z_up",
    "transforms": {
      "showLabel": false,
      "enablePreloading": true,
      "axisSize": 0
    },
    "ignoreColladaUpAxis": true
  },
  "transforms": {},
  "topics": {
    "/robot_description": {
      "visible": true
    }
  },
  "publish": {
    "type": "point",
    "poseTopic": "/move_base_simple/goal",
    "pointTopic": "/clicked_point",
    "poseEstimateTopic": "/initialpose",
    "poseEstimateXDeviation": 0.5,
    "poseEstimateYDeviation": 0.5,
    "poseEstimateThetaDeviation": 0.26179939
  },
  "imageMode": {}
}

Calibration

  1. Hold the right controller Meta button for about 3 seconds to reset position.
  2. Keep the calibration pose (standing or seated, choose one): arms parallel to the ground, controllers held with palms facing inward, then press A on the right controller. VR calibration pose
  3. In Foxglove, the robot model should follow your motion. Recalibrate if the pose looks wrong.

Attention

  • After calibration, keep both feet fixed during teleoperation.
  • To move, disconnect teleoperation with B, move, then recalibrate.

Real robot operation

Warning

  • Real robot operation involves risk. Keep a 3‑meter clear area around the robot.
  • Connect to the real robot only after the teleoperation program runs normally and the preview looks correct.
  • Confirm preview joint positions match the robot pose before enabling control.
  • Do not switch to other modes (walking, running demos, etc.) during teleoperation.
  • In an emergency:
    1. LT + B: enter damping mode
    2. LB + RB: power off actuators

xbox

Real robot operation by model

Follow the standard boot process to start the robot.

  • Zero position mode (Press A)
  • Standing mode (Press X)
  • In Standing Mode, press D‑pad Right to connect teleoperation
  • In Standing Mode, press D‑pad Left to disconnect teleoperation

Follow the standard boot process to start the robot.

  • Zero position mode (Press A)
  • Motion mode (Press X)
  • In Motion Mode, press D‑pad Right to connect teleoperation
  • In Motion Mode, press D‑pad Left to disconnect teleoperation

Hand mapping on the real robot

  • Right controller A: calibration
  • Right controller B: disconnect teleoperation
  • Right controller Meta: reset VR position
  • Right controller A touch: right thumb rotation
  • Left controller X touch: left thumb rotation
  • Right Trigger: right thumb/index open/close
  • Left Trigger: left thumb/index open/close
  • Right Grip: right middle/ring/little finger open/close
  • Left Grip: left middle/ring/little finger open/close

Last updated: 2026-05-20