def load_data(self): self.log_data = ULog(str(self.log_file_name)).data_list self.data_dict = OrderedDict() for d in self.log_data: data_items_list = [f.field_name for f in d.field_data] data_items_list.remove('timestamp') data_items_list.insert(0, 'timestamp') data_items = [(item, str(d.data[item].dtype), str(len(d.data[item]))) for item in data_items_list] # add suffix to distinguish same name i = 0 name = d.name while True: if i > 0: name = d.name + '_' + str(i) if name in self.data_dict: i += 1 else: break self.data_dict.setdefault(name, data_items[1:]) # attitude index = list(self.data_dict.keys()).index('vehicle_attitude') self.time_stamp_attitude = self.log_data[index].data[ 'timestamp'] / 10**6 q0 = self.log_data[index].data['q[0]'] q1 = self.log_data[index].data['q[1]'] q2 = self.log_data[index].data['q[2]'] q3 = self.log_data[index].data['q[3]'] self.attitude_history = self.quat_to_euler(q0, q1, q2, q3) # position index = list(self.data_dict.keys()).index('vehicle_local_position') self.time_stamp_position = self.log_data[index].data[ 'timestamp'] / 10**6 x = self.log_data[index].data['x'] y = self.log_data[index].data['y'] z = self.log_data[index].data['z'] self.position_history = [ (x[i] * self.SCALE_FACTOR, y[i] * self.SCALE_FACTOR, z[i] * self.SCALE_FACTOR) for i in range(len(x)) ] # motor rotation index = list(self.data_dict.keys()).index('actuator_outputs') self.time_stamp_output = self.log_data[index].data['timestamp'] / 10**6 output0 = self.log_data[index].data['output[0]'] output1 = self.log_data[index].data['output[1]'] output2 = self.log_data[index].data['output[2]'] output3 = self.log_data[index].data['output[3]'] self.output_history = [(output0[i], output1[i], output2[i], output3[i]) for i in range(len(output0))] # get common time range self.time_range = max([self.time_stamp_attitude[0], self.time_stamp_output[0], self.time_stamp_position[0]]), \ min([self.time_stamp_attitude[-1], self.time_stamp_output[-1], self.time_stamp_position[-1]])
from matplotlib import pyplot from pyulog.core import ULog filename = './data/' + 'log_59_2019-4-13-10-49-40.ulg' ulog = ULog(filename) 'Create key_dict={para_name: data file index}' key = [] fn = [] for d in ulog.data_list: u = [] keyd = list(d.data.keys()) fn.append(d.name) key.append(keyd) ind2key = dict(list(enumerate(key))) key2ind = [] for i, j in ind2key.items(): for k in range(0, len((j, i)[0])): key2ind.append([(j, i)[0][k], (j, i)[1]]) key_dict = dict() for line in key2ind: if line[0] in key_dict: key_dict[line[0]].append(line[1]) else: key_dict[line[0]] = [line[1]] 'Application of key_dict, observe para_name, file_index, and file_name' print(list(key_dict.keys())) index = key_dict['alt'] print(index)
def load_data(self): log_data = ULog(str(self.log_file_name)) self.log_info_data = {index:value for index,value in log_data.msg_info_dict.items() if 'perf_' not in index} self.log_info_data['SW version'] = log_data.get_version_info_str() self.log_params_data = log_data.initial_parameters self.log_params_data = OrderedDict([(key, self.log_params_data[key]) for key in sorted(self.log_params_data)]) self.log_data_list = log_data.data_list self.data_dict = OrderedDict() for d in self.log_data_list: data_items_list = [f.field_name for f in d.field_data] data_items_list.remove('timestamp') data_items_list.insert(0, 'timestamp') data_items = [(item, str(d.data[item].dtype), str(len(d.data[item]))) for item in data_items_list] # add suffix to distinguish same name i = 0 name = d.name while True: if i > 0: name = d.name + '_' + str(i) if name in self.data_dict: i += 1 else: break self.data_dict.setdefault(name, data_items[1:]) # pdb.set_trace() # attitude index = list(self.data_dict.keys()).index('vehicle_attitude') self.time_stamp_attitude = self.log_data_list[index].data['timestamp']/10**6 q0 = self.log_data_list[index].data['q[0]'] q1 = self.log_data_list[index].data['q[1]'] q2 = self.log_data_list[index].data['q[2]'] q3 = self.log_data_list[index].data['q[3]'] self.attitude_history = self.quat_to_euler(q0, q1, q2, q3) index = list(self.data_dict.keys()).index('vehicle_attitude_setpoint') self.time_stamp_attitude_setpoint = self.log_data_list[index].data['timestamp']/10**6 q0_d = self.log_data_list[index].data['q_d[0]'] q1_d = self.log_data_list[index].data['q_d[1]'] q2_d = self.log_data_list[index].data['q_d[2]'] q3_d = self.log_data_list[index].data['q_d[3]'] self.attitude_setpoint_history = self.quat_to_euler(q0_d, q1_d, q2_d, q3_d) # position index = list(self.data_dict.keys()).index('vehicle_local_position') self.time_stamp_position = self.log_data_list[index].data['timestamp']/10**6 x = self.log_data_list[index].data['x'] y = self.log_data_list[index].data['y'] z = self.log_data_list[index].data['z'] self.position_history = [(x[i]*self.SCALE_FACTOR, y[i]*self.SCALE_FACTOR, z[i]*self.SCALE_FACTOR) for i in range(len(x))] # motor rotation index = list(self.data_dict.keys()).index('actuator_outputs') self.time_stamp_output = self.log_data_list[index].data['timestamp']/10**6 output0 = self.log_data_list[index].data['output[0]'] output1 = self.log_data_list[index].data['output[1]'] output2 = self.log_data_list[index].data['output[2]'] output3 = self.log_data_list[index].data['output[3]'] self.output_history = [(output0[i], output1[i], output2[i], output3[i]) for i in range(len(output0))] # get common time range self.time_range = max([self.time_stamp_attitude[0], self.time_stamp_output[0], self.time_stamp_position[0]]), \ min([self.time_stamp_attitude[-1], self.time_stamp_output[-1], self.time_stamp_position[-1]]) self.data_loaded = True