def main(event, structure, recompute, normalize): trial_numbers = sorted(settings.keys()) plot_dir = utils.mkdir( os.path.join(PATHS['figures_dir'], 'identification-results', '-'.join(event.lower().split(' ')), '-'.join(structure.split(' ')))) for trial_number in trial_numbers: msg = 'Identifying {} controller from {} for trial #{}' msg = msg.format(structure, event, trial_number) print('=' * len(msg)) print(msg) print('=' * len(msg)) trial = utils.Trial(trial_number) if recompute: trial.remove_precomputed_data() trial.identify_controller(event, structure) fig, axes = trial.plot_joint_isolated_gains(event, structure, normalize=normalize) solver = trial.control_solvers[event][structure] id_num_steps = solver.identification_data.shape[0] title = """\ {} Scheduled Gains Identified from {} Gait Cycles in Trial {} Nominal Speed: {} m/s, Gender: {} """ fig.suptitle( title.format(structure.capitalize(), id_num_steps, trial_number, trial.meta_data['trial']['nominal-speed'], trial.meta_data['subject']['gender'])) fig.set_size_inches((14.0, 14.0)) plt.tight_layout() plt.subplots_adjust(top=0.85) fig_path = os.path.join(plot_dir, 'gains-' + trial_number + '.png') fig.savefig(fig_path, dpi=300) print('Gain plot saved to {}'.format(fig_path)) plt.close(fig) fig, axes = trial.plot_validation(event, structure) fig_path = os.path.join(plot_dir, 'validation-' + trial_number + '.png') fig.savefig(fig_path, dpi=300) print('Validation plot saved to {}'.format(fig_path)) plt.close(fig)
def main(event, force): PATHS = utils.config_paths() trial_numbers = sorted(settings.keys()) event_fname = '-'.join(event.lower().split(' ')) hist_dir = utils.mkdir( os.path.join(PATHS['figures_dir'], 'gait-cycle-histograms')) grf_dir = utils.mkdir(os.path.join(PATHS['figures_dir'], 'vertical-grfs')) for trial_number in trial_numbers: msg = 'Cleaning {} event data for trial #{}'.format( event, trial_number) print('=' * len(msg)) print(msg) print('=' * len(msg)) trial = utils.Trial(trial_number) if force: trial.remove_precomputed_data() trial._write_event_data_frame_to_disk(event) trial._write_inverse_dynamics_to_disk(event) trial._section_into_gait_cycles(event) cleansed_gait_cycles, _ = trial._remove_bad_gait_cycles(event) gait_data = trial.gait_data_objs[event] axes = gait_data.gait_cycle_stats.hist() fig = plt.gcf() fig.savefig(os.path.join(hist_dir, trial_number + '-' + event_fname + '.png'), dpi=300) plt.close(fig) axes = plot_gait_cycles(gait_data.gait_cycles, 'FP2.ForY') fig = plt.gcf() fig.savefig(os.path.join( grf_dir, trial_number + '-' + event_fname + '-before.png'), dpi=300) plt.close(fig) axes = plot_gait_cycles(cleansed_gait_cycles, 'FP2.ForY') fig = plt.gcf() fig.savefig(os.path.join( grf_dir, trial_number + '-' + event_fname + '-after.png'), dpi=300) plt.close(fig) del trial, fig, axes, cleansed_gait_cycles, gait_data
from scipy.integrate import odeint from scipy.interpolate import interp1d from pydy.codegen.code import generate_ode_function from pydy.viz import Scene import pygait2d from pygait2d import derive, simulate from dtk import process # local import utils import simulation from grf_landmark_settings import settings # load the data and find a controller trial_number = '068' trial = utils.Trial(trial_number) trial._write_event_data_frame_to_disk('Longitudinal Perturbation') event_data_frame = trial.event_data_frames['Longitudinal Perturbation'] event_data_frame = simulation.estimate_trunk_somersault_angle(event_data_frame) # TODO : will likely need to low pass filter the two time derivatives event_data_frame['Trunk.Somersault.Rate'] = \ process.derivative(event_data_frame.index.values.astype(float), event_data_frame['Trunk.Somersault.Angle'], method='combination') event_data_frame['RGTRO.VelY'] = \ process.derivative(event_data_frame.index.values.astype(float), event_data_frame['RGTRO.PosY'], method='combination')