Source code for EdiHeadyTrack.sensordata

# **************************************************************************** #
#                                                                              #
#                                                         :::      ::::::::    #
#    sensordata.py                                      :+:      :+:    :+:    #
#                                                     +:+ +:+         +:+      #
#    By: taston <thomas.aston@ed.ac.uk>             +#+  +:+       +#+         #
#                                                 +#+#+#+#+#+   +#+            #
#    Created: 2023/04/25 15:35:24 by taston            #+#    #+#              #
#    Updated: 2024/03/20 16:42:58 by taston           ###   ########.fr        #
#                                                                              #
# **************************************************************************** #

import cv2
import numpy as np
from datetime import datetime
import pandas as pd
from .posedetector import PoseDetector
from .filter import Filter

[docs] class SensorData: """ A class representing SensorData Attributes ---------- velocity : dict time history of rotational velocities acceleration : dict time history of rotational accelerations """ def __init__(self): self.velocity = {'frame': [], 'time': [], 'yaw': [], 'pitch': [], 'roll': []} self.acceleration = {'frame': [], 'time': [], 'yaw': [], 'pitch': [], 'roll': []}
[docs] class IMU(SensorData): """ A class used to represent an IMU ... Attributes ---------- filename : str file containing IMU sensor data id : int, float, str unique identifier given to IMU time_offset : float time offset applied to IMU data to sync with head pose data """ _counter = 0 def __init__(self, filename=None, time_offset=0, id=_counter): """ Parameters ---------- filename : str file containing IMU sensor data id : int, float, str unique identifier given to IMU time_offset : float time offset applied to IMU data to sync with head pose data """ super().__init__() IMU._counter += 1 self.filename = filename self.time_offset = time_offset if id: self.id = id else: self.id = IMU._counter
[docs] def apply_filter(self, filter=Filter()): """Applies filter to sensor data and updates Parameters ---------- filter : Filter, optional Filter object used to filter data (default Filter()) Returns ------- self """ # print('Filtering data...') self.filter = filter data = pd.DataFrame.from_dict(self.velocity) # print(data) properties = ['yaw', 'pitch', 'roll'] for property in properties: signal = np.array(data[property]) filtered_signal = self.filter.apply(signal) self.velocity[property] = list(filtered_signal) # self.velocity['time'] = self.velocity['time'][~np.isnan(signal)] # print(signal) # print(filtered_signal) return self