One policy, any robot — the smooth all-in-one real-robot stack. Debug, record, evaluate, visualize, all in the browser.
eva-promo-slim.mp4
EVA-Client driving an AgileX bimanual arm end-to-end from the browser — teleop → record → π₀ checkpoint → smooth async deploy. Real hardware, not a rendering.
Jump to: What's NEW · What you get · Robot zoo · Protocols · Architecture · Documentation · Roadmap · Cite
- [2026-07-22] New RL Workspace. EVA-Client now supports human-in-the-loop (HIL) intervention during policy rollouts and real-time value-curve visualization.
7.20.1._compressed.mp4
- [2026-07-18] Headless CLI + ZMQ control channel. Drive the full deploy / eval / RL / collect loop from a single
.pyconfig without the browser — every console button (incl. HIL takeover) mirrored on a ZMQ socket. Seedocs/console.mdanddocs/control-channel.md. - [2026-07-03] EVA-Client is open-sourced!
- [2026-07-03] Paper, docs, and project page are live! Read the Technical Report, browse the Documentation (中文), and visit the Project Page.
- 🚀 Deployment. One command brings up a real-robot closed loop:
.pyconfig → transport (ROS1 / ROS2 / ZeroMQ / offline dataset) → policy backend (OpenPI, OpenPI-RTC, StarVLA, GR00T, mock, replay) → inference strategy (sync / async / naive / ACT-ensemble / RTC) with live latency compensation. 6 robots already — joint-space or EEF-space (PyRoki IK), all live-switchable from the DEBUG tab. - 📊 Evaluation. Multi-checkpoint sweeps with per-trial records: every rollout captures camera video, 3D URDF scene, per-dimension state charts, and per-prompt milestone scores into dataset metadata, then replays synchronously in the RESULT tab. Prompt shuffling, and remote policy servers over SSH port-forward are first-class.
- 🎥 Data collection. Teleop capture straight into LeRobot v2.1 episodes from the COLLECT tab — background saver, in-tab QC PASS/FAIL replay, camera streams encoded to mp4, per-frame green/red quality flags. Teleop demos and model rollouts share one on-disk layout.
✅ Supported · 🚧 In development · 📦 To be added
| Robot | Form factor | Supported |
|---|---|---|
| AgileX Piper | Dual 6-DoF arm + gripper | ✅ |
| ARX R5 | Dual 6-DoF arm + gripper | ✅ |
| Dual Franka Panda | Dual 7-DoF arm + gripper | ✅ |
| Galaxea R1 Lite | Dual 6-DoF arm on torso | ✅ |
| Universal Robots UR5e | Single 6-DoF arm + gripper | ✅ |
| AgiBot G2 | Dual-arm humanoid (24-DoF body) | ✅ |
| AgiBot G2 (mobile base) | Humanoid on mobile chassis | 🚧 |
| YAM | Dual-arm manipulator | 🚧 |
| Tianji | Dual-arm manipulator | 🚧 |
| Unitree H1 / G1 | Humanoid | 🚧 |
| Fourier GR-1 | Humanoid | 📦 |
| Booster T1 | Humanoid | 📦 |
| Mobile ALOHA | Mobile dual-arm | 📦 |
| Layer | Name | Protocol / wire format | Supported |
|---|---|---|---|
| Transport | ROS 1 | ROS 1 stack | ✅ |
| Transport | ROS 2 | ROS 2 stack | ✅ |
| Transport | ZeroMQ | ZeroMQ execution node | ✅ |
| Transport | Offline dataset | Offline LeRobot v2.x replay | ✅ |
| Policy backend | OpenPI | WebSocket + msgpack (OpenPI, stateless) | ✅ |
| Policy backend | OpenPI-RTC | WebSocket + msgpack (Real-Time Chunking) | ✅ |
| Policy backend | StarVLA | WebSocket + msgpack (typed envelope) | ✅ |
| Policy backend | GR00T | ZeroMQ REQ/REP + msgpack-numpy (Isaac-GR00T) | ✅ |
| Policy backend | Mock | Local (smooth random actions) | ✅ |
| Policy backend | Replay | Local (recorded trajectory replay) | ✅ |
Full guides live in docs/. Start here:
| Guide | What's inside |
|---|---|
| 📦 Installation | Requirements, uv setup, hardware extras, verify |
| 🚀 Quick start | Two-process bring-up, supported transports, deploy/eval/replay presets |
| 🧭 Web console | The seven tabs — MANUAL, COLLECT, REPLAY, DEBUG, RL, EVAL, RESULT |
| 📚 Core concepts | Transports, policy backends, inference strategies, robots, action spaces |
| ⚙️ Configuration | _base_ inheritance, deep merge, startup pipeline |
| 🎞️ Recording | LeRobot v2.1 on-disk layout, QC flags, eval trials |
| 🔬 Development | Tests, lint, type-check, and how the robot side is faked |
- More robots. Extend the robot zoo to more embodiments — dual-arm manipulators (YAM, Tianji, …), humanoids (Unitree H1/G1, Fourier GR-1, Booster T1, …) and mobile / wheeled platforms (mobile ALOHA, Galaxea R1 base, quadruped + arm).
- Human-in-the-loop data collection for RL. Interventions during policy rollout captured as preference / correction data, DAgger-style relabeling, and reward-model signals piped back through the LeRobot episode format for online RL fine-tuning.
- Embodied agent. Wrap the deployment + evaluation loop with a language-driven planner (VLM / VLA + tool use) so long-horizon tasks can be decomposed, executed, verified, and re-planned end-to-end from the same console.
- Data annotation. Extend Collect mode with fine-grained task and sub-task annotation, segmenting long-horizon episodes into labeled sub-task units and milestones within the same LeRobot dataset. This makes a collection reusable at the level of individual manipulation phases.
If EVA-Client is useful for your research or product, please cite:
@misc{yang2026evaclient,
title={EVA-Client: A Unified Data Collection, Inference, and Deployment Framework for Embodied Policies on Real Robots},
author={Heqing Yang and Yang Yi and Liyao Wang and Linqing Zhong and Donglin Yang and Ruipu Wu and Zitong Bai and Fengjiao Chen and Manyuan Zhang and Linjiang Huang and Si Liu},
year={2026},
eprint={2607.02646},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2607.02646},
}For questions or collaboration, feel free to reach out via WeChat:
License & Acknowledgements
This project is licensed under the Apache-2.0 License. See LICENSE for more information.
Builds upon several excellent open-source efforts, including PyRoki and jaxls for kinematics, OpenPI for policy serving, the LeRobot dataset format, and a vendored mmengine-style config system from MMEngine.

