Fields t, p_x, p_y, p_z, q_w, q_x, q_y, q_z (8 cols). Header has a space after each comma — strip on read.
Local reset-prone V-SLAM, not truth; positions drift to hundreds of meters within a run (unflagged internal resets).
Quaternions unit on valid rows.
NaN is always the full pose (no partial-NaN, no NaN in t).
NaN fraction by run:
transition_2 and vibration v100all-NaN;
outdoor_1 69%;
mars_4rs_odom 58% / rs_odom_data 66%;
indoor_1 19%;
others ~0.
mars_1/mars_3 carry a single dead row.
The first valid row is not the VIO origin (leading origin samples can be NaN, e.g. mars_4 first valid pose ‖p‖ ≈ 17 m).
Backward t step (one each): mars_2rs_odom, mars_4rs_odom_data (not mars_4rs_odom). mars_2 has a 746 s data gap logged as a low average rate, not as NaN.
mars_4/rs_odom_data.csv is not an independent second odometry lane.
Its 14639 valid rows match mars_4/rs_odom.csv bit-for-bit on timestamps and pose values.
rs_odom.csv has shape [34836, 8] over [1633592510.6164725, 1633592684.6412158], while rs_odom_data.csv has shape [43116, 8] over [1633592510.6164725, 1633592727.8318083] because it appends 8280 extra trailing all-NaN rows and one backward timestamp step without adding any extra valid odometry.