From 3ae9c78db6425dbb31ed70598c5130ff99edc7b8 Mon Sep 17 00:00:00 2001 From: nagoldfarb Date: Fri, 10 Jul 2020 22:27:43 -0400 Subject: [PATCH 1/7] removed exo function --- .../Session/ViconGaitingTrial.py | 214 ++---------------- 1 file changed, 20 insertions(+), 194 deletions(-) diff --git a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py index eab6cf4..4cb87ad 100644 --- a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py +++ b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py @@ -228,39 +228,29 @@ def get_force_plates(self): :rtype: Dict """ joints = {} - plate1 = self.vicon.get_force_plate(1) - plate2 = self.vicon.get_force_plate(2) - plate1_forces = plate1.get_forces() - plate2_forces = plate2.get_forces() - plate1_moments = plate1.get_moments() - plate2_moments = plate2.get_moments() - - p1 = (1, plate1_forces, plate1_moments) - p2 = (2, plate2_forces, plate2_moments) - joints[1] = [] - joints[2] = [] - - for p in (p1, p2): - key = p[0] - if self._use_black_list: - if key in self._black_list: - continue - plateF = p[1] - plateM = p[2] + + plates = self.vicon.get_all_force_plate() + + for key, item in plates.items(): + joints[key] = [] for inc in self.vicon_set_points: - start = plate1.get_offset_index(inc[0]) - end = plate1.get_offset_index(inc[1]) - Fx = np.array(plateF.x)[start:end] - Fy = np.array(plateF.y)[start:end] - Fz = np.array(plateF.z)[start:end] - Mx = np.array(plateM.x)[start:end] - My = np.array(plateM.y)[start:end] - Mz = np.array(plateM.z)[start:end] + start = item.get_offset_index(inc[0]) + end = item.get_offset_index(inc[1]) + Fx = np.array(item.force.x)[start:end] + Fy = np.array(item.force.y)[start:end] + Fz = np.array(item.force.z)[start:end] + Mx = np.array(item.moment.x)[start:end] + My = np.array(item.moment.y)[start:end] + Mz = np.array(item.moment.z)[start:end] + cx = np.array(item.CoP.x)[start:end] + cy = np.array(item.CoP.y)[start:end] + cz = np.array(item.CoP.z)[start:end] f = Point.Point(Fx, Fy, Fz) m = Point.Point(Mx, My, Mz) - data = Newton.Newton(None, f, m, None) - time = (len(Fx) / float(self.vicon.length)) * self.dt - stamp = Data.Data(data, np.linspace(0, time, len(data))) + c = Point.Point(Mx, My, Mz) + data = Newton.Newton(c, f, m, None) + # time = (len(Fx) / float(self.vicon.length)) * self.dt + stamp = Data.Data(data, np.linspace(0, 1.0, len(Fx))) joints[key].append(stamp) return joints @@ -404,170 +394,6 @@ def get_CoPs(self): return side - def get_FSRs(self): - """ - Seperates FSR data - :return: FSR data - :rtype: Dict - """ - - left_fsr = self.exoskeleton.left_leg.ankle.FSRs - right_fsr = self.exoskeleton.right_leg.ankle.FSRs - - left = [] - right = [] - - for inc in self.exo_set_points: - left_data = np.array( - [[left_fsr[0].get_values()[inc[0]:inc[1]]], - [left_fsr[1].get_values()[inc[0]:inc[1]]], - [left_fsr[2].get_values()[inc[0]:inc[1]]]]) - - right_data = np.array( - [[right_fsr[0].get_values()[inc[0]:inc[1]]], - [right_fsr[1].get_values()[inc[0]:inc[1]]], - [right_fsr[2].get_values()[inc[0]:inc[1]]]]) - - time = (len(left_data) / float(self.exoskeleton.length)) * self.dt - stamp_left = Data.Data(left_data, np.linspace(0, time, len(left_data))) - stamp_right = Data.Data(right_data, np.linspace(0, time, len(right_data))) - - # if self._use_black_list: - # if count in self._black_list: - # continue - # else: - # left.append(stamp_left) - # right.append(stamp_right) - # - # count += 1 - - side = Side.Side(left, right) - - return side - - def get_pots(self): - """ - Seperates Pot data - :return: Pot data - :rtype: Dict - """ - left_leg = self.exoskeleton.left_leg - right_leg = self.exoskeleton.right_leg - - left = [] - right = [] - count = 0 - - for inc in self.exo_set_points: - left_data = np.array( - [[left_leg.hip.pot.get_values()[inc[0]:inc[1]]], - [left_leg.knee.pot.get_values()[inc[0]:inc[1]]], - [left_leg.ankle.pot.get_values()[inc[0]:inc[1]]]]) - - right_data = np.array( - [[right_leg.hip.pot.get_values()[inc[0]:inc[1]]], - [right_leg.knee.pot.get_values()[inc[0]:inc[1]]], - [right_leg.ankle.pot.get_values()[inc[0]:inc[1]]]]) - - time = (len(left_data) / float(self.exoskeleton.length)) * self.dt - - stamp_left = Data.Data() - stamp_right = Data.Data() - stamp_right.data = right_data - stamp_left.data = left_data - stamp_left.time = np.linspace(0, time, len(left_data)) - stamp_right.time = np.linspace(0, time, len(right_data)) - - if self._use_black_list: - if count in self._black_list: - continue - else: - left.append(stamp_left) - right.append(stamp_right) - count += 1 - - side = Side.Side(left, right) - return side - - def get_accels(self): - """ - Seperates then force plate data - :return: Force plate data - :rtype: Dict - """ - left_leg = self.exoskeleton.left_leg - right_leg = self.exoskeleton.right_leg - - left = [] - right = [] - count = 0 - for inc in self.exo_set_points: - left_data = np.array( - [[left_leg.hip.IMU.accel.get_values()[inc[0]:inc[1]]], - [left_leg.knee.IMU.accel.get_values()[inc[0]:inc[1]]], - [left_leg.ankle.IMU.accel.get_values()[inc[0]:inc[1]]]]) - - right_data = np.array( - [[right_leg.hip.IMU.accel.get_values()[inc[0]:inc[1]]], - [right_leg.knee.IMU.accel.get_values()[inc[0]:inc[1]]], - [right_leg.ankle.IMU.accel.get_values()[inc[0]:inc[1]]]]) - - time = (len(left_data) / float(self.exoskeleton.length)) * self.dt - - stamp_left = Data.Data(left_data, np.linspace(0, time, len(left_data))) - stamp_right = Data.Data(right_data, np.linspace(0, time, len(right_data))) - - if self._use_black_list: - if count in self._black_list: - continue - else: - left.append(stamp_left) - right.append(stamp_right) - count += 1 - - side = Side.Side(left, right) - - return side - - def get_gyros(self): - """ - Seperates then force plate data - :return: Force plate data - :rtype: Dict - """ - left_leg = self.exoskeleton.left_leg - right_leg = self.exoskeleton.right_leg - - left = [] - right = [] - count = 0 - - for inc in self.exo_set_points: - left_data = np.array( - [[left_leg.hip.IMU.gyro.get_values()[inc[0]:inc[1]]], - [left_leg.knee.IMU.gyro.get_values()[inc[0]:inc[1]]], - [left_leg.ankle.IMU.gyro.get_values()[inc[0]:inc[1]]]]) - - right_data = np.array( - [[right_leg.hip.IMU.gyro.get_values()[inc[0]:inc[1]]], - [right_leg.knee.IMU.gyro.get_values()[inc[0]:inc[1]]], - [right_leg.ankle.IMU.gyro.get_values()[inc[0]:inc[1]]]]) - - time = (len(left_data) / float(self.exoskeleton.length)) * self.dt - stamp_left = Data.Data(left_data, np.linspace(0, time, len(left_data))) - stamp_right = Data.Data(right_data, np.linspace(0, time, len(right_data))) - - if self._use_black_list: - if count in self._black_list: - continue - else: - left.append(stamp_left) - right.append(stamp_right) - count += 1 - - side = Side.Side(left, right) - return side - @property def dt(self): return self._dt From d922d8cf6f356492949248e5a5935a9d0be5308f Mon Sep 17 00:00:00 2001 From: nagoldfarb Date: Fri, 10 Jul 2020 22:49:31 -0400 Subject: [PATCH 2/7] added some stub functions for getters --- .../Session/ViconGaitingTrial.py | 52 +++++-------------- 1 file changed, 12 insertions(+), 40 deletions(-) diff --git a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py index 4cb87ad..5067c22 100644 --- a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py +++ b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py @@ -221,7 +221,7 @@ def get_stairs(self, toe_marker, step_frame): return hills - def get_force_plates(self): + def make_force_plates(self): """ Seperates then force plate data :return: Force plate data @@ -255,7 +255,7 @@ def get_force_plates(self): return joints - def get_joint_trajectories(self): + def _make_joint_trajectories(self): """ Seperates then joint trajs data :return: joint trajectory data @@ -304,7 +304,7 @@ def get_joint_trajectories(self): body = Side.Side(left_leg, right_leg) return body - def get_emg(self): + def _make_emgs(self): """ Seperates then EMGs data :return: EMGs data @@ -331,7 +331,7 @@ def get_emg(self): return joints - def get_T_emgs(self): + def _make_T_emgs(self): """ Seperates then EMGs data :return: EMGs data @@ -357,50 +357,22 @@ def get_T_emgs(self): return joints - def get_CoPs(self): - """ - Seperates then CoP data - :return: CoP data - :rtype: Dict - """ - - left = [] - right = [] - count = 0 - left_cop = self.exoskeleton.left_leg.calc_CoP() - right_cop = self.exoskeleton.right_leg.calc_CoP() - - left = [] - right = [] + def get_force_plate(self, key): + pass - for inc in self.exo_set_points: - left_data = left_cop[inc[0]:inc[1]] - right_data = right_cop[inc[0]:inc[1]] + def get_emg(self, key): + pass - time = (len(left_data) / float(self.exoskeleton.length)) * self.dt - stamp_left = Data.Data(left_data, np.linspace(0, time, len(left_data))) - stamp_right = Data.Data(right_data, np.linspace(0, time, len(right_data))) + def get_T_emg(self, key): + pass - if self._use_black_list: - if count in self._black_list: - continue - else: - left.append(stamp_left) - right.append(stamp_right) - - count += 1 - - side = Side.Side(left, right) - - return side + def get_joint_trajectories(self, key): + pass @property def dt(self): return self._dt - @property - def exoskeleton(self): - return self._exoskeleton @property def vicon(self): From bd9b1b35c8c58a0a42faed86ebb52cb3c9a7ccaf Mon Sep 17 00:00:00 2001 From: nagoldfarb Date: Sat, 11 Jul 2020 09:07:15 -0400 Subject: [PATCH 3/7] working on getter for sensors --- .../Session/ViconGaitingTrial.py | 67 ++++++++++++++----- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py index 5067c22..852a2f1 100644 --- a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py +++ b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py @@ -71,6 +71,11 @@ def __init__(self, vicon_file, dt=0.01): self._joint_trajs = None self._black_list = [] self._use_black_list = False + self._T_EMGs = {} + self._EMGs = {} + self._force_plates = {} + self._IMUs = {} + self._accels = {} # Flag for if the data was gathered from the right leg hip angle # Data will only be gathered from the right leg iff handle_nan was set to True @@ -168,7 +173,14 @@ def create_index_seperators(self, verbose=False, handle_nan=False, abort_nan=Fal if verbose: print("Gait cycles: " + str(vicon)) + self.vicon_set_points = vicon # varible that holds the setpoints for the vicon + self._T_EMGs = self._make_T_emgs() + self._EMGs = self._make_emgs() + self._force_plates = self._make_force_plates() + self._joint_trajs = self._make_joint_trajectories() + self._IMUs = {} + self._accels = {} def get_stairs(self, toe_marker, step_frame): @@ -221,7 +233,7 @@ def get_stairs(self, toe_marker, step_frame): return hills - def make_force_plates(self): + def _make_force_plates(self): """ Seperates then force plate data :return: Force plate data @@ -247,7 +259,7 @@ def make_force_plates(self): cz = np.array(item.CoP.z)[start:end] f = Point.Point(Fx, Fy, Fz) m = Point.Point(Mx, My, Mz) - c = Point.Point(Mx, My, Mz) + c = Point.Point(cx, cy, cz) data = Newton.Newton(c, f, m, None) # time = (len(Fx) / float(self.vicon.length)) * self.dt stamp = Data.Data(data, np.linspace(0, 1.0, len(Fx))) @@ -358,16 +370,49 @@ def _make_T_emgs(self): return joints def get_force_plate(self, key): - pass + """ + Return the force plate at the key + """ + if key in self._force_plates.keys(): + return self._force_plates[key] + else: + print("Key not in list") + print("Possible key are:") + print(self._force_plates.keys()) def get_emg(self, key): - pass + """ + Return the force plate at the key + """ + if key in self._EMGs.keys(): + return self._EMGs[key] + else: + print("Key not in list") + print("Possible key are:") + print(self._EMGs.keys()) + def get_T_emg(self, key): - pass + """ + Return the force plate at the key + """ + if key in self._T_EMGs.keys(): + return self._T_EMGs[key] + else: + print("Key not in list") + print("Possible key are:") + print(self._T_EMGs.keys()) def get_joint_trajectories(self, key): - pass + """ + Return the force plate at the key + """ + if key in self._joint_trajs.keys(): + return self._joint_trajs[key] + else: + print("Key not in list") + print("Possible key are:") + print(self._joint_trajs.keys()) @property def dt(self): @@ -378,25 +423,15 @@ def dt(self): def vicon(self): return self._vicon - @property - def joint_trajs(self): - return self._joint_trajs @dt.setter def dt(self, value): self._dt = value - @exoskeleton.setter - def exoskeleton(self, value): - self._exoskeleton = value - @vicon.setter def vicon(self, value): self._vicon = value - @joint_trajs.setter - def joint_trajs(self, value): - self._joint_trajs = value def add_to_blacklist(self, black_indexs): """ From ae2235b4b053182722d8252b7bb2c574d74174a0 Mon Sep 17 00:00:00 2001 From: Nathaniel Date: Sat, 11 Jul 2020 09:26:59 -0400 Subject: [PATCH 4/7] added functions get the key names --- .../Session/ViconGaitingTrial.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py index 852a2f1..560a6dc 100644 --- a/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py +++ b/GaitAnaylsisToolkit/Session/ViconGaitingTrial.py @@ -414,6 +414,31 @@ def get_joint_trajectories(self, key): print("Possible key are:") print(self._joint_trajs.keys()) + + def get_force_plate_names(self): + """ + Returns a list of key names + """ + return self._force_plates.keys() + + def get_EMG_names(self): + """ + Returns a list of key names + """ + return self._EMGs.keys() + + def get_T_EMG_names(self): + """ + Returns a list of key names + """ + return self._T_EMGs.keys() + + def get_joint_trajectories_name(self): + """ + Returns a list of key names + """ + return self._force_plates.keys() + @property def dt(self): return self._dt From 38934ff44f32dc2e91cf149baccc34f8ac386f1d Mon Sep 17 00:00:00 2001 From: nagoldfarb Date: Sat, 11 Jul 2020 09:34:33 -0400 Subject: [PATCH 5/7] refactor --- {Session => GaitAnaylsisToolkit/Session}/GaitComparator.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Session => GaitAnaylsisToolkit/Session}/GaitComparator.py (100%) diff --git a/Session/GaitComparator.py b/GaitAnaylsisToolkit/Session/GaitComparator.py similarity index 100% rename from Session/GaitComparator.py rename to GaitAnaylsisToolkit/Session/GaitComparator.py From 19d88d89a84e517553e7ff08e160cbab3eafeee3 Mon Sep 17 00:00:00 2001 From: ajlewis02 Date: Wed, 15 Jul 2020 12:36:23 -0400 Subject: [PATCH 6/7] Moved GaitComparator.py to correct location --- {Session => GaitAnaylsisToolkit/Session}/GaitComparator.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Session => GaitAnaylsisToolkit/Session}/GaitComparator.py (100%) diff --git a/Session/GaitComparator.py b/GaitAnaylsisToolkit/Session/GaitComparator.py similarity index 100% rename from Session/GaitComparator.py rename to GaitAnaylsisToolkit/Session/GaitComparator.py From 6f1885ef8bc32d75f1b965aa2f05093b858d5f14 Mon Sep 17 00:00:00 2001 From: nagoldfarb Date: Sat, 11 Jul 2020 09:34:33 -0400 Subject: [PATCH 7/7] refactor --- {Session => GaitAnaylsisToolkit/Session}/GaitComparator.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Session => GaitAnaylsisToolkit/Session}/GaitComparator.py (100%) diff --git a/Session/GaitComparator.py b/GaitAnaylsisToolkit/Session/GaitComparator.py similarity index 100% rename from Session/GaitComparator.py rename to GaitAnaylsisToolkit/Session/GaitComparator.py