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 輸出進行基準測試。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案