MichaelGrupp/evo

Python package for the evaluation of odometry and SLAM

evo – 里程计与 SLAM 评估工具 (Python)

功能简介

  • 一个 Python 包,提供命令行工具和小型库,用于加载、比较和可视化里程计或 SLAM 系统生成的轨迹。
  • 适用于 Linux、macOS、Windows,可以直接从 ROS 1/ROS 2 bag 文件中读取数据。

为什么需要它

  • 不同的 SLAM/里程计流水线会以多种格式输出轨迹(TUM、KITTI、EuRoC、ROS topics、bag 文件)。evo 可以规范这些格式,以便您可以进行并排评估。
  • 实现了常见的误差指标,如绝对位姿误差 (APE) 和相对位姿误差 (RPE),并提供对齐、尺度校正(对单目 SLAM 非常有用)和轨迹关联的选项。
  • 生成出版级别的图表(2D、3D、地图瓦片、兼容 LaTeX)并可以将结果导出为 CSV/Excel 表格。
  • 可选集成:
    • 用于更丰富的 GUI 后端的 PyQt6
    • 用于添加地理地图瓦片的 contextily
    • 用于将结果流式传输到 Rerun 可视化工具的 rerun-sdk

核心组件

工具 用途
evo_ape 计算参考轨迹与一个或多个估计值之间的绝对位姿误差。
evo_rpe 计算相对位姿误差(固定距离/角度内的漂移)。
evo_traj 绘制、分析或导出轨迹;支持多种输出格式和地图叠加层。
evo_res 聚合多个指标结果文件,生成摘要统计和对比图表。
evo_config 全局配置(例如,绘图后端)。
evo_ipython 启动预加载了该库的 IPython Shell,用于交互式探索。

安装

# 推荐:安装到隔离环境 (venv, uv, pipx 等)
pip install evo          # 从 PyPI 获取 – 获取最新的稳定版本
# 或者,用于开发:
git clone https://github.com/MichaelGrupp/evo.git
cd evo
pip install --editable.
  • 需要 Python 3.10+。
  • 如果您需要,可选依赖项(PyQt6, contextily, rerun-sdk, ROS)会自动安装,但核心功能在没有它们的情况下也可以运行。

典型工作流程(示例)

  1. 绘制轨迹
    cd test/data
    evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
    
    生成两个 SLAM 运行结果相对于真值 (ground truth) 的并排图表。
  2. 运行指标
    mkdir results
    evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz \
            --save_results results/ORB.zip
    
    计算 APE,显示图表,并存储详细输出以便后续聚合。
  3. 比较多个结果
    evo_res results/*.zip -p --save_table results/table.csv
    
    生成摘要统计、小提琴图/箱线图以及 CSV 表格。

可扩展性

  • 该包分为 core 库(指标实现、轨迹处理)和 tools(CLI 封装)。您可以在自己的 Python 代码中导入该库,以构建自定义的评估流水线或与其他研究框架集成。

文档与帮助

  • 每个命令通过 --help 提供完整的 CLI 参考。
  • GitHub 上的详细 Wiki 涵盖了支持的格式、绘图选项和 Rerun 集成。
  • Jupyter notebook metrics_tutorial.ipynb 展示了交互式用法。

许可证

  • GPL-3.0 或更高版本。如果您在学术工作中使用 evo,README 要求进行引用(提供 BibTeX)。

简而言之,evo 是一个成熟且经过充分测试的工具箱,让机器人研究人员无需编写自定义解析器或绘图代码,即可快速对里程计/SLAM 输出进行基准测试。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目