// the find
MichaelGrupp/evo
Python package for the evaluation of odometry and SLAM
evo is the de facto standard Python tool for benchmarking odometry and SLAM algorithms. It computes APE and RPE metrics against ground truth, handles all major trajectory formats (TUM, KITTI, EuRoC, ROS/ROS2 bags), and produces publication-ready plots. If you're doing robotics research and need to report localization accuracy, this is what everyone else is using too.
Format support is genuinely broad — one tool covers TUM, KITTI, EuRoC, and ROS 1/2 bags without needing a separate parser per dataset. The rosbags dependency means you can read ROS bags without a ROS installation, which matters in CI. The core library is importable, so you can compute APE/RPE programmatically in your own scripts rather than being locked into the CLI. Performance benchmark is included in the docs and the authors claim it's faster than the TUM reference tools, which checks out given the NumPy-heavy trajectory math.
GPL-3.0 is a hard stop for anyone embedding this in commercial tooling — the license forces your whole application open, not just modifications to evo itself. There's no support for uncertainty-aware evaluation; if your SLAM outputs covariance estimates, evo ignores them entirely and treats all poses equally. The contrib/ directory is explicitly untested and unsupported, which is where several useful format converters live — not great for reproducibility in papers. Timestamp association uses a max-difference threshold that works fine for well-synchronized data but silently drops poses on poorly timestamped sequences, which can skew your error metrics without any warning.