40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
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()
|