{"id":13601304,"url":"https://github.com/MichaelGrupp/evo","last_synced_at":"2025-04-11T04:30:40.835Z","repository":{"id":37550458,"uuid":"103442898","full_name":"MichaelGrupp/evo","owner":"MichaelGrupp","description":"Python package for the evaluation of odometry and SLAM","archived":false,"fork":false,"pushed_at":"2024-10-29T09:19:19.000Z","size":7380,"stargazers_count":3465,"open_issues_count":9,"forks_count":753,"subscribers_count":50,"default_branch":"master","last_synced_at":"2024-10-29T11:21:00.829Z","etag":null,"topics":["benchmark","euroc","evaluation","kitti","mapping","metrics","odometry","robotics","ros","ros2","slam","trajectory","trajectory-analysis","trajectory-evaluation","tum"],"latest_commit_sha":null,"homepage":"https://michaelgrupp.github.io/evo/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MichaelGrupp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-13T19:40:00.000Z","updated_at":"2024-10-29T09:19:20.000Z","dependencies_parsed_at":"2023-02-14T12:16:59.030Z","dependency_job_id":"ebe0bb3f-e34a-4c1c-bacf-2e20d294e392","html_url":"https://github.com/MichaelGrupp/evo","commit_stats":{"total_commits":394,"total_committers":21,"mean_commits":"18.761904761904763","dds":0.3857868020304569,"last_synced_commit":"ceebda726108efbd019e3b81ff188719dd358424"},"previous_names":[],"tags_count":101,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelGrupp%2Fevo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelGrupp%2Fevo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelGrupp%2Fevo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelGrupp%2Fevo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MichaelGrupp","download_url":"https://codeload.github.com/MichaelGrupp/evo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222989571,"owners_count":17069302,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","euroc","evaluation","kitti","mapping","metrics","odometry","robotics","ros","ros2","slam","trajectory","trajectory-analysis","trajectory-evaluation","tum"],"created_at":"2024-08-01T18:01:00.188Z","updated_at":"2025-04-11T04:30:40.806Z","avatar_url":"https://github.com/MichaelGrupp.png","language":"Python","funding_links":[],"categories":["Tools","Localization and State Estimation","Localization","Python"],"sub_categories":["Australia","Lidar and Point Cloud Processing","Point Cloud Processing"],"readme":"# evo \n\n***Python package for the evaluation of odometry and SLAM***\n\n| Linux / macOS / Windows / ROS / ROS2 |\n| :---: |\n| [![Build Status](https://dev.azure.com/michl2222/michl2222/_apis/build/status/MichaelGrupp.evo?branchName=master)](https://dev.azure.com/michl2222/michl2222/_build/latest?definitionId=1\u0026branchName=master) |\n\nThis package provides executables and a small library for handling, evaluating and comparing the trajectory output of odometry and SLAM algorithms.\n\nSupported trajectory formats:\n\n* 'TUM' trajectory files\n* 'KITTI' pose files\n* 'EuRoC MAV' (.csv groundtruth and TUM trajectory file)\n* ROS and ROS2 bagfile with `geometry_msgs/PoseStamped`, `geometry_msgs/TransformStamped`, `geometry_msgs/PoseWithCovarianceStamped`, `geometry_msgs/PointStamped` or `nav_msgs/Odometry` topics or [TF messages](https://github.com/MichaelGrupp/evo/wiki/Formats#bag---ros-bagfile)\n\nSee [here](https://github.com/MichaelGrupp/evo/wiki/Formats) for more infos about the formats.\n\n\u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_ORB_map.png\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_ORB_map.png\" alt=\"evo\" height=\"175\" border=\"5\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_violin.png\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_violin.png\" alt=\"evo\" height=\"175\" border=\"5\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/markers.png\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/markers.png\" alt=\"evo\" height=\"175\" border=\"5\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/map_tile_osm.png\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/map_tile_osm.png\" alt=\"evo\" height=\"175\" border=\"5\" /\u003e\n\u003c/a\u003e\n\n---\n\n## Why?\n\nevo has several advantages over other public benchmarking tools:\n\n* common tools for different formats\n* algorithmic options for association, alignment, scale adjustment for monocular SLAM etc.\n* flexible options for output, [plotting](https://github.com/MichaelGrupp/evo/wiki/Plotting) or export (e.g. LaTeX plots or Excel tables)\n* a powerful, configurable CLI that can cover many use cases\n* modular `core` and `tools` libraries for custom extensions\n* faster than other established Python-based tools ([see here](https://github.com/MichaelGrupp/evo/blob/master/doc/performance.md))\n\n**What it's not:** a 1-to-1 re-implementation of a particular evaluation protocol tailored to a specific dataset. \n\n---\n\n## Installation / Upgrade\n\nInstallation is easy-peasy if you're familiar with this: https://xkcd.com/1987/#\n\nevo supports **Python 3.8+**.\nYou might also want to use a [virtual environment](https://github.com/MichaelGrupp/evo/blob/master/doc/install_in_virtualenv.md).\n\n### From PyPi\nIf you just want to use the executables of the latest release version, the easiest way is to run:\n```bash\npip install evo\n```\nThis will download the package and its dependencies from [PyPI](https://pypi.org/project/evo/) and install or upgrade them. If you want, you can subscribe to new releases via https://libraries.io/pypi/evo.\n\nTo upgrade to a newer version: `pip install --upgrade evo`\n\n### From Source\nRun this in the repository's base folder:\n```bash\npip install --editable .\n```\n\n### Tab completion\n\nTab completion is supported via the [argcomplete](https://github.com/kislyuk/argcomplete/) package. Run `activate-global-python-argcomplete` after the installation to use it.\n\n### Dependencies\n\n**Python packages**\n\nevo has some required dependencies that are ***automatically resolved*** during installation with pip.\nSee the `pyproject.toml` file for all details.\n\n**PyQt5 (optional)**\n\nPyQt5 will give you the enhanced GUI for plot figures from the \"*Qt5Agg*\" matplotlib backend (otherwise: \"*TkAgg*\"). If PyQt5 is already installed when installing this package, it will be used as a default (see `evo_config show`). To change the plot backend afterwards, run `evo_config set plot_backend Qt5Agg`.\n\n**ROS (optional)**\n\nSome ROS-related features require a ROS installation, see [here](http://www.ros.org/). We are testing this package with ROS Noetic and Jazzy.\n\n\u003e Reading ROS bag files works also without a ROS installation thanks to the great [rosbags](https://pypi.org/project/rosbags/) package that is installed together with evo. This allows you also to read ROS 1 \u0026 2 bags even if you don't have one of those ROS distros installed. (except for reading `/tf` topics, because there we need the buffer implementation from ROS)\n\n**contextily (optional)**\n\n[contextily](https://contextily.readthedocs.io/en/latest/index.html) is required for [adding map tiles](https://github.com/MichaelGrupp/evo/wiki/Plotting#geographic-map-tiles) to plots of geo-referenced data.\n\n---\n\n## Command Line Interface\n\nAfter installation with pip, the following executables can be called globally from your command-line:\n\n**Metrics:**\n\n* `evo_ape` - absolute pose error\n* `evo_rpe` - relative pose error\n\n**Tools:**\n\n* `evo_traj` - tool for analyzing, plotting or exporting one or more trajectories\n* `evo_res` - tool for comparing one or multiple result files from `evo_ape` or `evo_rpe`\n* `evo_fig` - (experimental) tool for re-opening serialized plots (saved with `--serialize_plot`)\n* `evo_config` - tool for global settings and config file manipulation\n\nCall the commands with `--help` to see the options, e.g. `evo_ape --help`. Tab-completion of command line parameters is available on UNIX-like systems.\n\n**More documentation**\nCheck out the [Wiki on GitHub](https://github.com/MichaelGrupp/evo/wiki).\n\n---\n\n## Example Workflow\n\nThere are some example trajectories in the source folder in `test/data`.\n\n\n### 1.) Plot multiple trajectories\n\n  Here, we plot two KITTI pose files and the ground truth using `evo_traj`:\n  ```\n  cd test/data\n  evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz\n  ```\n\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/traj_demo.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/traj_demo.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/traj_demo_xyz.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/traj_demo_xyz.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n\n### 2.) Run a metric on trajectories\n\n  For example, here we calculate the absolute pose error for two trajectories from ORB-SLAM and S-PTAM using `evo_ape` (`KITTI_00_gt.txt` is the reference (ground truth)) and plot and save the individual results to .zip files for `evo_res`:\n\n  *First trajectory (ORB Stereo):*\n\n  ```\n  mkdir results\n  evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/ORB.zip\n  ```\n\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_ORB_raw.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_ORB_raw.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_ORB_map.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_ORB_map.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n\n  *Second trajectory (S-PTAM):*\n  \n  ```\n  evo_ape kitti KITTI_00_gt.txt KITTI_00_SPTAM.txt -va --plot --plot_mode xz --save_results results/SPTAM.zip\n  ```\n\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_S-PTAM_raw.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_S-PTAM_raw.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_S-PTAM_map.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/ape_demo_S-PTAM_map.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n\n\n### 3.) Process multiple results from a metric\n\n  `evo_res` can be used to compare multiple result files from the metrics, i.e.:\n  * print infos and statistics (default)\n  * plot the results\n  * save the statistics in a table\n\n  Here, we use the results from above to generate a plot and a table:\n  ```\n  evo_res results/*.zip -p --save_table results/table.csv\n  ```\n\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_raw.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_raw.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_dist.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_dist.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_stats.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_stats.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_box.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_box.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_violin.png\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/MichaelGrupp/evo/master/doc/assets/res_violin.png\" alt=\"evo\" height=\"200\" border=\"5\" /\u003e\n  \u003c/a\u003e\n\n---\n\n## IPython / Jupyter Resources\n\nFor an interactive source code documentation, open the [Jupyter notebook](http://jupyter.readthedocs.io/en/latest/install.html) `metrics_tutorial.ipynb` in the `notebooks` folder of the repository. More infos on Jupyter notebooks: see [here](https://github.com/MichaelGrupp/evo/blob/master/doc/jupyter_notebook.md)\n\nIf you have IPython installed, you can launch an IPython shell with a custom evo profile with the command `evo_ipython`.\n\n---\n\n## Contributing Utilities\n\nA few \"inoffical\" scripts for special use-cases are collected  in the `contrib/` directory of the repository. They are inofficial in the sense that they don't ship with the package distribution and thus aren't regularly tested in continuous integration.\n\n---\n\n## Trouble\n*\"😱, this piece of 💩 software doesn't do what I want!!1!1!!\"*\n\n**First aid:**\n* append `-h`/ `--help` to your command\n* check the [Wiki](https://github.com/MichaelGrupp/evo/wiki)\n* check the [previous issues](https://github.com/MichaelGrupp/evo/issues?q=is%3Aissue+is%3Aclosed)\n* open a [new issue](https://github.com/MichaelGrupp/evo/issues)\n\n---\n\n## Contributing\n\nPatches are welcome, preferably as pull requests.\n\n## License\n\n[GPL-3.0 or later](https://www.gnu.org/licenses/gpl-3.0.html)\n\nIf you use this package for your research, a footnote with the link to this repository is appreciated: `github.com/MichaelGrupp/evo`.\n\n...or, for citation with BibTeX:\n```\n@misc{grupp2017evo,\n  title={evo: Python package for the evaluation of odometry and SLAM.},\n  author={Grupp, Michael},\n  howpublished={\\url{https://github.com/MichaelGrupp/evo}},\n  year={2017}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMichaelGrupp%2Fevo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMichaelGrupp%2Fevo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMichaelGrupp%2Fevo/lists"}