Eva is an extendable, versatile, and adaptable robot infrastructure for the Franka Emika Panda, featuring:
- Modular design with atomic components, prioritizing flexibility and customizability.
- Lightweight and simple interfaces via terminal and live camera feed.
- Robust, fault-tolerant components supporting continuous operation.
This project is built on DROID. Some components are completely revamped while others are lightly modified, but the hardware setup and data format remain unchanged.
The DROID software and hardware setup form the foundation for Eva. Please install them via instructions here.
Afterwards, run the following:
git clone https://github.com/willjhliang/eva.git
cd eva
conda create -n eva python=3.10
conda activate eva
pip install -r requirements.txt
./sync_infra.sh
Following the DROID setup, Eva runs on two machines:
- NUC: Handles low-level control of the Franka Emika with a server built on Polymetis.
- Laptop: Handles high-level logic (policy inference, teleoperation, etc) with a runner that executes user scripts.
We recommend the following tmux setup:
+-------------------------+-------------------------+
| | |
| Server (NUC) | Runner (Laptop) |
+-------------------------+ |
| Scripts (Laptop) | |
| | |
+-------------------------+-------------------------+
- On the NUC, run
cd eva/eva/robot
./launch_server.sh- On the laptop, run
conda activate eva
cd eva/scripts
python start_runner.pyAfter the server and runner are started, you can execute scripts found in eva/scripts/. Some of the main functions include:
collect_trajectory.py: Collects teleoperated trajectories saved ineva/data/.play_trajectory.py: Replays a selected trajectory.process_trajectory.py: Processes the compressed trajectory data into a more usable format.calibrate_camera.py: Calibrates a camera using the Charuco board.check_calibration.py: Overlays a gripper annotation on the camera feed.take_pictures.py: Saves camera pictures toeva/data/images.reset_robot.py: Resets the robot pose to default.
Each script has its own specific arguments as well as a set of general-purpose arguments (found in eva.py). Some crucial ones are:
--controller: Sets the control method for the robot, such as teleoperation controllers (e.g., Occulus) or learned policies.--disable_post_process: Disables online trajectory post-processing, saving space and freeing compute.--record_depthand--record_pcd: Records additional depth and point cloud observations besides the standard RGB.
Code development should be entirely done on the laptop, and to sync the codebase with the NUC, run ./sync_infra.sh. Remember to restart the NUC server or runner if code changes affect them.
If you are using Eva and plan to make significant changes, please work in a copy of this directory (e.g., eva_wliang).