Source code for sensors.xio

'''
Import data saved with XIO-sensors
'''

'''
Author: Thomas Haslwanter
Version: 0.2
Date: May-2016
'''

import os
import pandas as pd

[docs]def read_ratefile(reg_file): '''Read send-rates from an XIO sensor. "Disabled" channels have the "rate" set to "None". Parameters ---------- in_file : string Has to be the "Registers"-file. Returns ------- rates: directory Contains the send-rates for the different "params". ''' params = ['Sensor', 'DateTime', 'BatteryAndThermometer', 'InertialAndMagnetic', 'Quaternion' ] rates = {} # The the file content with open(reg_file, 'r') as in_file: lines = in_file.readlines() # Get the send rates for param in params: for line in lines: if line.find(param) > 0: rate_flag = int(line.split(',')[2]) if rate_flag: ''' 0 ... 1 Hz 1 ... 2 Hz 10 ... 512 Hz ''' rates[param] = 2 ** (rate_flag-1) else: # Disabled rates[param] = None return rates
[docs]def read_datafile(in_file): '''Read data from an XIO "CalInertialAndMag"-file. Parameters ---------- in_file : string Has to be the name of the "CalInertialAndMag"-file. Returns ------- out_list: list Contains the following parameters: - acceleration - angular_velocity - mag_field_direction - packet_nr ''' data = pd.read_csv(in_file) out_list = [] # Extract the columns that you want, by name param_list=['Acc', 'Gyr', 'Mag', 'Packet'] for Expression in param_list: out_list.append(data.filter(regex=Expression).values) return out_list
[docs]def get_data(in_selection): '''Get the sampling rates, as well as the recorded data. Parameters ---------- in_selection : string Directory containing all the data-files, or filename of one file in that directory Returns ------- out_list: list Contains the following parameters: - rate - acceleration - angular_velocity - mag_field_direction - packet_nr ''' if os.path.isdir(in_selection): in_dir = in_selection else: in_file = in_selection in_dir = os.path.split(in_file)[0] file_list = os.listdir(in_dir) # Get the filenames, based on the XIO-definitions files = {} for file in file_list: if file.find('Registers') > 0: files['register'] = os.path.join(in_dir, file) if file.find('CalInertialAndMag') > 0: files['data'] = os.path.join(in_dir, file) # Read in the registers-file, and extract the sampling rates rates = read_ratefile(files['register']) # Read the sensor-data data = read_datafile(files['data']) return ([rates['InertialAndMagnetic']] + data)
if __name__=='__main__': test_dir = r'..\..\tests\data\data_xio' assert os.path.exists(test_dir) data = get_data(test_dir) print('Rate: {0} [Hz]'.format(data[0])) print('Acceleration [m/s^2]:\n {0}'.format(data[1]))