Quick start
Pick a Python config, run eva --config <path.py>, drive the rest from the web console. --config is required.
The shape of a run
eva loads one .py config and builds the transport, robot, and policy connection from it, then serves the web console. The config fixes robot, transport, policy server, and action space. Run commands from the project root so relative configs/... paths resolve.
On real hardware: from bringup to data collection
Once the environment is installed (see Installation), this is the end-to-end order for bringing a live robot up. Validate each step in its console before moving to the next.
- Bring up the hardware node. EVA does not drive motors directly; the real-time loop talking to motors and cameras runs as a separate program on the robot's computer — the hardware node. Reference nodes ship under
examples/hardware/<robot>/and can be run as-is once the environment is set up, e.g.bash examples/hardware/arx/run_hardware.shbrings up the ARX R5 (CAN, SDK, cameras, and ZMQ endpoints all come up together). With no real arms, runrun_fake_node.shin the same folder instead — a software-only fake node that speaks the same ZMQ protocol. - Verify the link in MANUAL first. With the node up, launch EVA (
eva --config <deploy config> --web-port 8080) and start in MANUAL: no policy is in the loop here. Build a target pose with one slider per joint, CONNECT to the robot, and SEND TO REAL. If the arm follows and state reads back cleanly, the robot and eva-client are talking. This step confirms a new robot can communicate and is the easiest place to isolate problems. - Set the policy port in the config. Once the link is good, point
policy.host/policy.portin the config at your policy server (the UR5e presets default to9000). The policy server is a separate process; launch it per its own instructions. For editing the port, see Configuration. - Run inference from DEBUG. Open DEBUG and work down four steps to close the loop: pick a prompt → choose the run mode (
realfor the robot /simto preview) and an inference strategy → Setup resets and validates → Run streams actions continuously. - Collect data in COLLECT when you need it. With the collection hardware connected (e.g. a teleop leader arm), write a collection config (
configs/02_collection/<robot>.py) that sets up the task, launch EVA, open COLLECT, and start recording.
Open-loop replay (no servers)
configs/00_openloop/* sets transport=dataset: EVA reads observations from a recorded dataset on disk and connects no policy. You drive playback from REPLAY.
eva --config configs/00_openloop/ur5e_openloop.py
Creating transport: type=dataset robot=ur5e Transport ready: type=dataset obs_mode=JointState Console web server started on port 8080
Open http://127.0.0.1:8080, go to REPLAY, point at a dataset folder, pick an episode, step or scrub.
dataset_dir is required.Deploy against a policy server
configs/01_deploy/<robot>/* drives a live robot and connects to a policy server at the host/port set in the config.
Step 1 — start the policy server
The policy server is a separate process, not part of EVA. Launch it per its own instructions and note its address; policy.host and policy.port in the config must match. The UR5e presets default to port 9000.
Step 2 — pick a config and launch EVA
The two UR5e presets differ only in action space:
| Preset | Policy output |
|---|---|
openpi_qpos.py | Joint positions. Sent as-is. |
openpi_eef.py | End-effector poses. EVA solves IK before sending. |
# Joint positions: eva --config configs/01_deploy/ur5e/openpi_qpos.py # End-effector poses (IK applied): eva --config configs/01_deploy/ur5e/openpi_eef.py
ur5e for another folder under configs/01_deploy/; edit policy.host / policy.port in the preset or its _base.py. See Configuration.Step 3 — drive from DEBUG
Open DEBUG. Prompt and strategy drop-downs are populated from the config. Work down the controls:
| Control | Effect |
|---|---|
| Connect | Opens the policy connection and reads its metadata. Fails if host/port is wrong or the server is down. |
| Mode | real drives the robot; sim previews on a simulated arm. |
| Prompt + strategy | Task instruction and inference strategy, both sourced from the config. |
| Setup → Run | Setup resets to start pose and pings the policy; Run streams actions continuously. |
The console
EVA serves one console on --web-port (default 8080) with six tabs — DEBUG, MANUAL, COLLECT, REPLAY, EVAL, RESULT (Web console). If the config has an eval section, EVA connects the eval policy at startup and activates EVAL and RESULT, skipping the manual Connect step.
Remote hosts
Forward the console port over SSH. Substitute the custom --web-port for both 8080s if set.
ssh -L 8080:localhost:8080 <user>@<host> # local browser: http://localhost:8080
Next steps
- Preset editing and
_base_inheritance: Configuration. - Flags and exit behavior: CLI reference.
- Adding a new robot: Add a robot.
- Checkpoint-sweep evaluation: EVAL.