evo
Python package for the evaluation of odometry and SLAM
What it is and what it does
evo is a Python package for evaluating and benchmarking odometry and SLAM algorithm outputs. It reads trajectory data from multiple formats—TUM, KITTI, EuRoC, and ROS/ROS2 bag files—and provides a suite of CLI tools and a modular library for computing metrics (absolute and relative pose error), aligning trajectories, adjusting scale, and generating plots and statistical exports. The package is designed for researchers and roboticists who need to compare algorithm performance across standardized datasets or custom experiments.
The tool combines a command-line interface (evo_ape, evo_rpe, evo_traj, evo_res, evo_config) with a Python library for custom analysis. It depends on standard scientific Python stack components—numpy, scipy, pandas, matplotlib, seaborn—plus rosbags for ROS bag support and pillow for image handling. Installation is straightforward via pip into a virtual environment; optional PyQt6 improves the plotting GUI, and optional packages like contextily and rerun-sdk extend visualization capabilities.
Use it for:
- Compute absolute and relative pose error metrics to benchmark SLAM or visual odometry algorithms against ground truth.
- Plot and compare multiple estimated trajectories side-by-side to visualize algorithm differences.
- Export trajectory statistics and error metrics to CSV or LaTeX tables for research papers.
- Process ROS bag files containing pose or odometry messages without requiring a full ROS installation.
- Align and scale-adjust monocular SLAM output to ground truth before metric calculation.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
evo evaluates and compares trajectory output from odometry and SLAM algorithms, supporting multiple formats (TUM, KITTI, EuRoC, ROS bags) and providing CLI tools for metrics, plotting, and export.
Yes. evo is actively maintained, has no known vulnerabilities, low install friction, and broad Python version support (3.10–3.14). The GPLv3 copyleft license is a constraint only if you plan to distribute proprietary derivatives. Install it if you need to evaluate odometry or SLAM trajectories; the CLI is straightforward and the library is modular for custom analysis.
Install
evo on PyPI
pip
pip install evouv
uv add evopoetry
poetry add evoInstalling evo
Before you install
Low install friction with a pure-wheel distribution. Active maintenance (last commit 2026-08-14, release 27 days ago) and broad Python support (3.10–3.14). Requires Python 3.10+; 14 runtime dependencies including numpy, pandas, scipy, and matplotlib are automatically resolved.
License in practice
Licensed under GNU General Public License v3 (GPLv3), a copyleft license. Any derivative work or distribution must also be licensed under GPLv3 or later; proprietary use is not permitted.
Quickstart
pip install evo
# Plot trajectories
evo_traj kitti trajectory1.txt trajectory2.txt --ref=ground_truth.txt -p
# Calculate absolute pose error
evo_ape kitti ground_truth.txt estimated_trajectory.txt -va --plot
Requires Python 3.10 or later. Optional PyQt6 for enhanced GUI; otherwise uses TkAgg backend. ROS bag file reading works without ROS installation via rosbags, but reading /tf topics requires ROS.
Verify before relying
- Whether the package's performance advantage over other Python-based tools remains current as of version 1.37.0.
- Specific memory or computational limits when processing very large trajectory datasets.
- Whether all optional dependencies (contextily, rerun-sdk) are automatically installed or require manual installation.
Package facts
| License | GNU General Public License v3 (GPLv3) (copyleft) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 14 — argcomplete, colorama, matplotlib, natsort, numexpr, numpy, packaging, pandas, pillow, pygments, pyyaml, rosbags, scipy, seaborn |
| Maintenance | actively maintained — 27 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 251,508/month — #8,580 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: evo-1.37.0-py3-none-any.whl
Keywords: SLAM, evaluation, laser, metric, odometry, robotics, trajectory, vision, visual
Tags
More Scientific/Engineering packages
NumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
pandaspandas provides fast, flexible data structures…
permissive · top 100 on PyPI
scipyscipy provides numerical algorithms for…
permissive · top 100 on PyPI
scikit-learnscikit-learn provides a comprehensive Python…
permissive · top 1,000 on PyPI
dilldill extends Python's pickle module to…
permissive · top 1,000 on PyPI
multiprocessMultiprocess is an enhanced fork of Python's…
permissive · top 1,000 on PyPI
mplibMPlib provides motion planning algorithms for…
permissive · top 15,000 on PyPI
toppraComputes time-optimal path parameterization for…
permissive · top 15,000 on PyPI
pinPython interface to a C++ rigid-body dynamics…
permissive · top 5,000 on PyPI
libpinocchiolibpinocchio provides efficient rigid body…
permissive · top 15,000 on PyPI
python-motion-planningImplements motion planning algorithms including…
copyleft · top 15,000 on PyPI
agentevalsProvides evaluators and utilities to assess…
permissive · top 15,000 on PyPI
strands-agents-evalsStrands Evals SDK provides a comprehensive…
permissive · top 15,000 on PyPI
gtsamGTSAM is a Python wrapper around a C++ library…
permissive · top 15,000 on PyPI