MichaelGrupp/evo
Python package for the evaluation of odometry and SLAM
evo – Evaluation tools for odometry & SLAM (Python)
What it is
- A Python package that provides command‑line tools and a small library for loading, comparing, and visualising trajectories produced by odometry or SLAM systems.
- Works on Linux, macOS, Windows and can read data directly from ROS 1/ROS 2 bag files.
Why you might need it
- Different SLAM/odometry pipelines output trajectories in many formats (TUM, KITTI, EuRoC, ROS topics, bag files).
evonormalises these formats so you can evaluate them side‑by‑side. - Implements common error metrics such as Absolute Pose Error (APE) and Relative Pose Error (RPE) with options for alignment, scale correction (useful for monocular SLAM), and trajectory association.
- Generates publication‑ready plots (2‑D, 3‑D, map‑tiled, LaTeX‑compatible) and can export results as CSV/Excel tables.
- Optional integrations:
- PyQt6 for a richer GUI backend.
- contextily for adding geographic map tiles.
- rerun‑sdk for streaming results to the Rerun visualiser.
Key components
| Tool | Purpose |
|---|---|
evo_ape |
Compute absolute pose error between a reference trajectory and one or more estimates. |
evo_rpe |
Compute relative pose error (drift over a fixed distance/angle). |
evo_traj |
Plot, analyse, or export trajectories; supports many output formats and map overlays. |
evo_res |
Aggregate multiple metric result files, produce summary statistics and comparative plots. |
evo_config |
Global configuration (e.g., plot backend). |
evo_ipython |
Launch an IPython shell pre‑loaded with the library for interactive exploration. |
Installation
# Recommended: install into an isolated environment (venv, uv, pipx, etc.)
pip install evo # from PyPI – gets the latest stable release
# or, for development:
git clone https://github.com/MichaelGrupp/evo.git
cd evo
pip install --editable .
- Requires Python 3.10+.
- Optional dependencies (PyQt6, contextily, rerun‑sdk, ROS) are installed automatically if you request them, but the core functionality works without them.
Typical workflow (example)
- Plot trajectories
Produces side‑by‑side plots of the two SLAM runs against ground truth.cd test/data evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz - Run a metric
Calculates APE, shows a plot, and stores the detailed output for later aggregation.mkdir results evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz \ --save_results results/ORB.zip - Compare multiple results
Generates summary statistics, violin/box plots, and a CSV table.evo_res results/*.zip -p --save_table results/table.csv
Extensibility
- The package is split into a
corelibrary (metric implementations, trajectory handling) andtools(CLI wrappers). You can import the library in your own Python code to build custom evaluation pipelines or integrate with other research frameworks.
Documentation & help
- Full CLI reference via
--helpon each command. - A detailed wiki on GitHub covers supported formats, plotting options, and Rerun integration.
- Jupyter notebook
metrics_tutorial.ipynbdemonstrates interactive use.
License
- GPL‑3.0‑or‑later. If you use
evoin academic work, the README asks for a citation (BibTeX provided).
In short, evo is a mature, well‑tested toolbox that lets robotics researchers quickly benchmark odometry/SLAM outputs without writing custom parsers or plotting code.
Related
- Project
- Project
- Project
- Project
- Project