Skip to the content.


Python package for the evaluation of odometry and SLAM

Linux / macOS / Windows / ROS / ROS2
Build Status

This package provides executables and a small library for handling, evaluating and comparing the trajectory output of odometry and SLAM algorithms.

Supported trajectory formats:

See here for more infos about the formats.

evo evo evo evo


evo has several advantages over other public benchmarking tools:

What it’s not: a 1-to-1 re-implementation of a particular evaluation protocol tailored to a specific dataset.

Installation / Upgrade

Installation is easy-peasy if you’re familiar with this:

evo supports Python 3.8+. The last evo version that supports Python 2.7 is 1.12.0. You might also want to use a virtual environment.

From PyPi

If you just want to use the executables of the latest release version, the easiest way is to run:

pip install evo --upgrade --no-binary evo

This will download the package and its dependencies from PyPI and install or upgrade them. Depending on your OS, you might be able to use pip2 or pip3 to specify the Python version you want. Tab completion for Bash terminals is supported via the argcomplete package on most UNIX systems - open a new shell after the installation to use it (without --no-binary evo the tab completion might not be installed properly). If you want, you can subscribe to new releases via

From Source

Run this in the repository’s base folder:

pip install --editable . --upgrade --no-binary evo


Python packages

evo has some required dependencies that are automatically resolved during installation with pip. They are specified in the install_requires part of the file.

PyQt5 (optional)

PyQt5 will give you the enhanced GUI for plot figures from the “Qt5Agg” matplotlib backend (otherwise: “TkAgg”). If PyQt5 is already installed when installing this package, it will be used as a default (see evo_config show). To change the plot backend afterwards, run evo_config set plot_backend Qt5Agg.

ROS (optional)

Some ROS-related features require a ROS installation, see here. We are testing this package with ROS Noetic and Galactic. Previous versions (<= 1.12.0) work with Melodic, Kinetic and Indigo.

Command Line Interface

After installation with or from pip, the following executables can be called globally from your command-line:



Call the commands with --help to see the options, e.g. evo_ape --help. Tab-completion of command line parameters is available on UNIX-like systems.

More documentation Check out the Wiki on GitHub.

Example Workflow

There are some example trajectories in the source folder in test/data.

1.) Plot multiple trajectories

Here, we plot two KITTI pose files and the ground truth using evo_traj:

  cd test/data
  evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

evo evo

2.) Run a metric on trajectories

For example, here we calculate the absolute pose error for two trajectories from ORB-SLAM and S-PTAM using evo_ape (KITTI_00_gt.txt is the reference (ground truth)) and plot and save the individual results to .zip files for evo_res:

First trajectory (ORB Stereo):

  mkdir results
  evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/

evo evo

Second trajectory (S-PTAM):

  evo_ape kitti KITTI_00_gt.txt KITTI_00_SPTAM.txt -va --plot --plot_mode xz --save_results results/

evo evo

3.) Process multiple results from a metric

evo_res can be used to compare multiple result files from the metrics, i.e.:

Here, we use the results from above to generate a plot and a table:

  evo_res results/*.zip -p --save_table results/table.csv

evo evo evo evo evo

IPython / Jupyter Resources

For an interactive source code documentation, open the Jupyter notebook metrics_tutorial.ipynb in the notebooks folder of the repository. More infos on Jupyter notebooks: see here

If you have IPython installed, you can launch an IPython shell with a custom evo profile with the command evo_ipython.

Contributing Utilities

A few “inoffical” scripts for special use-cases are collected in the contrib/ directory of the repository. They are inofficial in the sense that they don’t ship with the package distribution and thus aren’t regularly tested in continuous integration.


“:scream:, this piece of :shit: software doesn’t do what I want!!1!1!!”

First aid:


Patches are welcome, preferably as pull requests.


GPL-3.0 or later

If you use this package for your research, a footnote with the link to this repository is appreciated:

…or, for citation with BibTeX:

  title={evo: Python package for the evaluation of odometry and SLAM.},
  author={Grupp, Michael},