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)会自动安装,但核心功能在没有它们的情况下也可以运行。
典型工作流程(示例)
- 绘制轨迹
生成两个 SLAM 运行结果相对于真值 (ground truth) 的并排图表。cd test/data evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz - 运行指标
计算 APE,显示图表,并存储详细输出以便后续聚合。mkdir results evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz \ --save_results results/ORB.zip - 比较多个结果
生成摘要统计、小提琴图/箱线图以及 CSV 表格。evo_res results/*.zip -p --save_table results/table.csv
可扩展性
- 该包分为
core库(指标实现、轨迹处理)和tools(CLI 封装)。您可以在自己的 Python 代码中导入该库,以构建自定义的评估流水线或与其他研究框架集成。
文档与帮助
- 每个命令通过
--help提供完整的 CLI 参考。 - GitHub 上的详细 Wiki 涵盖了支持的格式、绘图选项和 Rerun 集成。
- Jupyter notebook
metrics_tutorial.ipynb展示了交互式用法。
许可证
- GPL-3.0 或更高版本。如果您在学术工作中使用
evo,README 要求进行引用(提供 BibTeX)。
简而言之,evo 是一个成熟且经过充分测试的工具箱,让机器人研究人员无需编写自定义解析器或绘图代码,即可快速对里程计/SLAM 输出进行基准测试。
相关
- 项目
- 项目
- 项目
- 项目
- 项目