Status: Draft Issue: HEL-46 Last Updated: 2026-03-18
Define one repeatable import and normalization contract for stereo fisheye plus IMU recordings so later tickets can consume a deterministic layout without manual renaming or hidden cleanup steps.
The only supported raw input layout is:
<raw_root>/
sequence.json
left_frames.csv
right_frames.csv
imu_samples.csv
source/
left/*.png
right/*.png
sequence.json must be a JSON object with at least:
sequence_idtimestamp_unitset tonsrig.left_camerarig.right_camerarig.imu
left_frames.csv and right_frames.csv must both use the exact header:
timestamp_ns,source_path
The two stereo indexes must have the same number of rows and the same
timestamps in the same order. source_path may be absolute or relative to the
CSV file, but only .png frames are supported.
imu_samples.csv must use the exact header:
timestamp_ns,angular_velocity_x,angular_velocity_y,angular_velocity_z,linear_acceleration_x,linear_acceleration_y,linear_acceleration_z
IMU timestamps must be strictly increasing and must cover the full stereo frame interval.
The normalization command rewrites the sequence into:
<normalized_root>/
sequence.json
stereo/
left/<timestamp_ns>.png
right/<timestamp_ns>.png
timestamps.csv
imu/
data.csv
sequence.json carries the original sequence metadata plus:
raw_layoutnormalized_layoutcountstimestamp_range_nsimu_coverage_ns
stereo/timestamps.csv uses the exact header:
timestamp_ns,left_path,right_path
Use the checked-in fixture manifest to validate the path from a clean checkout:
make normalize-fixtureThat target runs:
./scripts/prepare_stereo_imu_sequence.py \
--manifest manifests/stereo_imu_fixture_normalization.jsonThe generated report is written to
reports/out/stereo_imu_fixture_normalization.md.
The normalization lane fails fast with actionable errors for:
- missing
sequence.json,left_frames.csv,right_frames.csv, orimu_samples.csv - malformed frame or IMU timestamps
- out-of-order timestamps
- stereo timestamp gaps between the left and right cameras
- IMU coverage that does not span the stereo interval
- unsupported non-PNG frame patterns