-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsimulateRun.py
More file actions
90 lines (71 loc) · 2.63 KB
/
Copy pathsimulateRun.py
File metadata and controls
90 lines (71 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import os
import opensim as osim
from simFunctions import runProgram, \
getField, \
setMassOfBodiesUsingRRAMassChange, \
scaleOptimalForceSubjectSpecific, \
setMaxContractionVelocityAllMuscles
# Base dir
# assume we are running from baseDir/Python
curPath = os.getcwd()
[baseDir,sub]=os.path.split(curPath)
#print baseDir
# Scale
os.chdir(baseDir + '/Scale')
cmdprog = 'opensim-cmd'
cmdtool = 'run-tool'
cmdfile = 'scale_setup_run_scaleOnly.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
cmdfile = 'scale_setup_run.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
# Inverse Kinematics
os.chdir(baseDir + '/IK')
cmdfile = 'ik_setup_run.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
# RRA 1
os.chdir(baseDir + '/RRA/run')
cmdfile = 'rra_setup_run_1.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
with open('out.log', 'r') as flog:
txtLog = flog.read()
flog.close()
massChange = float(getField(txtLog, 'Total mass change: '))
print 'run, rra 1, dMass = ', massChange
dCOM = getField(txtLog, 'Mass Center (COM) adjustment: ')
print 'run, rra 1, dCOM = ', dCOM
osimModel_rraMassChanges = osim.Model('subject_run_rra1.osim')
osimModel_rraMassChanges = setMassOfBodiesUsingRRAMassChange(osimModel_rraMassChanges, massChange)
osimModel_rraMassChanges.printToXML('subject_run_rra1.osim')
# RRA 2
cmdfile = 'rra_setup_run_2.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
with open('out.log', 'r') as flog:
txtLog = flog.read()
flog.close()
massChange = float(getField(txtLog, 'Total mass change: '))
print 'run, rra 2, dMass = ', massChange
dCOM = getField(txtLog, 'Mass Center (COM) adjustment: ')
print 'run, rra 2, dCOM = ', dCOM
osimModel_rraMassChanges = osim.Model('subject_run_rra2.osim')
osimModel_rraMassChanges = setMassOfBodiesUsingRRAMassChange(osimModel_rraMassChanges, massChange)
osimModel_rraMassChanges.printToXML('subject_run_rra2.osim')
# Scale muscle forces based on final mass, set vmax
osimModel_postRRA = scaleOptimalForceSubjectSpecific(osimModel_rraMassChanges, osimModel_rraMassChanges, 1.70, 1.83)
osimModel_postRRA = setMaxContractionVelocityAllMuscles(osimModel_postRRA, 15.0)
osimModel_postRRA.printToXML(baseDir +'/CMC/run/subject_run_adjusted.osim');
# CMC
os.chdir(baseDir + '/CMC/run')
cmdfile = 'cmc_setup_run.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
# ID
os.chdir(baseDir + '/ID')
cmdfile = 'id_setup_run.xml'
cmdfull = [cmdprog, cmdtool, cmdfile]
rc = runProgram(cmdfull)
os.chdir(baseDir + '/Python')