TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/rpng/open_vins/llms.txt
Use this file to discover all available pages before exploring further.
ov_eval package is the dedicated evaluation suite bundled with OpenVINS. It provides C++ binaries and Python scripts for computing standard visual-inertial odometry (VIO) accuracy metrics, analyzing estimator consistency, and profiling the computational load of every system component. Fair comparison between methods—and insight into why one method performs better than another—requires a principled evaluation framework, which is exactly what ov_eval is designed to supply.
Key metrics
ov_eval targets six categories of evaluation signal:
| Metric | What it measures |
|---|---|
| Absolute Trajectory Error (ATE) | Global accuracy after optimal alignment of estimated and ground-truth trajectories |
| Relative Pose Error (RPE) | Local drift over fixed-length segments; less sensitive to isolated jumps |
| Root Mean Squared Error (RMSE) | Per-timestep position/orientation error across multiple runs |
| Normalized Estimation Error Squared (NEES) | Estimator consistency relative to its own reported covariance |
| Component timing | Wall-clock time consumed by each processing stage (tracking, propagation, update, …) |
| Hardware usage | CPU and memory consumption measured via psutil |
Building ov_eval
ov_eval is compiled alongside the rest of OpenVINS by default. No extra CMake flag is needed.
Plotting inside the C++ binaries requires If these are not present, the binaries still run and print results to the console — only the inline figures are skipped.
python-matplotlib, python-numpy, and the Python development headers. Install them with:Available evaluation binaries
Every binary below is built intoov_eval/src/ and can be launched with rosrun ov_eval <binary>.
Error evaluation
Error evaluation
| Binary | Purpose |
|---|---|
error_singlerun | ATE, RPE, and NEES for a single estimated trajectory vs. ground truth |
error_dataset | Compare multiple algorithms on one dataset; outputs ATE, RPE, RMSE, and NEES |
error_comparison | Cross-dataset, cross-algorithm comparison; generates a LaTeX table |
error_simulation | Error evaluation against a simulated ground-truth trajectory |
Trajectory utilities
Trajectory utilities
| Binary | Purpose |
|---|---|
plot_trajectories | Plot 2-D (XY) and altitude-vs-time trajectories for visual inspection |
format_converter | Convert EuRoC / ASL CSV ground-truth files to the RPE text format |
live_align_trajectory | Real-time trajectory alignment for live debugging |
pose_to_file | ROS node that records PoseWithCovarianceStamped / Odometry topics to a text file |
Timing analysis
Timing analysis
| Binary | Purpose |
|---|---|
timing_flamegraph | Flame-graph style breakdown of per-component execution times |
timing_histogram | Distribution of execution times as a binned histogram |
timing_comparison | Side-by-side comparison of timing files (e.g., mono vs. stereo) |
timing_percentages | CPU and memory usage from psutil logs |
Python scripts
Two Python helper scripts live inov_eval/python/:
pid_ros.py— A ROS node that uses psutil to poll one or more running ROS nodes for their CPU percentage, memory percentage, and thread count, writing results to a timestamped log file.pid_sys.py— A system-level variant that monitors processes by name rather than by ROS node graph.
Evaluation workflow
Run OpenVINS and record the trajectory
Add the
pose_to_file recorder node to your launch file. It subscribes to any PoseWithCovarianceStamped, PoseStamped, TransformStamped, or Odometry topic and writes a timestamped text file.Convert ground-truth to the RPE format
Ground-truth files must follow the RPE text format:
time(s) px py pz qx qy qz qw. EuRoC/ASL CSV files use nanosecond timestamps and a different quaternion order; the format_converter binary handles the conversion automatically.Organise files into the expected folder structure
ov_eval expects ground-truth files and algorithm run files to be separated into two top-level directories. Dataset names must match between the truth/ and algorithms/ trees.Evaluate a single run
Alignment modes
All error evaluation binaries accept an<align_mode> argument that controls how the estimated trajectory is registered to ground truth before error is computed:
| Mode | Description |
|---|---|
posyaw | Align position and yaw only (gravity-aligned systems) |
posyawsingle | Same, but using only the first pose |
se3 | Full 6-DOF rigid-body alignment |
se3single | Full 6-DOF using only the first pose |
sim3 | Similarity transform (position, rotation, and scale) |
none | No alignment; trajectories must already share a common frame |
Next steps
Accuracy metrics
Mathematical definitions of ATE, RPE, RMSE, and NEES, with example command usage.
Timing analysis
How to profile OpenVINS components and interpret CPU and memory usage data.