Beispiel #1
0
    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]])
Beispiel #2
0
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)
Beispiel #3
0
    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