Source code for sensors.xsens

'''
Import data saved with XSens-sensors, through subclassing "IMU_Base"
'''

'''
Author: Thomas Haslwanter
'''

import numpy as np
import pandas as pd
import abc

# To ensure that the relative path works
import os
import sys

parent_dir = os.path.abspath(os.path.join( os.path.dirname(__file__), '..' ))
if parent_dir not in sys.path:
    sys.path.insert(0, parent_dir)

from imus import IMU_Base

[docs]class XSens(IMU_Base): """Concrete class based on abstract base class IMU_Base """
[docs] def get_data(self, in_file, in_data=None): '''Get the sampling rate, as well as the recorded data, and assign them to the corresponding attributes of "self". Parameters ---------- in_file : string Filename of the data-file in_data : not used here Assigns ------- - rate : rate - acc : acceleration - omega : angular_velocity - mag : mag_field_direction ''' # Get the sampling rate from the second line in the file try: fh = open(in_file) fh.readline() line = fh.readline() rate = np.float64(line.split(':')[1].split('H')[0]) fh.close() except FileNotFoundError: print('{0} does not exist!'.format(in_file)) return -1 # Read the data data = pd.read_csv(in_file, sep='\t', skiprows=4, index_col=False) # Extract the columns that you want, and pass them on in_data = {'rate':rate, 'acc': data.filter(regex='Acc').values, 'omega': data.filter(regex='Gyr').values, 'mag': data.filter(regex='Mag').values} self._set_data(in_data)
if __name__ == '__main__': my_sensor = XSens(in_file=r'..\tests\data\data_xsens.txt') import matplotlib.pyplot as plt plt.plot(my_sensor.quat[:,1:]) plt.show() print('Done')