Web console
One browser console, six tabs. Which tabs are active is decided by the config passed at launch.
| Tab | Role |
|---|---|
| DEBUG | Run a policy in sim or on the real robot. |
| MANUAL | Drive a real robot from per-joint sliders. |
| COLLECT | Teleoperate to record training data. |
| REPLAY | Open-loop playback of a recorded episode. |
| EVAL | Score model runs against a benchmark. |
| RESULT | Browse and compare scored runs across models. |
Launching the console
Launch eva with --config pointing at a file under configs/.
# --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:
- Deploy —
configs/01_deploy/<robot>/. - Collect —
configs/02_collection/(enables COLLECT). - Evaluate —
configs/03_evaluation/(enables EVAL/RESULT and opens on EVAL).
See Add a Robot for adapting a config to your hardware.
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:
- current
qposand the list of available cameras; - 3D view of the robot, rendered from its URDF;
- per-camera video feeds;
- status line: robot/policy connectivity, current step, inference time (ms).
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.
| Tab | What it does |
|---|---|
| MANUAL | Per-joint sliders against a real robot: STAGE a target pose, SEND TO REAL, or HOME. Solid pose = live state, ghost = staged target. See MANUAL. |
| COLLECT | Teleop-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. |
| REPLAY | Open-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.
| Tab | What it does |
|---|---|
| DEBUG | Default 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.
| Tab | What it does |
|---|---|
| EVAL | Scoring flow MODEL → TASK → TRIAL → RUN → SCORE (milestones plus note). Each run is recorded with its score. See EVAL. |
| RESULT | Searchable/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.
- COLLECT is disabled unless the config defines a collection schema.
configs/02_collection/sets this up. - EVAL / RESULT activate when the config defines an eval block.
configs/03_evaluation/sets this up; when present, the console opens on EVAL. Without it, EVAL/RESULT remain a read-only viewer over prior results. - MANUAL always renders, but SEND TO REAL only reaches hardware over a live transport (
zmq,ros1,ros2). A dataset-backed config has no live robot; the UI flags this.
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.
eva process for errors, and that the config's transport matches how the robot is wired.