tasks: simulation: restructure sim data storage to better support the next step of resampling data to fit the configured partition

This commit is contained in:
2025-12-21 18:41:35 +01:00
parent 83ecdb61b2
commit ea851f4b5a
5 changed files with 222 additions and 90 deletions

View File

@@ -1,5 +1,5 @@
use std::fs;
use std::io::{Read, Seek, Write};
use std::io::{Read, Write};
use std::path::Path;
use std::fs::File;
use image::GenericImageView;
@@ -78,7 +78,10 @@ fn write_sim_data() {
println!("cargo::rerun-if-changed={}", gps_input.to_str().unwrap());
if !gps_output.exists() || gps_output.metadata().unwrap().modified().unwrap() < gps_input.metadata().unwrap().modified().unwrap() {
let mut gps_data = Reader::from_reader(File::open(gps_input.clone()).unwrap());
let record_count = gps_data.records().count() as u32;
let mut gps_data = Reader::from_reader(File::open(gps_input).unwrap());
let headers = gps_data.headers().unwrap();
let (timestamp_idx, lat_idx, lon_idx) = (
headers.iter().position(|x| { x == "seconds_elapsed" }).unwrap(),
@@ -86,6 +89,7 @@ fn write_sim_data() {
headers.iter().position(|x| { x == "latitude" }).unwrap(),
);
let mut gps_output = File::create(gps_output.clone()).unwrap();
rmp::encode::write_array_len(&mut gps_output, record_count).unwrap();
let mut last_stamp = 0.0;
for record in gps_data.records().flatten() {
let (timestamp, lat, lon) = (
@@ -113,8 +117,12 @@ fn write_sim_data() {
}
};
if rebuild_motion {
let mut accel_data = Reader::from_reader(File::open(accel_input).unwrap());
let mut accel_data = Reader::from_reader(File::open(accel_input.clone()).unwrap());
let mut gyro_data = Reader::from_reader(File::open(gyro_input).unwrap());
let record_count = accel_data.records().count() as u32;
let mut accel_data = Reader::from_reader(File::open(accel_input).unwrap());
let headers = accel_data.headers().unwrap();
let (timestamp_idx, accel_x_idx, accel_y_idx, accel_z_idx) = (
headers.iter().position(|x| { x == "seconds_elapsed" }).unwrap(),
@@ -131,6 +139,7 @@ fn write_sim_data() {
);
let mut motion_output = File::create(motion_output.clone()).unwrap();
rmp::encode::write_array_len(&mut motion_output, record_count).unwrap();
let mut last_stamp = 0.0;
for (accel_record, gyro_record) in accel_data.records().flatten().zip(gyro_data.records().flatten()) {
let (timestamp, accel_x, accel_y, accel_z) = (
@@ -162,6 +171,10 @@ fn write_sim_data() {
// GPS data = 2, motion data = 1
let mut unified_fd = File::create(unified_output.clone()).unwrap();
// Write out the stream index, which will be 2 (motion + gps)
rmp::encode::write_array_len(&mut unified_fd, 2).unwrap();
let mut motion_output = File::open(motion_output).unwrap();
let mut gps_output = File::open(gps_output).unwrap();
rmp::encode::write_ext_meta(&mut unified_fd, motion_output.metadata().unwrap().len() as u32, 1).unwrap();