Skip to main content

EPICA: Epic Trajectory Alignment and Evaluation Toolkit

EPICA is a trajectory alignment and evaluation toolkit.

It provides:

  • trajectory alignment pipeline with public modes se3, posyaw, and sim3
  • a set of CLI tools (traj, ape, rpe, res, config)
  • OpenVINS compatibility entrypoints
  • optional plotting and rerun-based visualization

Architecture

High-level system view:

EPA architecture diagram

EPA has three main surfaces:

  • the main epa / epica pipeline for one GT/EST pair
  • the epa_bench harness for multi-case benchmark runs
  • the ov_eval compatibility layer for legacy-style summaries

trajectory alignment report

APE translation error curve Rerun demo animation

Installation

Create and activate a virtual environment first (recommended):

conda create -n epa python=3.10 -y
conda activate epa

Then install:

pip install epica

Optional extras:

pip install "epica[rerun]"  # rerun visualization
pip install "epica[ros]"    # bag / bag2 / mcap support
pip install "epica[geo]"    # map-related tools

Quick Start

Run one trajectory pair:

epa <gt_file> <est_file>

Example:

epa ./example_data/example_groundtruth.csv ./example_data/example_estimation.txt

Choose an evaluation mode explicitly when needed:

epa ./gt.tum ./estimate.tum --mode se3
epa ./gt.tum ./estimate.tum --mode posyaw
epa ./gt.tum ./estimate.tum --mode sim3

Run a multi-case benchmark:

epa_bench /path/to/cases_root

Input Formats

For one-pair runs, epa <gt_file> <est_file> uses format auto-detection by default.

Supported trajectory inputs:

  • csv / euroc: header-based pose CSV with timestamp, position, and quaternion columns
  • tum: text rows in t tx ty tz qx qy qz qw
  • kitti: text rows with a 3x4 pose matrix
  • bag, bag2, mcap: ROS log inputs; pass --gt-topic and --est-topic

For benchmarks, the cases root should contain benchmark/ and GT/:

cases_root/
├── benchmark/<dataset>/pose/<method>/<sequence>/*_poses.txt
├── benchmark/<dataset>/<method>/<sequence>/trajectory.txt
├── benchmark/<dataset>/<method>/<sequence>_poses.txt
└── GT/**/<sequence>.txt

One <method> directory can contain many sequences, either as sequence files or sequence subdirectories.

GT files can use .txt, .tum, or .csv. The pose/ directory is optional.

Outputs

Single epa run:

  • creates one outputs/run_YYYYMMDD_HHMMSS/ folder
  • typical files inside:
  • plots/
  • metrics.json
  • metrics_summary.csv
  • report_en.md
  • report_zh.md

Multi-case benchmark with epa_bench:

  • creates outputs/<cases_root_name>_bench/run_YYYYMMDD_HHMMSS/
  • typical files and folders inside:
  • summary_public.csv
  • summary.csv
  • summary.md
  • paper_tables/
  • cases/
  • logs/
  • epa_runs/
  • unresolved_cases.csv if some GT mappings cannot be resolved

metrics.json is compact by default. Default EPA metrics include the configured RPE, 1-second time RPE drift, and drift-valid success-rate metrics. Drift-valid segments are detected from local 1-second RPE and positive APE growth/jump checks, with a global accept gate (p05 <= 30 m) to avoid treating globally failed cases as partially valid. Use --save-full-metrics for full per-sample APE/RPE arrays. Use --no-downsample only when you need full-rate solve/evaluation. Benchmark prepared_tum/ files are removed by default; use --keep-prepared when you need them for later case reruns.

Analysis Notebook

For exploratory benchmark analysis, install the analysis extra and open the notebook:

pip install "epica[analysis]"
jupyter notebook notebooks/benchmark_analysis.ipynb

The notebook reads an existing summary.csv, summarizes datasets and methods, ranks suspicious cases, and shows the plots already generated by the benchmark workflow.

Common CLI Toolchain

  • epa / epica: run the main EPA pipeline for one GT/EST pair
  • epa_bench: run the multi-case benchmark harness over a cases root
  • epa_ape: compute APE for one trajectory pair
  • epa_rpe: compute RPE for one trajectory pair
  • epa_traj: inspect, align, sync, and visualize trajectories
  • epa_benchall: run the extended multi-case workflow, including summary plots
  • epa_all: run the extended single-case workflow
  • epa_openvins: run EPA on one or multiple OpenVINS case folders

Documentation Link

For more commands and detailed usage, see the docs:

Maintenance and Contact

This project is still actively maintained.

If you run into any issues, please open an issue at:

Or contact:

Metadata

Release files for epica 0.1.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for epica 0.1.17
File Size Uploaded Provenance Actions
epica-0.1.17.tar.gz 216.4 kB Without provenance Details for epica-0.1.17.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for epica 0.1.17
File Interpreter ABI Platform Actions
epica-0.1.17-py3-none-any.whl Python 3 none any Details for epica-0.1.17-py3-none-any.whl

Total release size: 455.2 kB

Release files / epica-0.1.17.tar.gz

Download URL epica-0.1.17.tar.gz
Size 216.4 kB
Tags Source
SHA-256 checksum
How to use checksums
626271c55ea8d62187bbafd3984e5efcde286f07f0be93013fbfbb416955c98d
BLAKE2b-256 checksum
How to use checksums
1b4e8a852f940c9eae7060bf1cdb34193ff26ef372e8b8b37dc3cb27e2321783
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release files / epica-0.1.17-py3-none-any.whl

Download URL epica-0.1.17-py3-none-any.whl
Size 238.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2e4ad5910a8a402d3519a54171f7b594f7c0fb8df4e26ddcfe3ef6258e38d677
BLAKE2b-256 checksum
How to use checksums
8c2c2a46efeee00bacd136908481775f43bf75a8c3b3987998bce18ac6dd05c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Security for epica 0.1.17

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page