Difference between revisions of "Explorer/RaspberryPi/Log"
Jump to navigation
Jump to search
(Created page with " #!/usr/bin/env python3 import re import numpy as np import pandas as pd from scipy.interpolate import griddata, interp1d import matplotlib.pyplot as plt import seabor...") |
|||
Line 8: | Line 8: | ||
import seaborn as sns | import seaborn as sns | ||
import matplotlib as mpl | import matplotlib as mpl | ||
class msgparse(): | class msgparse(): | ||
def __init__(self, msg_name, columns, drop_columns, nbpat, pat): | def __init__(self, msg_name, columns, drop_columns, nbpat, pat): | ||
Line 45: | Line 45: | ||
tmp.append(float(m.group(j))) | tmp.append(float(m.group(j))) | ||
msg[i].list_meas.append(tmp) | msg[i].list_meas.append(tmp) | ||
def linearize_time(pad, sample_period,df, min_t=None, max_t=None): | def linearize_time(pad, sample_period,df, min_t=None, max_t=None): | ||
if (min_t or max_t) == None: | if (min_t or max_t) == None: |
Revision as of 10:40, 26 July 2020
#!/usr/bin/env python3 import re import numpy as np import pandas as pd from scipy.interpolate import griddata, interp1d import matplotlib.pyplot as plt import seaborn as sns import matplotlib as mpl class msgparse(): def __init__(self, msg_name, columns, drop_columns, nbpat, pat): self.msg_name = msg_name self.columns = columns self.drop_columns = drop_columns self.nbpat = nbpat self.pat = pat self.list_meas = [] msg = [] msg.append(msgparse('attitude',['time', 'phi','psi','theta'],['time'],4,'ATTITUDE (\S+) (\S+) (\S+)')) msg.append(msgparse('actuators',['time', 'S0','S1','S2'],['time'],4,'ACTUATORS (\S+),(\S+),(\S+)')) msg.append(msgparse('commands',['time', 'C0','C1','C2'],['time'],4,'COMMANDS (\S+),(\S+),(\S+)')) msg.append(msgparse('imuaccel',['time','Ax','Ay','Az'],['time'],4,'IMU_ACCEL (\S+) (\S+) (\S+)')) msg.append(msgparse('imugyro',['time','Gx','Gy','Gz'],['time'],4,'IMU_GYRO (\S+) (\S+) (\S+)')) msg.append(msgparse('mode',['time','mode','1','2','3','4','5'],['time','1','2','3','4','5'],7,'PPRZ_MODE (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)')) msg.append(msgparse('settings',['time','m1','m2','add1','add2'],['time'],5,'SETTINGS (\S+) (\S+) (\S+) (\S+)')) def read_log(ac_id, filename): pattern = [] for i in range(0,len(msg)): pattern.append(re.compile("(\S+) "+ac_id+" "+msg[i].pat)) f = open(filename, 'r') while True: line = f.readline().strip() if line == : break for i in range(0,len(msg)): m = re.match(pattern[i], line) if m: tmp = [] for j in range(1,msg[i].nbpat+1): tmp.append(float(m.group(j))) msg[i].list_meas.append(tmp) def linearize_time(pad, sample_period,df, min_t=None, max_t=None): if (min_t or max_t) == None: min_t = min(df.index) max_t = max(df.index) time = np.arange(int(min_t)+pad, int(max_t)-pad, sample_period) out = pd.DataFrame() out['time'] = time for col in df.columns: func = interp1d(df.index , df[col]) out[col] = func(time) out.index = out.time out.drop(['time'], axis=1, inplace=True) return out if __name__ == "__main__": ac_id = '9' filename = '/data/logfile.txt' read_log(ac_id,filename) df_list = [] for i in range(0,len(msg)): exec('data_values = np.array(msg[i].list_meas)'.format(msg[i].msg_name)) df = pd.DataFrame(data_values, columns=msg[i].columns) df.index = df.time df.drop(msg[i].drop_columns, axis=1, inplace=True) df_list.append(df) min_t = 1000.;max_t = -1. for df in df_list: min_t = min(min_t, min(df.index)) max_t = max(max_t, max(df.index)) pad=10;sample_period=0.01 frames = [linearize_time(pad,sample_period,df_list[i], min_t, max_t) for i in range(0,4)] df_All=pd.concat(frames, axis=1, ignore_index=False, sort=False) sns.set() df_All.plot(subplots=True, figsize=(12,10));plt.show() #df_list[6].plot(subplots=True, figsize=(12,10));plt.show()