To Whom it may concern,
I am trying to write a python code for simulating several subjects.
When I am working in GUI, I can easily use plot option to extract muscles moment, moment arm, etc. However, I do not know the procedure for extracting MuscleMoments using python code.
I would appreciate if you let me know How I can do this task.
Secondly, I want to run several subjects using python simultaneously. How it can be performed in python? To clarify, I do not want to do sequentially simulation for each subject.
Thirdly, When I am running each CMC simulation, It is automatically generating some files for me. Is it possible to change generated files format and save each simulation in a different directory?
Thanks for all the help,
Sincerely,
Ali.
Muscles Moment extracting using python code
- Ali Khalilianmotamed Bonab
- Posts: 47
- Joined: Mon Aug 13, 2018 6:28 am
- Dimitar Stanev
- Posts: 1096
- Joined: Fri Jan 31, 2014 5:14 am
Re: Muscles Moment extracting using python code
You can calculate the moment arm after you position the model into the pose of interest and realize the state to position level. Please look at the following code, where I sample the moment arm of each muscle with respect to the coordinates that are spanned by the muscle
https://github.com/mitkof6/symbolic_mom ... rm.py#L257
Yes this is possible (see code below for performing SO in OpenSim v4.0). Please clarify what kind of analysis (IK, SO, ID, ...) do you want to run on python.
The file format cannot be changed but you can set the result dir of the CMCTool.
https://github.com/mitkof6/symbolic_mom ... rm.py#L257
Yes this is possible (see code below for performing SO in OpenSim v4.0). Please clarify what kind of analysis (IK, SO, ID, ...) do you want to run on python.
Code: Select all
def perform_so(model_file, ik_file, grf_file, grf_xml, reserve_actuators,
results_dir):
"""Performs Static Optimization using OpenSim.
Parameters
----------
model_file: str
OpenSim model (.osim)
ik_file: str
kinematics calculated from Inverse Kinematics
grf_file: str
the ground reaction forces
grf_xml: str
xml description containing how to apply the GRF forces
reserve_actuators: str
path to the reserve actuator .xml file
results_dir: str
directory to store the results
"""
# model
model = opensim.Model(model_file)
# prepare external forces xml file
name = os.path.basename(grf_file)[:-8]
external_loads = opensim.ExternalLoads(model, grf_xml)
external_loads.setExternalLoadsModelKinematicsFileName(ik_file)
external_loads.setDataFileName(grf_file)
external_loads.setLowpassCutoffFrequencyForLoadKinematics(6)
external_loads.printToXML(results_dir + name + '.xml')
# add reserve actuators
force_set = opensim.ForceSet(model, reserve_actuators)
force_set.setMemoryOwner(False) # model will be the owner
for i in range(0, force_set.getSize()):
model.updForceSet().append(force_set.get(i))
# construct static optimization
motion = opensim.Storage(ik_file)
static_optimization = opensim.StaticOptimization()
static_optimization.setStartTime(motion.getFirstTime())
static_optimization.setEndTime(motion.getLastTime())
static_optimization.setUseModelForceSet(True)
static_optimization.setUseMusclePhysiology(True)
static_optimization.setActivationExponent(2)
static_optimization.setConvergenceCriterion(0.0001)
static_optimization.setMaxIterations(100)
model.addAnalysis(static_optimization)
# analysis
analysis = opensim.AnalyzeTool(model)
analysis.setName(name)
analysis.setModel(model)
analysis.setInitialTime(motion.getFirstTime())
analysis.setFinalTime(motion.getLastTime())
analysis.setLowpassCutoffFrequency(6)
analysis.setCoordinatesFileName(ik_file)
analysis.setExternalLoadsFileName(results_dir + name + '.xml')
analysis.setLoadModelAndInput(True)
analysis.setResultsDir(results_dir)
analysis.run()
so_force_file = results_dir + name + '_StaticOptimization_force.sto'
so_activations_file = results_dir + name + \
'_StaticOptimization_activation.sto'
return (so_force_file, so_activations_file)
- Ali Khalilianmotamed Bonab
- Posts: 47
- Joined: Mon Aug 13, 2018 6:28 am
Re: Muscles Moment extracting using python code
Thanks for your reply,
About your question for clarifying the tasks, I am trying to do RRA and CMC several times for each subjects.
Just in case for clarifying the idea for myself, In case of Calculating the Moment of each muscles during a gait cycle, I have to derive each muscle moment arm and multiply it with force generated by CMC.
Sincerely Yours,
Ali.
About your question for clarifying the tasks, I am trying to do RRA and CMC several times for each subjects.
Just in case for clarifying the idea for myself, In case of Calculating the Moment of each muscles during a gait cycle, I have to derive each muscle moment arm and multiply it with force generated by CMC.
Sincerely Yours,
Ali.
- Dimitar Stanev
- Posts: 1096
- Joined: Fri Jan 31, 2014 5:14 am
Re: Muscles Moment extracting using python code
Unfortunately, I don't have python scripts for these two.I am trying to do RRA and CMC several times for each subjects.
Yes tau = R * fm, but in CMC you also have the residual forces from the reserve actuators. You can perform inverse dynamics which is the result of what you want to calculate without getting into the trouble to calculate the moment arm and muscle forces.Just in case for clarifying the idea for myself, In case of Calculating the Moment of each muscles during a gait cycle, I have to derive each muscle moment arm and multiply it with force generated by CMC.
- Ali Khalilianmotamed Bonab
- Posts: 47
- Joined: Mon Aug 13, 2018 6:28 am
Re: Muscles Moment extracting using python code
I just wrote this python code for RRA in Ubuntu. However, It is giving me a error :
Segmentation fault (core dumped)
and Also in GUI there is a additional force set files which adds actuator to system. In python
gives error :
TypeError: in method 'AbstractTool_setForceSetFiles', argument 2 of type 'OpenSim::Array< std::string > const &'
Could you please help me to figure out how I should fix this problems?
Sincerely,
Ali.
Segmentation fault (core dumped)
Code: Select all
subject_01_Path = AbsPath + 'subject01/' ## Absolute Path of 1st subject
subject_01_RRA_Path = subject_01_Path + 'rra_multipleSteps/' ## RRA Path
subject_01_Dataset = DatasetPathAbs + 'subject01/' ## Absolute Path of 1st subject
subject_01= opensim.Model(subject_01_Path + 'Subject_01.osim')
RRA = opensim.RRATool()
RRA.setModel(subject_01)
RRA.setDesiredKinematicsFileName(subject_01_Path + 'ik/Results_191/Run_20002.mot')
RRA.setLowpassCutoffFrequency(15)
RRA.setTaskSetFileName(subject_01_RRA_Path + 'gait2392_RRA_Tasks_v191.xml')
RRA.setOutputModelFileName(subject_01_Path + 'Subject_01.osim')
RRA.setAdjustedCOMBody('torso')
RRA.setAdjustCOMToReduceResiduals(True)
RRA.setReplaceForceSet(True)
RRA.setExternalLoadsFileName(subject_01_RRA_Path + 'ModifiedExternalForce.xml')
RRA.setInitialTime(0.199)
RRA.setFinalTime(0.962)
RRA.setMinDT(0.00000001)
RRA.setMaxDT(0.00001)
RRA.setMaximumNumberOfSteps(20000)
RRA.setErrorTolerance(0.00001)
RRA.setOutputPrecision(20)
MainDir = RRA.setResultsDir(subject_01_Dataset + 'RRA/Cycle_01')
RRA.run()
Code: Select all
RRA.setForceSetFiles(subject_01_RRA_Path + 'gait2392_RRA_Actuators_v191.xml')
TypeError: in method 'AbstractTool_setForceSetFiles', argument 2 of type 'OpenSim::Array< std::string > const &'
Could you please help me to figure out how I should fix this problems?
Sincerely,
Ali.
- Dimitar Stanev
- Posts: 1096
- Joined: Fri Jan 31, 2014 5:14 am
Re: Muscles Moment extracting using python code
Code: Select all
arr = ArrayStr()
arr.append(subject_01_RRA_Path + 'gait2392_RRA_Actuators_v191.xml')
RRA.setForceSetFiles(arr)
- Ali Khalilianmotamed Bonab
- Posts: 47
- Joined: Mon Aug 13, 2018 6:28 am
Re: Muscles Moment extracting using python code
Thanks for the reply,
Is it going to solve my "CORE DUMB ERROR" also?
if it is, Could you please provide a brief explanation about the reason of this error?
Sincerely Yours,
Ali.
Is it going to solve my "CORE DUMB ERROR" also?
if it is, Could you please provide a brief explanation about the reason of this error?
Sincerely Yours,
Ali.