コード例 #1
0
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)
コード例 #2
0
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
コード例 #3
0
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')