First of all, thank you for your work on this repository. It is extremely helpful for benchmarking proprioceptive state estimators and obtaining quantitative performance comparisons.
I noticed a potential issue in the linear velocity RMSE computation in compute_vel_rmse.py.
Issue description
The script defines the following candidate timestamp columns:
TIME_CANDIDATES = ("t", "time", "timestamp", "stamp")
It then selects the first matching column using:
time_col = next((c for c in TIME_CANDIDATES if c in headers), None)
When none of the available column names are included in TIME_CANDIDATES, time_col is silently set to None.
However, the generated fused_state.csv files use the following columns:
t_rel t_abs px py pz vx vy vz qw qx qy qz
Since neither t_rel nor t_abs is included in TIME_CANDIDATES, the estimator and ground-truth velocities are not aligned by timestamp. Instead, the script silently falls back to row-index alignment.
This is reflected in the output:
MUSE:
aligned by : index
frame align : applied R_est_to_gt
samples : 104601
RMSE vx [m/s] : 0.529185
RMSE vy [m/s] : 0.661118
RMSE vz [m/s] : 0.224765
RMSE |v| [m/s]: 0.876147
The estimator runs at the IMU rate of approximately 400 Hz, while the ground truth is sampled at approximately 200 Hz. Therefore, matching the two trajectories by row index does not compare measurements taken at the same time and leads to an incorrect velocity RMSE.
When the estimator timestamps are taken from t_abs and the ground-truth velocity is interpolated at the estimator timestamps, the results become:
MUSE:
aligned by : timestamp interpolation (GT -> EST)
frame align : applied R_est_to_gt
samples : 207591
RMSE vx [m/s] : 0.050812
RMSE vy [m/s] : 0.058700
RMSE vz [m/s] : 0.035221
RMSE |v| [m/s]: 0.085253
Suggested fix
A minimal fix would be to include t_abs in the candidate timestamp columns, preferably with higher priority:
TIME_CANDIDATES = ("t_abs", "t", "time", "timestamp", "stamp")
Additionally, rather than requiring exact timestamp matches or silently falling back to index-based pairing, the ground-truth velocity should be interpolated at the estimator timestamps over their common time interval.
It may also be preferable to raise a warning or an exception when no valid timestamp column is found.
First of all, thank you for your work on this repository. It is extremely helpful for benchmarking proprioceptive state estimators and obtaining quantitative performance comparisons.
I noticed a potential issue in the linear velocity RMSE computation in
compute_vel_rmse.py.Issue description
The script defines the following candidate timestamp columns:
It then selects the first matching column using:
When none of the available column names are included in
TIME_CANDIDATES,time_colis silently set toNone.However, the generated
fused_state.csvfiles use the following columns:Since neither
t_relnort_absis included inTIME_CANDIDATES, the estimator and ground-truth velocities are not aligned by timestamp. Instead, the script silently falls back to row-index alignment.This is reflected in the output:
The estimator runs at the IMU rate of approximately 400 Hz, while the ground truth is sampled at approximately 200 Hz. Therefore, matching the two trajectories by row index does not compare measurements taken at the same time and leads to an incorrect velocity RMSE.
When the estimator timestamps are taken from
t_absand the ground-truth velocity is interpolated at the estimator timestamps, the results become:Suggested fix
A minimal fix would be to include
t_absin the candidate timestamp columns, preferably with higher priority:Additionally, rather than requiring exact timestamp matches or silently falling back to index-based pairing, the ground-truth velocity should be interpolated at the estimator timestamps over their common time interval.
It may also be preferable to raise a warning or an exception when no valid timestamp column is found.