You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
from pyulog import ULog |
|
import argparse |
|
import pandas as pd |
|
import csv |
|
import convertULogToSensorData as util |
|
|
|
path = "/home/kamil/Documents/QGroundControl/Logs/iris_vision.ulg" |
|
output_path = "/home/kamil/Documents/QGroundControl/Logs/sensor_data_iris_vision.csv" |
|
|
|
|
|
def get_arguments(): |
|
""" |
|
parses the command line arguments |
|
:return: |
|
""" |
|
parser = argparse.ArgumentParser( |
|
description='Create a csv file with sensor data values in chronological order from a single' |
|
'ulog file.') |
|
parser.add_argument('input_file', metavar='file.ulg', help='ULog input file path') |
|
parser.add_argument('output_file', metavar='file.ulg', help='csv output file path') |
|
return parser.parse_args() |
|
|
|
def main() -> None: |
|
""" |
|
main entry point |
|
:return: |
|
""" |
|
args = get_arguments() |
|
|
|
table = pd.DataFrame() |
|
|
|
try: |
|
ulog = ULog(args.input_file) |
|
except: |
|
print("Could not find ulog file") |
|
exit(-1) |
|
|
|
try: |
|
imu = util.getImuData(ulog) |
|
print("IMU data detected") |
|
table = pd.concat([table, imu], ignore_index=True, sort=False) |
|
except: |
|
print("IMU data not detected") |
|
|
|
try: |
|
mag = util.getMagnetometerData(ulog) |
|
print("Mag data detected") |
|
table = pd.concat([table, mag], ignore_index=True, sort=False) |
|
except: |
|
print("Mag data not detected") |
|
|
|
try: |
|
baro = util.getBarometerData(ulog) |
|
print("Baro data detected") |
|
table = pd.concat([table, baro], ignore_index=True, sort=False) |
|
except: |
|
print("Baro data not detected") |
|
|
|
try: |
|
gps = util.getGpsData(ulog) |
|
print("GPS data detected") |
|
table = pd.concat([table, gps], ignore_index=True, sort=False) |
|
except: |
|
print("GPS data not detected") |
|
|
|
try: |
|
airspeed = util.getAirspeedData(ulog) |
|
print("Airspeed data detected") |
|
table = pd.concat([table, airspeed], ignore_index=True, sort=False) |
|
except: |
|
print("Airspeed data not detected") |
|
|
|
try: |
|
flow = util.getOpticalFlowData(ulog) |
|
print("Flow data detected") |
|
table = pd.concat([table, flow], ignore_index=True, sort=False) |
|
except: |
|
print("Flow data not detected") |
|
|
|
try: |
|
range = util.getRangeFinderData(ulog) |
|
print("Range data detected") |
|
table = pd.concat([table, range], ignore_index=True, sort=False) |
|
except: |
|
print("Range data not detected") |
|
|
|
try: |
|
vio = util.getVioData(ulog) |
|
print("VIO data detected") |
|
table = pd.concat([table, vio], ignore_index=True, sort=False) |
|
except: |
|
print("VIO data not detected") |
|
|
|
try: |
|
land = util.getVehicleLandingStatus(ulog) |
|
print("Landing data detected") |
|
table = pd.concat([table, land], ignore_index=True, sort=False) |
|
except: |
|
print("Landing data not detected") |
|
|
|
table = table.sort_values('timestamp', axis=0, ascending=True) |
|
table['timestamp'] = table['timestamp'] - table['timestamp'].iloc[0] |
|
# remove the first 0.5 seconds of data to be robust against faulty initialized data |
|
table = table[table.timestamp > 500000] |
|
table.timestamp = table.timestamp - 500000 |
|
|
|
try: |
|
table.to_csv(args.output_file, index=None, header=None) |
|
|
|
# post processing remove empty cells from csv |
|
result = [] |
|
with open(args.output_file, "r") as in_file: |
|
reader = csv.reader(in_file) |
|
result = [[item for item in row if item != ''] for row in reader] |
|
|
|
with open(args.output_file, "w") as out_file: |
|
csv_writer = csv.writer(out_file) |
|
csv_writer.writerows(result) |
|
except: |
|
print("Could not write to specified output file") |
|
|
|
|
|
if __name__ == '__main__': |
|
main()
|
|
|