This is an example that uses the MocoInverse tool and EMG data to create an EMG-driven simulation of walking. This example is used in hands-on workshops, and accordingly has blanks that users must fill in. See exampleSquatToStand_answers.m for a completed version.
2 import exampleEMGTracking_helpers
as helpers
15 model = helpers.getWalkingModel()
30 inverse.set_initial_time( )
31 inverse.set_final_time( )
32 inverse.set_mesh_interval( )
33 inverse.set_constraint_tolerance( )
34 inverse.set_convergence_tolerance( )
36 if not os.path.isfile(
'effortSolution.sto'):
45 emgReference = osim.TimeSeriesTable(
'emg.sto')
46 helpers.compareSolutionToEMG(emgReference,
'effortSolution.sto')
62 tracking.setReference( )
63 tracking.setReferenceLabel(
'/forceset/gasmed_l',
'gastrocnemius')
64 tracking.setReferenceLabel(
'/forceset/tibant_l',
'tibialis_anterior')
65 tracking.setReferenceLabel(
'/forceset/bfsh_l',
'biceps_femoris')
66 tracking.setReferenceLabel( )
73 tracking.addScaleFactor(
'gastroc_factor',
'/forceset/gasmed_l', [0.01, 1.0])
74 tracking.addScaleFactor(
'tibant_factor',
'/forceset/tibant_l', [0.01, 1.0])
75 tracking.addScaleFactor(
'bifem_factor',
'/forceset/bfsh_l', [0.01, 1.0])
76 tracking.addScaleFactor( )
83 solver = osim.MocoCasADiSolver.safeDownCast(study.updSolver())
84 solver.resetProblem(problem)
91 if not os.path.isfile(
'trackingSolution.sto'):
97 trackingSolution = osim.MocoTrajectory(
'trackingSolution.sto')
98 gastroc_factor = trackingSolution.getParameter(
'gastroc_factor')
99 tibant_factor = trackingSolution.getParameter(
'tibant_factor')
100 bifem_factor = trackingSolution.getParameter(
'bifem_factor')
105 print(
'\nOptimized scale factor values:')
106 print(
'------------------------------')
107 print(
'gastrocnemius = ' + str(gastroc_factor))
108 print(
'tibialis anterior = ' + str(tibant_factor))
109 print(
'biceps femoris short head = ' + str(bifem_factor))
110 print(
'gluteus = ' + str(gluteus_factor))
113 gastroc = emgReference.updDependentColumn(
'gastrocnemius')
114 tibant = emgReference.updDependentColumn(
'tibialis_anterior')
115 bifem = emgReference.updDependentColumn(
'biceps_femoris')
116 gluteus = emgReference.updDependentColumn(
'gluteus')
117 for t
in np.arange(emgReference.getNumRows()):
119 gastroc[t] = gastroc_factor * gastroc[t]
120 tibant[t] = tibant_factor * tibant[t]
121 bifem[t] = bifem_factor * bifem[t]
122 gluteus[t] = gluteus_factor * gluteus[t]
126 helpers.compareSolutionToEMG(emgReference,
'effortSolution.sto',
127 'trackingSolution.sto')