### Install Evo from PyPI Source: https://github.com/michaelgrupp/evo/blob/master/README.md Use this command to install the latest release version of evo from PyPI. This is the easiest way to get started with the executables. ```bash pip install evo ``` -------------------------------- ### Run Rerun Example Script Source: https://github.com/michaelgrupp/evo/blob/master/examples/rerun_example/README.md Clone the evo repository and execute the provided Python script to start sending data to the Rerun viewer. ```bash python rerun_example.py ``` -------------------------------- ### Install Evo from Source Source: https://github.com/michaelgrupp/evo/blob/master/README.md Install evo directly from the source code repository. This is useful for development or when working with a specific branch. ```bash pip install --editable . ``` -------------------------------- ### Install Rerun SDK Source: https://github.com/michaelgrupp/evo/blob/master/examples/rerun_example/README.md Install the rerun SDK using pip. Ensure this is done in the same Python environment where evo is installed. ```bash pip install rerun-sdk ``` -------------------------------- ### Check evo installation Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Verifies that evo is installed correctly by running the evo command-line tool. ```shell evo ``` -------------------------------- ### Install Jupyter and Widgets Source: https://github.com/michaelgrupp/evo/blob/master/doc/jupyter_notebook.md Installs Jupyter and enables the widgets extension for notebooks. Ensure pip is available. ```bash pip install jupyter jupyter nbextension enable --py --sys-prefix widgetsnbextension ``` -------------------------------- ### Install evo from source Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Installs evo in editable mode from its source code. Navigate to the evo base source folder first. ```shell cd # go to evo base source folder that contains pyproject.toml pip install --editable . ``` -------------------------------- ### Install evo package Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Installs the evo package and its dependencies within the active virtual environment using pip. ```shell pip install evo ``` -------------------------------- ### Install virtualenvwrapper on Ubuntu Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Installs the virtualenv and virtualenvwrapper packages using apt. Ensure you are on an Ubuntu or Debian-based system. ```shell sudo apt install python3-virtualenvwrapper ``` -------------------------------- ### Start Local Jupyter Notebook Server Source: https://github.com/michaelgrupp/evo/blob/master/doc/jupyter_notebook.md Starts a Jupyter notebook server in the current directory and automatically opens it in your default web browser. ```bash jupyter notebook ``` -------------------------------- ### Install Required Packages Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Installs ipympl and ipywidgets for interactive plots and widgets in Jupyter environments. ```bash pip install ipympl ipywidgets ``` -------------------------------- ### Evo Configuration File Content Source: https://github.com/michaelgrupp/evo/wiki/Configuration Example content of a JSON configuration file generated by evo_config. Parameters from this file take precedence over command line options. ```json { "delta": 1.0, "delta_unit": "m", "plot": true, "pose_relation": "angle_deg", "verbose": true } ``` -------------------------------- ### Upgrade Evo from PyPI Source: https://github.com/michaelgrupp/evo/blob/master/README.md Run this command to upgrade your existing evo installation to the latest version available on PyPI. ```bash pip install --upgrade evo ``` -------------------------------- ### KITTI Dataset Pose Format Example Source: https://github.com/michaelgrupp/evo/wiki/Formats Illustrates the KITTI dataset pose format, where each line represents the first three rows of a 4x4 homogeneous pose matrix flattened into a single line. ```text a b c d e f g h i j k l ``` -------------------------------- ### Absolute Pose Error (APE) Example Source: https://github.com/michaelgrupp/evo/wiki/Metrics Example of calculating Absolute Pose Error using evo_ape. Includes alignment option. ```bash evo_ape tum reference.txt estimate.txt --align ``` -------------------------------- ### Load Trajectory Files Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Loads two example trajectory files in TUM format using the file_interface module. ```python from evo.tools import file_interface ref_file = "../test/data/freiburg1_xyz-groundtruth.txt" est_file = "../test/data/freiburg1_xyz-rgbdslam_drift.txt" traj_ref = file_interface.read_tum_trajectory_file(ref_file) traj_est = file_interface.read_tum_trajectory_file(est_file) ``` -------------------------------- ### Start Remote Jupyter Notebook Server Source: https://github.com/michaelgrupp/evo/blob/master/doc/jupyter_notebook.md Starts a Jupyter notebook server on the remote machine without opening a browser, specifying a port for access. Ensure the specified port is not in use. ```bash jupyter notebook --no-browser --port=8888 ``` -------------------------------- ### Activate the virtual environment Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Activates the 'evaluation' virtual environment, making its isolated Python installation active. ```shell workon evaluation ``` -------------------------------- ### Relative Pose Error (RPE) Example Source: https://github.com/michaelgrupp/evo/wiki/Metrics Example of calculating Relative Pose Error using evo_rpe. Demonstrates pose relation and delta unit options. ```bash evo_rpe tum reference.txt estimate.txt --pose_relation angle_deg --delta 1 --delta_unit m ``` -------------------------------- ### Generate Jupyter Notebook Configuration Source: https://github.com/michaelgrupp/evo/blob/master/doc/jupyter_notebook.md Generates the Jupyter notebook configuration file. This is a one-time setup step for disabling token authentication. ```bash jupyter notebook --generate-config ``` -------------------------------- ### Compare APE with evo Source: https://github.com/michaelgrupp/evo/blob/master/doc/performance.md Evaluates Absolute Pose Error (APE) using the evo tool with SE(3) Umeyama alignment. This example highlights evo's improved efficiency. ```bash $ time evo_ape tum fr2_desk_groundtruth.txt fr2_desk_ORB.txt --align APE w.r.t. translation part (m) (with SE(3) Umeyama alignment) max 0.024300 mean 0.007492 median 0.007415 min 0.000350 rmse 0.008119 sse 0.143305 std 0.003129 real 0m0.735s user 0m0.764s sys 0m0.272s ``` -------------------------------- ### Enable Start and End Markers Source: https://github.com/michaelgrupp/evo/wiki/Plotting Activates markers to indicate the start (circle) and end (cross) points of trajectories in plots. ```bash evo_config set plot_start_end_markers true ``` -------------------------------- ### TUM RGB-D Dataset Trajectory Format Example Source: https://github.com/michaelgrupp/evo/wiki/Formats Shows the TUM RGB-D dataset trajectory format, where each line contains timestamp, position (x, y, z), and quaternion orientation (qx, qy, qz, qw). ```text timestamp x y z q_x q_y q_z q_w ``` -------------------------------- ### Delete virtual environment Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Removes the 'evaluation' virtual environment and all its installed packages. ```shell rmvirtualenv evaluation ``` -------------------------------- ### Compare ATE with Python script Source: https://github.com/michaelgrupp/evo/blob/master/doc/performance.md Evaluates Absolute Trajectory Error (ATE) using a Python script. This example shows the execution time and resource usage for comparison. ```bash $ time ./evaluate_ate.py fr2_desk_groundtruth.txt fr2_desk_ORB.txt --verbose compared_pose_pairs 2223 pairs absolute_translational_error.rmse 0.008144 m absolute_translational_error.mean 0.007514 m absolute_translational_error.median 0.007432 m absolute_translational_error.std 0.003140 m absolute_translational_error.min 0.000332 m absolute_translational_error.max 0.024329 m real 0m16.753s user 0m16.824s sys 0m0.204s ``` -------------------------------- ### Get All APE Statistics Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Fetches all available statistics for the Absolute Pose Error as a dictionary. This is useful for a comprehensive analysis of the trajectory accuracy. ```python ape_stats = ape_metric.get_all_statistics() pprint.pprint(ape_stats) ``` -------------------------------- ### Get All RPE Statistics Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Fetches all available statistics for the Relative Pose Error in a dictionary format. This provides a comprehensive overview of the RPE results. ```python rpe_stats = rpe_metric.get_all_statistics() pprint.pprint(rpe_stats) ``` -------------------------------- ### Enable LaTeX Rendering for Plots Source: https://github.com/michaelgrupp/evo/wiki/Plotting Enables the use of the LaTeX renderer for plot fonts, ensuring consistency with LaTeX documents. May require setting `plot_texsystem` based on your local LaTeX installation. ```bash evo_config set plot_usetex ``` -------------------------------- ### Get Single APE Statistic Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Retrieves a specific statistic, like RMSE, for the Absolute Pose Error. Ensure the APE metric object is already initialized and processed. ```python ape_stat = ape_metric.get_statistic(metrics.StatisticsType.rmse) print(ape_stat) ``` -------------------------------- ### Basic Command Line Syntax Source: https://github.com/michaelgrupp/evo/wiki/Metrics General format for using evo command-line tools with trajectory files. 'format' specifies the input file type. ```bash command format reference-trajectory estimated-trajectory [options] ``` -------------------------------- ### Configure Logging Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Initializes logging for the evo tools. This should be called early in your script. ```python from evo.tools import log log.configure_logging() ``` -------------------------------- ### Run Evo with Configuration File Source: https://github.com/michaelgrupp/evo/wiki/Configuration Executes an evo command using parameters loaded from a specified JSON configuration file via the `-c` argument. ```bash evo_rpe groundtruth.txt estimate2.txt -c rpe_config.json ``` -------------------------------- ### Create a virtual environment for evo Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Creates a new virtual environment named 'evaluation'. The --system-site-packages flag is recommended for ROS compatibility. ```shell mkvirtualenv evaluation --system-site-packages ``` -------------------------------- ### Generate Custom Evo Configuration File Source: https://github.com/michaelgrupp/evo/wiki/Configuration Converts arbitrary command line parameters into a JSON configuration file. Use `--out` to specify the output file name. ```bash evo_config generate --pose_relation angle_deg --delta 1 --delta_unit m --verbose --plot --out rpe_config.json ``` -------------------------------- ### ROS Bagfile Command Line Syntax Source: https://github.com/michaelgrupp/evo/wiki/Metrics Syntax for using evo command-line tools with ROS bagfiles. Specify the bagfile path and relevant topics. ```bash command bag2 bagfile-path reference-topic estimated-topic [options] ``` -------------------------------- ### Show Current Evo Settings Source: https://github.com/michaelgrupp/evo/wiki/Configuration Displays the current global settings of evo. Use `--diff` to show only changed parameters from defaults. ```bash evo_config show ``` ```bash evo_config show plot_mode_default map_tile_provider ``` ```bash evo_config show --diff ``` -------------------------------- ### Configure Logging and Utilities Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Sets up logging and imports utility modules for plotting and numerical operations. It also configures plotting settings and enables matplotlib's widget backend. ```python from evo.tools import log log.configure_logging(verbose=True, debug=True, silent=False) import pprint import numpy as np from evo.tools import plot import matplotlib.pyplot as plt # temporarily override some package settings from evo.tools.settings import SETTINGS SETTINGS.plot_usetex = False plot.apply_settings(SETTINGS) %matplotlib widget ``` -------------------------------- ### Get Single RPE Statistic Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Retrieves a specific statistic, such as RMSE, for the calculated Relative Pose Error. The `rpe_metric` object must have been processed beforehand. ```python rpe_stat = rpe_metric.get_statistic(metrics.StatisticsType.rmse) print(rpe_stat) ``` -------------------------------- ### Import Core Metrics and Units Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Imports the necessary metrics and unit classes from the evo library. ```python from evo.core import metrics from evo.core.units import Unit ``` -------------------------------- ### Configure Interactive Widgets Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Sets up various ipywidgets for controlling demo parameters like alignment, scale correction, plot mode, and delta units. ```python import ipywidgets check_opts_ape = {"align": False, "correct_scale": False, "show_plot": True} check_boxes_ape=[ipywidgets.Checkbox(description=desc, value=val) for desc, val in check_opts_ape.items()] check_opts_rpe = {"align": False, "correct_scale": False, "all_pairs": False, "show_plot": True} check_boxes_rpe=[ipywidgets.Checkbox(description=desc, value=val) for desc, val in check_opts_rpe.items()] delta_input = ipywidgets.FloatText(value=1.0, description='delta', disabled=False, color='black') delta_unit_selector=ipywidgets.Dropdown( options={u.value: u for u in Unit if u is not Unit.seconds}, value=Unit.frames, description='delta_unit' ) plotmode_selector=ipywidgets.Dropdown( options={p.value: p for p in PlotMode}, value=PlotMode.xy, description='plot_mode' ) pose_relation_selector=ipywidgets.Dropdown( options={p.value: p for p in PoseRelation}, value=PoseRelation.translation_part, description='pose_relation' ) ``` -------------------------------- ### Configure virtualenvwrapper Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Adds the necessary configuration to your .bashrc file to enable virtualenvwrapper. Source the file to apply changes immediately. ```shell echo "export WORKON_HOME=$HOME/.virtualenvs && source /usr/share/virtualenvwrapper/virtualenvwrapper.sh" >> ~/.bashrc source ~/.bashrc ``` -------------------------------- ### Loading ROS Bagfile Trajectories Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Load trajectories from a ROS bagfile, specifying topics. Use --all_topics to load all trajectories. ```bash evo_traj bag2 data /groundtruth /odom /tf:map.base_link ``` -------------------------------- ### Interactive APE Demo Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Runs an interactive demo for Absolute Pose Error (APE). Configures parameters via GUI widgets and visualizes results with plots. Requires trajectories to be loaded beforehand. ```python import evo.main_ape as main_ape count = 0 results = [] def callback_ape(pose_relation, align, correct_scale, plot_mode, show_plot): global results, count est_name="APE Test #{}".format(count) result = main_ape.ape(traj_ref, traj_est, est_name=est_name, pose_relation=pose_relation, align=align, correct_scale=correct_scale) count += 1 results.append(result) if show_plot: fig = plt.figure() ax = plot.prepare_axis(fig, plot_mode) plot.traj(ax, plot_mode, traj_ref, style="--", alpha=0.5) plot.traj_colormap( ax, result.trajectories[est_name], result.np_arrays["error_array"], plot_mode, min_map=result.stats["min"], max_map=result.stats["max"]) plt.show() _ = ipywidgets.interact_manual(callback_ape, pose_relation=pose_relation_selector, plot_mode=plotmode_selector, **{c.description: c.value for c in check_boxes_ape}) ``` -------------------------------- ### Set Evo Global Settings Source: https://github.com/michaelgrupp/evo/wiki/Configuration Sets global evo settings. Supports string, list, and boolean values. Multiple settings can be set at once. ```bash evo_config set plot_mode_default xy ``` ```bash evo_config set plot_statistics mean std max ``` ```bash evo_config set plot_show_legend false ``` ```bash evo_config set ros_map_enable_masking ``` ```bash evo_config set plot_mode_default xy plot_statistics mean std max plot_show_legend false ros_map_enable_masking ``` -------------------------------- ### Aligning First N Poses Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Align trajectories based on the first N poses using the --n_to_align option. ```bash evo_traj tum traj_1.txt traj_2.txt --ref traj_ref.txt --n_to_align 100 ``` -------------------------------- ### Sim(3) Umeyama Alignment Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Align trajectories using Sim(3) Umeyama method (rotation, translation, and scale) with --align --correct_scale or -as. ```bash evo_traj tum traj_1.txt traj_2.txt --ref traj_ref.txt --align --correct_scale ``` -------------------------------- ### Configure Plotting Settings Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Sets up plotting configurations, including figure size, splitting plots, and LaTeX usage. Enables the interactive matplotlib widget backend. ```python from evo.tools import plot from evo.tools.plot import PlotMode from evo.core.metrics import PoseRelation from evo.core.units import Unit from evo.tools.settings import SETTINGS # temporarily override some package settings SETTINGS.plot_figsize = [6, 6] SETTINGS.plot_split = True SETTINGS.plot_usetex = False # magic plot configuration import matplotlib.pyplot as plt %matplotlib widget ``` -------------------------------- ### Establish SSH Port Forwarding Source: https://github.com/michaelgrupp/evo/blob/master/doc/jupyter_notebook.md Forwards a port from the remote server to your local machine, enabling access to the remote notebook server. Replace 'username' and 'remotehost' with your actual credentials and hostname. ```bash ssh username@remotehost -L 8889:localhost:8888 ``` -------------------------------- ### Generate Result Files using evo_ape Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Generates result files (zip archives) by running the evo_ape command-line tool. This requires subprocess and specifies input files and output paths. ```python # generate some result files import subprocess as sp cmd_1 = "evo_ape kitti ../test/data/KITTI_00_gt.txt ../test/data/KITTI_00_ORB.txt --save_results ../test/data/res1.zip --no_warnings" cmd_2 = "evo_ape kitti ../test/data/KITTI_00_gt.txt ../test/data/KITTI_00_SPTAM.txt --save_results ../test/data/res2.zip --no_warnings" sp.call(cmd_1.split(" ")) sp.call(cmd_2.split(" ")) ``` -------------------------------- ### Load Trajectory from KITTI File Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Loads a trajectory from a KITTI format pose file. Specify the file path. ```python # ...or from a KITTI file... traj = file_interface.read_kitti_poses_file("../test/data/KITTI_00_gt.txt") ``` -------------------------------- ### Run RPE Calculation with GUI Parameters Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb This snippet demonstrates how to run the RPE calculation using the `main_rpe` module. It defines a callback function that is triggered by an interactive GUI, allowing users to configure parameters like pose relation, delta, and plot mode before executing the RPE analysis. The results are stored globally and can be optionally plotted. ```python import evo.main_rpe as main_rpe count = 0 results = [] def callback_rpe(pose_relation, delta, delta_unit, all_pairs, align, correct_scale, plot_mode, show_plot): global results, count est_name="RPE Test #{}".format(count) result = main_rpe.rpe(traj_ref, traj_est, est_name=est_name, pose_relation=pose_relation, delta=delta, delta_unit=delta_unit, all_pairs=all_pairs, align=align, correct_scale=correct_scale, support_loop=True) count += 1 results.append(result) if show_plot: fig = plt.figure() ax = plot.prepare_axis(fig, plot_mode) plot.traj(ax, plot_mode, traj_ref, style="--", alpha=0.5) plot.traj_colormap( ax, result.trajectories[est_name], result.np_arrays["error_array"], plot_mode, min_map=result.stats["min"], max_map=result.stats["max"]) plt.show() _ = ipywidgets.interact_manual(callback_rpe, pose_relation=pose_relation_selector, plot_mode=plotmode_selector, delta=delta_input, delta_unit=delta_unit_selector, **{c.description: c.value for c in check_boxes_rpe}) ``` -------------------------------- ### Process Data for APE Calculation Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Initializes the APE metric with the chosen pose relation and processes the selected trajectory data. ```python ape_metric = metrics.APE(pose_relation) ape_metric.process_data(data) ``` -------------------------------- ### Loading Text Trajectories Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Load multiple trajectories from text files. Supports glob notation for multiple files. ```bash evo_traj tum traj_1.txt traj_2.txt traj_3.txt ``` -------------------------------- ### Plot Multiple Trajectories with Evo Source: https://github.com/michaelgrupp/evo/blob/master/README.md This command plots multiple KITTI pose files and the ground truth using the evo_traj tool. It specifies the input files, the reference file, enables plotting, and sets the plot mode to xz. ```bash cd test/data evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz ``` -------------------------------- ### Set Geographic Map Tile Provider with API Token Source: https://github.com/michaelgrupp/evo/wiki/Plotting Set a map tile provider that requires an API token and provide the token. This is necessary for certain map tile services. ```bash evo_config set map_tile_provider HEREv3.basicMap map_tile_api_token ``` -------------------------------- ### Loading ROS Bagfile with Reference Trajectory Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Load a ROS bagfile and designate a reference trajectory using the --ref flag for alignment. ```bash evo_traj bag2 data.mcap /odom /tf:map.base_link --ref /groundtruth ``` -------------------------------- ### Configure RPE Settings Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Sets up parameters for Relative Pose Error calculation, including the pose relation (e.g., rotation angle in degrees) and delta settings for comparing pose pairs. ```python pose_relation = metrics.PoseRelation.rotation_angle_deg # normal mode delta = 1 delta_unit = Unit.frames # all pairs mode all_pairs = False # activate ``` -------------------------------- ### Import File Interface and Sync Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Imports necessary modules for reading trajectory files and synchronizing them. ```python from evo.tools import file_interface from evo.core import sync ``` -------------------------------- ### Prepare Trajectory Data for Plotting Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Prepares reference and estimated trajectories by reducing them to specific delta IDs for plotting. Ensures data is ready for visualization functions. ```python import copy traj_ref_plot = copy.deepcopy(traj_ref) traj_est_plot = copy.deepcopy(traj_est) traj_ref_plot.reduce_to_ids(rpe_metric.delta_ids) traj_est_plot.reduce_to_ids(rpe_metric.delta_ids) seconds_from_start = [t - traj_est.timestamps[0] for t in traj_est.timestamps[1:]] ``` -------------------------------- ### Basic Trajectory Info Output Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Default output format for trajectory information, showing name, pose count, and path length. ```text name: groundtruth infos: 12765 poses, 304.207m path length, 889.019s duration ``` -------------------------------- ### Execute TUM RPE Benchmark Script Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Executes the official TUM RGB-D benchmark script 'evaluate_rpe.py' using subprocess. This is useful for comparing results directly with the benchmark's output. Requires the script and input files. ```python import subprocess as sp import sys delta = 15 cmd = cmd = ["python", "../test/tum_benchmark_tools/evaluate_rpe.py", ref_file, est_file, "--delta", str(delta), "--delta_unit", 'f', '--fixed_delta'] out = sp.check_output(cmd) print(out.decode(sys.stdout.encoding)) ``` -------------------------------- ### Process and compare multiple trajectory results Source: https://github.com/michaelgrupp/evo/blob/master/README.md Processes multiple result files (e.g., from `evo_ape`) to generate a comparative plot and save statistics to a CSV table. Use this to analyze and compare the performance of different algorithms or configurations. ```bash evo_res results/*.zip -p --save_table results/table.csv ``` -------------------------------- ### Load KITTI Trajectories Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Loads trajectory data from KITTI format files, which contain SE(3) matrices per line without timestamps. ```python traj_ref = file_interface.read_kitti_poses_file("../test/data/KITTI_00_gt.txt") traj_est = file_interface.read_kitti_poses_file("../test/data/KITTI_00_ORB.txt") ``` -------------------------------- ### Import Evo and Pandas Modules Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Imports the pandas library and specific modules from the evo.tools package for data handling and bridge functionality. ```python import pandas as pd from evo.tools import pandas_bridge from evo.tools import file_interface ``` -------------------------------- ### BibTeX citation for evo package Source: https://github.com/michaelgrupp/evo/blob/master/README.md Provides the BibTeX entry for citing the evo package in academic publications. Include this in your LaTeX documents when referencing the package. ```bibtex @misc{grupp2017evo, title={evo: Python package for the evaluation of odometry and SLAM.}, author={Grupp, Michael}, howpublished={\url{https://github.com/MichaelGrupp/evo}}, year={2017} } ``` -------------------------------- ### Import Plotting and Display Modules Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Imports necessary libraries for plotting and displaying output in a Jupyter environment. ```python import matplotlib.pyplot as plt import seaborn as sns %matplotlib widget from IPython.display import display ``` -------------------------------- ### SE(3) Umeyama Alignment Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Align trajectories using SE(3) Umeyama method (rotation and translation) with --align or -a. ```bash evo_traj tum traj_1.txt traj_2.txt --ref traj_ref.txt --align ``` -------------------------------- ### Print Trajectories Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Prints the loaded reference and estimated trajectories to the console. ```python print(traj_ref) print(traj_est) ``` -------------------------------- ### Enable Pose Correspondence Markers Source: https://github.com/michaelgrupp/evo/wiki/Plotting Activates markers that visually connect corresponding poses between the reference trajectory and other trajectories in plots. Useful for `evo_ape`, `evo_rpe`, and `evo_traj`. ```bash evo_config set plot_pose_correspondences true ``` -------------------------------- ### Reset Evo Global Settings Source: https://github.com/michaelgrupp/evo/wiki/Configuration Resets evo settings to their default values. Can reset all settings or specific listed parameters. ```bash evo_config reset ``` ```bash evo_config reset plot_figsize tf_cache_debug ``` -------------------------------- ### Enable global tab completion Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Enables tab completion for Python commands using argcomplete within your virtual environment. Requires opening a new terminal afterwards. ```shell activate-global-python-argcomplete --user ``` -------------------------------- ### Run TUM ATE Equivalent Script Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Executes the official TUM RGB-D benchmark script `evaluate_ate.py` to compute the RMSE of the xyz difference of aligned trajectories. This requires the script to be available and provides a way to compare results. ```python import subprocess as sp import sys cmd = ["python", "../test/tum_benchmark_tools/evaluate_ate.py", ref_file, est_file, "--max_difference", str(max_diff)] out = sp.check_output(cmd) print(out.decode(sys.stdout.encoding)) ``` -------------------------------- ### Load TF Trajectory from ROS 1 Bagfile Source: https://github.com/michaelgrupp/evo/wiki/Formats Loads a specific TF transform chain's trajectory from a ROS 1 bagfile. This command works for both ROS 1 and ROS 2 bagfiles. ```bash evo_traj bag my_data.bag /tf:map.base_link ``` -------------------------------- ### Load TUM Trajectories Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Loads trajectory data from TUM format files, which include 3D position and orientation quaternion per line. Trajectories are then synchronized. ```python traj_ref = file_interface.read_tum_trajectory_file("../test/data/fr2_desk_groundtruth.txt") traj_est = file_interface.read_tum_trajectory_file("../test/data/fr2_desk_ORB_kf_mono.txt") traj_ref, traj_est = sync.associate_trajectories(traj_ref, traj_est) ``` -------------------------------- ### Export TUM to KITTI format Source: https://github.com/michaelgrupp/evo/wiki/Formats Exports multiple TUM trajectory files to the KITTI format. The output files will be saved with a .kitti extension. ```bash evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti # (will be saved as *.kitti) ``` -------------------------------- ### Reset Plot Settings to Default Source: https://github.com/michaelgrupp/evo/wiki/Plotting Restores all Evo configuration settings, including plot parameters, to their default values. ```bash evo_config reset ``` -------------------------------- ### Initialize and Process RPE Metric Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Creates an instance of the RPE metric with specified settings (pose relation, delta, all_pairs) and processes the trajectory data. This prepares the metric for statistic extraction. ```python rpe_metric = metrics.RPE(pose_relation=pose_relation, delta=delta, delta_unit=delta_unit, all_pairs=all_pairs) rpe_metric.process_data(data) ``` -------------------------------- ### Load ROS 1 Bagfile Trajectory Source: https://github.com/michaelgrupp/evo/wiki/Formats Loads trajectory data from a ROS 1 bagfile using the 'bag' command. Specify the bag file and the topic containing pose or transform messages. ```bash evo_traj bag my_data.bag /odom /pose ``` -------------------------------- ### Load Result Files Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Loads previously generated result files (zip archives) using the file_interface.load_res_file function. ```python result_1 = file_interface.load_res_file("../test/data/res1.zip") result_2 = file_interface.load_res_file("../test/data/res2.zip") ``` -------------------------------- ### Configure saving trajectory backups in zip files Source: https://github.com/michaelgrupp/evo/wiki/Formats Enables the automatic saving of trajectory backups within the zip files generated by the --save_results option in evo_res. Note that this increases file size. ```bash evo_config set save_traj_in_zip true ``` -------------------------------- ### Specify Custom Static TF Topic Source: https://github.com/michaelgrupp/evo/wiki/Formats Loads a TF trajectory from a custom static TF topic. This allows specifying a topic other than the default '/tf_static'. ```bash /tf:map.base_link:/custom_static_tf ``` -------------------------------- ### Load TF Trajectory from ROS 2 Bagfile Source: https://github.com/michaelgrupp/evo/wiki/Formats Loads a specific TF transform chain's trajectory from a ROS 2 bagfile. Specify the TF topic and the parent-child frame pair. ```bash evo_traj bag2 my_data.mcap /tf:map.base_link /tf:odom.base_link ``` -------------------------------- ### Load ROS 2 Bagfile Trajectory Source: https://github.com/michaelgrupp/evo/wiki/Formats Loads trajectory data from a ROS 2 bagfile using the 'bag2' command. Specify the bag directory or file and the topic containing pose or transform messages. ```bash evo_traj bag2 my_data /odom /pose ``` -------------------------------- ### Full Trajectory Check Output Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Most detailed output with --full_check, including data validation checks (SE(3) conform, quaternions, timestamps) and speed statistics. ```text name: groundtruth infos duration (s) 889.01894474 nr. of poses 12765 path length (m) 304.206897009 pos_end (m) [ -3.32159757 -4.64051651 32.7839329 ] pos_start (m) [-0.00489994 -0.01775981 -0.01375532] t_end (s) 1502793459.3 t_start (s) 1502792570.28 checks SE(3) conform yes array shapes ok nr. of stamps ok quaternions ok timestamps ok stats v_avg (km/h) 1.411572 v_avg (m/s) 0.392103 v_max (km/h) 3.038775 v_max (m/s) 0.844104 v_min (km/h) 0.001567 v_min (m/s) 0.000435 ``` -------------------------------- ### Verbose Trajectory Info Output Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Detailed trajectory information in verbose mode (-v/--verbose), including duration, pose count, path length, start/end positions, and timestamps. ```text name: groundtruth infos duration (s) 889.01894474 nr. of poses 12765 path length (m) 304.206897009 pos_end (m) [ -3.32159757 -4.64051651 32.7839329 ] pos_start (m) [-0.00489994 -0.01775981 -0.01375532] t_end (s) 1502793459.3 t_start (s) 1502792570.28 ``` -------------------------------- ### Load Trajectory from TUM File Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Loads a trajectory from a TUM format pose file. Specify the file path. ```python # ...or from a TUM file... traj = file_interface.read_tum_trajectory_file("../test/data/fr2_desk_ORB.txt") ``` -------------------------------- ### Set Geographic Map Tile Provider Source: https://github.com/michaelgrupp/evo/wiki/Plotting Configure the map tile provider for geographic maps. The default is 'OpenStreetMap.Mapnik'. You can choose from various providers supported by contextily/xyzservices. ```bash evo_config set map_tile_provider CartoDB.Positron ``` -------------------------------- ### Plotting Trajectories Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Plot trajectories using the -p or --plot flag. Specify view with --plot_mode (e.g., xz, xyz). ```bash evo_traj tum traj_1.txt --plot --plot_mode xz ``` -------------------------------- ### Origin Alignment Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Perform simple origin alignment for drift/loop closure evaluation using --align_origin. Not based on Umeyama. ```bash evo_traj tum traj_1.txt --ref traj_ref.txt --align_origin ``` -------------------------------- ### Prepare RPE Data Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Defines the reference and estimated trajectories to be used for RPE calculation. Ensure `traj_ref` and `traj_est` are properly loaded and formatted. ```python data = (traj_ref, traj_est) ``` -------------------------------- ### Analyze and Plot Trajectory DataFrame Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Demonstrates basic analysis and plotting of a trajectory DataFrame. Displays the head, statistics, and a line plot of the x, y, and z coordinates. ```python print("First entries of the dataframe:") display(traj_df.head()) print("Some statistics of the dataframe:") display(traj_df.describe()) print("A plot:") traj_df[["x", "y", "z"]].plot(kind="line", subplots=True) ``` -------------------------------- ### Load ROS Bag Trajectories Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb Loads trajectory data from a ROS bag file. Supports various message types like PoseStamped and Odometry. Trajectories are then synchronized. ```python from rosbags.rosbag1 import Reader as Rosbag1Reader with Rosbag1Reader("../test/data/ROS_example.bag") as reader: traj_ref = file_interface.read_bag_trajectory(reader, "groundtruth") traj_est = file_interface.read_bag_trajectory(reader, "ORB-SLAM") traj_ref, traj_est = sync.associate_trajectories(traj_ref, traj_est) ``` -------------------------------- ### Load Trajectory from ROS Bag Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Loads a trajectory from a ROS bag file using the file_interface. Requires rosbags library. Specify the bag file path and the topic name. ```python # load a trajectory from a ROS bag... from rosbags.rosbag1 import Reader as Rosbag1Reader with Rosbag1Reader("../test/data/ROS_example.bag") as reader: traj = file_interface.read_bag_trajectory(reader, "S-PTAM") ``` -------------------------------- ### Plot Trajectories with ROS Map Source: https://github.com/michaelgrupp/evo/wiki/Plotting Insert 2D ROS maps into Evo plots by specifying the YAML file. The map will be displayed alongside trajectories in xy/yx plot modes, transformed to the x-y plane origin. ```bash evo_traj tum file.txt --plot_mode xy --plot --ros_map_yaml map.yaml ``` -------------------------------- ### Export EuRoC to TUM format Source: https://github.com/michaelgrupp/evo/wiki/Formats Exports a EuRoC ground truth file to the TUM trajectory format. The output file will be saved with a .tum extension. ```bash evo_traj euroc data.csv --save_as_tum # (will be saved as data.tum) ``` -------------------------------- ### Associate Trajectories by Timestamp Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Associates two trajectories based on matching timestamps, with a maximum allowed time difference. This is crucial for comparing poses at corresponding moments. ```python from evo.core import sync max_diff = 0.01 traj_ref, traj_est = sync.associate_trajectories(traj_ref, traj_est, max_diff) ``` -------------------------------- ### Calculate TUM RPE Equivalent Metric Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Calculates the RPE metric equivalent to the TUM benchmark script's output programmatically. This allows for direct comparison of metrics calculated by the script and by the evo library. ```python import evo.metrics as metrics from evo.units import Unit tum_rpe_equivalent = metrics.RPE(metrics.PoseRelation.translation_part, delta, Unit.frames, all_pairs=True) tum_rpe_equivalent.process_data((traj_ref, traj_est)) print(tum_rpe_equivalent.get_statistic(metrics.StatisticsType.mean)) ``` -------------------------------- ### Plot Trajectories with Geographic Map Tiles Source: https://github.com/michaelgrupp/evo/wiki/Plotting Add a map tile to the plot for geo-referenced data. Map tiles are downloaded at runtime using contextily. Specify the EPSG code for the map projection. ```bash evo_traj tum georeferenced.tum --plot_mode xy --plot --map_tile epsg:32632 ``` -------------------------------- ### Export TUM to ROS bag format Source: https://github.com/michaelgrupp/evo/wiki/Formats Exports multiple TUM trajectory files to a ROS bag file. The output file will be named with a timestamp and contain topics for each input trajectory. ```bash evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag # (will be saved as .bag with topics traj_1, traj_2 and traj_3) ``` -------------------------------- ### Select Trajectory Data for APE Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Determines which trajectory data (original or aligned) to use for APE calculation based on the 'use_aligned_trajectories' flag. ```python if use_aligned_trajectories: data = (traj_ref, traj_est_aligned) else: data = (traj_ref, traj_est) ``` -------------------------------- ### Convert Results to DataFrame and Concatenate Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Converts loaded evo result objects into Pandas DataFrames and then concatenates them side-by-side. ```python result_df_1 = pandas_bridge.result_to_df(result_1) result_df_2 = pandas_bridge.result_to_df(result_2) result_df = pd.concat([result_df_1, result_df_2], axis="columns") display(result_df) ``` -------------------------------- ### Set Reference Trajectory Line Style Source: https://github.com/michaelgrupp/evo/wiki/Plotting Changes the line style of the reference trajectory to a dashed line ('-'). ```bash evo_config set plot_reference_linestyle - ``` -------------------------------- ### Custom 3D Transformation (JSON Format) Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Defines a custom 3D transformation using a JSON file with translation and rotation quaternion. This can be applied to trajectory poses. ```json { "x": 0.0, "y": 0.0, "z": 0.0, "qx": 0.0, "qy": 0.0, "qz": 0.0, "qw": 1.0 } ``` -------------------------------- ### Plot Trajectories Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Visualizes the reference and estimated trajectories, including an aligned version, using matplotlib. ```python fig = plt.figure() traj_by_label = { "estimate (not aligned)": traj_est, "estimate (aligned)": traj_est_aligned, "reference": traj_ref } plot.trajectories(fig, traj_by_label, plot.PlotMode.xyz) plt.show() ``` -------------------------------- ### Plot APE Values and Statistics Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Visualizes the Absolute Pose Error over time, along with key statistics. Requires matplotlib and the evo plotting utilities. Ensure `ape_metric` and `ape_stats` are computed. ```python seconds_from_start = [t - traj_est.timestamps[0] for t in traj_est.timestamps] fig = plt.figure() plot.error_array(fig.gca(), ape_metric.error, x_array=seconds_from_start, statistics={s:v for s,v in ape_stats.items() if s != "sse"}, name="APE", title="APE w.r.t. " + ape_metric.pose_relation.value, xlabel="$t$ (s)") plt.show() ``` -------------------------------- ### Plot Trajectory with APE Colormapping Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Renders the trajectory with its path colored according to the Absolute Pose Error magnitude. This helps in identifying regions with high error. Requires `traj_ref`, `traj_est_aligned` (or `traj_est`), and computed `ape_metric` and `ape_stats`. ```python plot_mode = plot.PlotMode.xy fig = plt.figure() ax = plot.prepare_axis(fig, plot_mode) plot.traj(ax, plot_mode, traj_ref, '--', "gray", "reference") plot.traj_colormap(ax, traj_est_aligned if use_aligned_trajectories else traj_est, ape_metric.error, plot_mode, min_map=ape_stats["min"], max_map=ape_stats["max"]) ax.legend() plt.show() ``` -------------------------------- ### Set Coordinate Axis Marker Scale Source: https://github.com/michaelgrupp/evo/wiki/Plotting Activates coordinate axis markers by setting their scale to 0.1. Adjust this value based on trajectory size. ```bash evo_config set plot_axis_marker_scale 0.1 ``` -------------------------------- ### Plot Trajectory with RPE Colormapping Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Visualizes the reference and estimated trajectories, with the estimated trajectory colormapped according to the RPE error. Uses the plot utility and requires matplotlib. ```python import matplotlib.pyplot as plt import evo.tools.plot as plot plot_mode = plot.PlotMode.xy fig = plt.figure() ax = plot.prepare_axis(fig, plot_mode) plot.traj(ax, plot_mode, traj_ref_plot, '--', "gray", "reference") plot.traj_colormap(ax, traj_est_plot, rpe_metric.error, plot_mode, min_map=rpe_stats["min"], max_map=rpe_stats["max"]) ax.legend() plt.show() ``` -------------------------------- ### Deactivate virtual environment Source: https://github.com/michaelgrupp/evo/blob/master/doc/install_in_virtualenv.md Exits the currently active virtual environment. ```shell deactivate ``` -------------------------------- ### Calculate TUM ATE Equivalent Metric Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Calculates the RMSE of the translation part of the pose error, mimicking the TUM ATE script's output. This is done using the evo library's APE metric. ```python tum_ate_equivalent = metrics.APE(metrics.PoseRelation.translation_part) tum_ate_equivalent.process_data((traj_ref, traj_est_aligned)) print(tum_ate_equivalent.get_statistic(metrics.StatisticsType.rmse)) ``` -------------------------------- ### Configure ROS Map Viewport Behavior Source: https://github.com/michaelgrupp/evo/wiki/Plotting Define how the plot viewport changes when a ROS map is displayed. Options include 'keep_unchanged', 'update', and 'zoom_to_map'. This is particularly useful for automated plot saving. ```bash evo_config set ros_map_viewport {keep_unchanged, update, zoom_to_map} ``` -------------------------------- ### Set Font Family and Scale Source: https://github.com/michaelgrupp/evo/wiki/Plotting Switches the plot font to 'serif' and increases the font scale to 1.2 for better readability. This is useful when the default font does not match the document's style. ```bash evo_config set plot_fontfamily serif plot_fontscale 1.2 ``` -------------------------------- ### Set Plot Line Width Source: https://github.com/michaelgrupp/evo/wiki/Plotting Reduces the plot line width to 1.0 to match a smaller font size, improving overall visual balance. ```bash evo_config set plot_linewidth 1.0 ``` -------------------------------- ### Analyze and Plot Result DataFrame Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Demonstrates analysis of a concatenated results DataFrame. It displays the 'stats' row and generates a bar plot of the statistics, excluding the 'sse' value. ```python display(result_df.loc["stats"]) exclude = result_df.loc["stats"].index.isin(["sse"]) # don't plot sse result_df.loc["stats"][~exclude].plot(kind="bar") ``` -------------------------------- ### Filter Trajectory by Motion Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Applies a motion filter to remove poses with insufficient translation or rotation. Useful for keeping only significant movements in the data. ```bash evo_traj tum data.txt -v --motion_filter 0.5 5 ``` -------------------------------- ### Configure APE Pose Relation Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Sets the pose relation for calculating Absolute Pose Error (APE). Options include translation part, rotation angle, rotation part, or the full transformation. ```python pose_relation = metrics.PoseRelation.translation_part use_aligned_trajectories = False ``` -------------------------------- ### Calculate Absolute Pose Error (APE) for S-PTAM trajectory Source: https://github.com/michaelgrupp/evo/blob/master/README.md Calculates the absolute pose error for a given trajectory against a ground truth, plots the results, and saves them to a zip file. Use this to evaluate the accuracy of a single trajectory. ```bash evo_ape kitti KITTI_00_gt.txt KITTI_00_SPTAM.txt -va --plot --plot_mode xz --save_results results/SPTAM.zip ``` -------------------------------- ### Calculate Absolute Pose Error (APE) for ORB-SLAM trajectory Source: https://github.com/michaelgrupp/evo/blob/master/README.md Calculates the absolute pose error for a given trajectory against a ground truth, plots the results, and saves them to a zip file. Use this to evaluate the accuracy of a single trajectory. ```bash mkdir results evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/ORB.zip ``` -------------------------------- ### Convert Trajectory to Pandas DataFrame Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/pandas_bridge.ipynb Converts an evo trajectory object into a Pandas DataFrame using the pandas_bridge.trajectory_to_df function. ```python traj_df = pandas_bridge.trajectory_to_df(traj) ``` -------------------------------- ### Scale Correction Only Source: https://github.com/michaelgrupp/evo/wiki/evo_traj Apply only scale correction to trajectories using --correct_scale or -s. ```bash evo_traj tum traj_1.txt traj_2.txt --ref traj_ref.txt --correct_scale ``` -------------------------------- ### Align Trajectories and Correct Scale Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics.py_API_Documentation.ipynb Aligns an estimated trajectory to a reference trajectory using Umeyama's method. Optionally, it can correct only the scale factor. ```python import copy traj_est_aligned = copy.deepcopy(traj_est) traj_est_aligned.align(traj_ref, correct_scale=False, correct_only_scale=False) ``` -------------------------------- ### Set Reference Trajectory Axis Marker Scale Source: https://github.com/michaelgrupp/evo/wiki/Plotting Sets the scale for coordinate axis markers specifically on the reference trajectory to 0.1. ```bash evo_config set plot_reference_axis_marker_scale 0.1 ``` -------------------------------- ### Process RPE Results with Pandas Source: https://github.com/michaelgrupp/evo/blob/master/notebooks/metrics_interactive.ipynb This snippet shows how to process the results obtained from the RPE calculation. It uses the pandas library and the `pandas_bridge` module to convert the RPE results into a DataFrame for easier analysis and manipulation. This is useful for aggregating and comparing multiple RPE runs. ```python import pandas as pd from evo.tools import pandas_bridge df = pd.DataFrame() for result in results: df = pd.concat((df, pandas_bridge.result_to_df(result)), axis="columns") df ``` -------------------------------- ### Set Seaborn Plot Style Source: https://github.com/michaelgrupp/evo/wiki/Plotting Changes the Seaborn plot style to 'whitegrid' for a white background and grid, suitable for printing. ```bash evo_config set plot_seaborn_style whitegrid ``` -------------------------------- ### Configure ROS Map Unknown Cell Value Source: https://github.com/michaelgrupp/evo/wiki/Plotting Set the uint8 value representing unknown cells in a ROS map image. This is useful for correctly masking unknown areas in the plot. The default is 205, but some tools like Cartographer use 128. ```bash evo_config set ros_map_unknown_cell_value 128 ```