Web console

One browser console, six tabs. Which tabs are active is decided by the config passed at launch.

TabRole
DEBUGRun a policy in sim or on the real robot.
MANUALDrive a real robot from per-joint sliders.
COLLECTTeleoperate to record training data.
REPLAYOpen-loop playback of a recorded episode.
EVALScore model runs against a benchmark.
RESULTBrowse and compare scored runs across models.

Launching the console

Launch eva with --config pointing at a file under configs/.

bash
# --web-port defaults to 8080; override only if the port is taken.
eva --config configs/01_deploy/dual_agilex_AGILEX/openpi_qpos.py --web-port 8080
# open the URL printed on stdout, e.g. http://localhost:8080

Configs are grouped by intent, then by robot:

See Add a Robot for adapting a config to your hardware.

Common failures. eva: command not found → environment not activated. Port busy → pass a different --web-port. Config-not-found → check the path under configs/01_deploy/.

How the console talks to the robot

The console is a remote, not the runtime. The control program already drives the robot; browser buttons dispatch commands (setup, run, stop, switch tab) to it.

Live state refreshed several times per second:

If the URDF is missing or unreadable, the 3D panel is hidden and a warning is logged; everything else continues. Point the config at a valid URDF to restore it (see Add a Robot).

Collection

The tabs aren't isolated features — they fall onto three flows: collection, deployment, and evaluation. Switching tabs resets the tab to a clean state; the shared 3D view and camera strip move with the active tab. Collection is where you verify the hardware and capture demonstration data.

TabWhat it does
MANUALPer-joint sliders against a real robot: STAGE a target pose, SEND TO REAL, or HOME. Solid pose = live state, ghost = staged target. See MANUAL.
COLLECTTeleop-driven recording: pick a task, START/STOP, watch the conversion to dataset format, replay an episode to mark PASS/FAIL with a note. See COLLECT.
REPLAYOpen-loop replay over a dataset: load a folder and an episode index, scrub frames against cameras and 3D view, optionally re-run the policy. Per-episode PASS/FAIL and language notes. See REPLAY.

Deployment

Connect the policy and run inference — in simulation preview or on the real robot.

TabWhat it does
DEBUGDefault tab. Pick a prompt and a mode — real, sim, step (one chunk per advance), or manual — then SETUP, RUN / STOP / RESET. Inference rate and action publish rate are tunable. See DEBUG.

Evaluation

Score checkpoints on the real robot and browse the results.

TabWhat it does
EVALScoring flow MODEL → TASK → TRIAL → RUN → SCORE (milestones plus note). Each run is recorded with its score. See EVAL.
RESULTSearchable/sortable table of scored runs, side-by-side model comparison, replay of any run's cameras, 3D view, and charts. See RESULT.

Why some tabs are greyed out

All six buttons always render; activation is decided at startup from the launched config.

Tab availability is config-driven. A plain deploy config yields DEBUG + MANUAL + REPLAY, with COLLECT disabled and EVAL/RESULT read-only. See Configuration.

Connection & liveness

The status bar's online flag means a message arrived recently — not just that a socket opened. For zmq/ros1/ros2, the bar stays offline until the first message and flips back to offline after 2 s of silence. Dataset/replay sources report whatever the config declares.

A separate indicator tracks policy connectivity. The console also pings the running process on every refresh so it can detect a closed browser.

Stays offline. Check power, link, the eva process for errors, and that the config's transport matches how the robot is wired.