Teleoperation Data Collection#
This workflow covers collecting demonstrations for the G1 loco-manipulation task using Meta Quest 3 supported by Nvidia IsaacTeleop.
Step 1: Start the CloudXR Runtime#
On the host machine, configure the firewall to allow CloudXR traffic. The required ports depend on the client type.
sudo ufw allow 49100/tcp # Signaling
sudo ufw allow 47998/udp # Media stream
sudo ufw allow 48322/tcp # Proxy (HTTPS mode only)
Start the CloudXR runtime from the Arena Docker container:
./docker/run_docker.sh
python -m isaacteleop.cloudxr
Step 2: Start Arena Teleop#
In another terminal, start the Arena Docker container and launch the teleop session to verify the pipeline:
./docker/run_docker.sh
source ~/.cloudxr/run/cloudxr.env
python isaaclab_arena/scripts/imitation_learning/teleop.py \
--visualizer kit \
--device cpu \
galileo_g1_locomanip_pick_and_place \
--teleop_device openxr
Start the session from the XR tab in the application window.
Arena teleop session with XR running. Stereoscopic view (left) and OpenXR settings in the XR tab (right).#
Step 3: Connect from Meta Quest 3#
For detail instructions please refer to Connect an XR Device:
A strong wireless connection is essential for a high-quality streaming experience. Refer to the CloudXR Network Setup guide for router configuration.
Open the browser on your headset and navigate to https://nvidia.github.io/IsaacTeleop/client.
Enter the IP address of your Isaac Lab host machine in the Server IP field.
Click the Click https://<ip>:48322/ to accept cert link that appears on the page. Accept the certificate in the new page that opens, then navigate back to the CloudXR.js client page.
Click Connect to begin teleoperation.
Teleoperation Controls:
Left joystick: Move the body forward/backward/left/right.
Right joystick: Squat (down), rotate torso (left/right).
Controllers: Move end-effector (EE) targets for the arms.
Note
If the simulation runs at too low FPS and makes the teleoperation feel laggy, you can try to reduce the XR resolution from the XR tab / Advanced Settings / Render Resolution.
Reducing render resolution from 1 (default) to 0.2.#
Step 4: Record with Quest 3#
Recording: When ready to collect data, run the recording script from the Arena container:
export DATASET_DIR=/datasets/isaaclab_arena/locomanipulation_tutorial mkdir -p $DATASET_DIR # Record demonstrations with OpenXR teleop python isaaclab_arena/scripts/imitation_learning/record_demos.py \ --visualizer kit \ --device cpu \ --dataset_file $DATASET_DIR/arena_g1_locomanipulation_dataset_recorded.hdf5 \ --num_demos 10 \ --num_success_steps 2 \ galileo_g1_locomanip_pick_and_place \ --teleop_device openxr
Complete the task for each demo. Reset between demos. The script saves successful runs to the HDF5 file above.
Hint
Suggested sequence for the task:
Align your body with the robot.
Walk forward (left joystick forward).
Grab the box (controllers).
Walk backward (left joystick back).
Turn toward the bin (right joystick).
Walk forward to the bin.
Squat (right joystick down).
Place the box in the bin (controllers).
Step 5: Replay Recorded Demos (Optional)#
To replay the recorded demos:
# Replay from the recorded HDF5 dataset
python isaaclab_arena/scripts/imitation_learning/replay_demos.py \
--visualizer kit \
--device cpu \
--dataset_file $DATASET_DIR/arena_g1_locomanipulation_dataset_recorded.hdf5 \
galileo_g1_locomanip_pick_and_place