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). evo normalises 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)

  1. Plot trajectories
    cd test/data
    evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
    
    Produces side‑by‑side plots of the two SLAM runs against ground truth.
  2. Run a metric
    mkdir results
    evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz \
            --save_results results/ORB.zip
    
    Calculates APE, shows a plot, and stores the detailed output for later aggregation.
  3. Compare multiple results
    evo_res results/*.zip -p --save_table results/table.csv
    
    Generates summary statistics, violin/box plots, and a CSV table.

Extensibility

  • The package is split into a core library (metric implementations, trajectory handling) and tools (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 --help on each command.
  • A detailed wiki on GitHub covers supported formats, plotting options, and Rerun integration.
  • Jupyter notebook metrics_tutorial.ipynb demonstrates interactive use.

License

  • GPL‑3.0‑or‑later. If you use evo in 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