import click import csv import umsgpack @click.command @click.argument('gps-data', type=click.File('r')) @click.argument('accelerometer-data', type=click.File('r')) @click.argument('gyro-data', type=click.File('r')) @click.argument('gps-output', type=click.File('wb')) @click.argument('motion-output', type=click.File('wb')) def main(gps_data, accelerometer_data, gyro_data, gps_output, motion_output): gps_reader = csv.DictReader(gps_data) last_stamp = 0 for row in gps_reader: next_delay = float(row['seconds_elapsed']) - last_stamp # We only one one update per second, to cut down on size if next_delay < 1: continue last_stamp = float(row['seconds_elapsed']) umsgpack.pack([float(next_delay), float(row['latitude']), float(row['longitude'])], gps_output) accel_reader = csv.DictReader(accelerometer_data) gyro_reader = csv.DictReader(gyro_data) #motion_writer = csv.writer(motion_output, SampleDataDialect) last_stamp = 0 for (accel_row, gyro_row) in zip(accel_reader, gyro_reader): next_delay = float(accel_row['seconds_elapsed']) - last_stamp # Only one update every 100ms, to cut down on size if next_delay < 0.02: continue last_stamp = float(accel_row['seconds_elapsed']) umsgpack.pack([ next_delay, float(accel_row['x']), float(accel_row['y']), float(accel_row['z']), float(gyro_row['x']), float(gyro_row['y']), float(gyro_row['z']) ], motion_output) if __name__ == "__main__": main()