When to Use
- User wants to teleoperate the simulated robot with a VR device (Pico) and optionally record episodes.
- User references
geniesim_teleop,teleop.py, or the teleop bridge.
Do not use for:
- Running a benchmark task →
run-benchmark. - Verifying an inference server →
check-inference.
Critical Patterns
- The runtime needs ROS 2 + Isaac Sim on the host. Inside the
Genie Sim Docker image (
geniesim docker up→geniesim docker into) that's already set up. Outside the container, source your ROS overlay and have Isaac Sim available. - A VR device must be reachable. The teleop loop opens a VR server
(default port
8080) and waits for the Pico headset to connect. - Working directory: anywhere under the repo works — the CLI uses
find_specto locate thegeniesim_teleoppackage. - Confirm before launching. Teleop holds a GPU and a live device connection; ask before kicking it off if there's any ambiguity.
Workflow
Step 1 — Collect inputs
Ask via AskUserQuestion (all optional — sensible defaults exist):
- Device type (default
pico). - VR port (default
8080). - Robot config (default
G2_omnipicker.json). - gRPC client host (default
localhost:50051).
Step 2 — Launch the teleop loop
Inside the GUI container (geniesim docker into):
geniesim teleop run --device_type=pico --port=8080
With explicit overrides:
geniesim teleop run \
--client_host=localhost:50051 \
--port=8080 \
--robot_cfg=G2_omnipicker.json \
--device_type=pico
Step 3 — (optional) Image bridge
If the user needs the in-process image pub/sub bridge:
geniesim teleop bridge --mode inprocess
Commands (copy-paste summary for the user)
# Terminal A — host (start GUI container)
cd /path/to/main
./scripts/start_gui.sh
# Terminal B — host, then container
cd /path/to/main
./scripts/into.sh
# inside container:
geniesim teleop run --device_type=pico --port=8080
Notes
- If
geniesimisn't on$PATH, substitutepython3 -m geniesim_cli teleop …— same args. - Any unknown
--flagafter the subcommand is forwarded verbatim togeniesim_teleop.teleop/geniesim_teleop.bridge. - Robot init states are loaded from the
geniesim_benchmarkpackage when it's installed; if it isn't, teleop still runs (init-state loading is skipped with a warning).