Manual
User Manual:
Open the PDF directly: View PDF
.
Page Count: 13
| Download | |
| Open PDF In Browser | View PDF |
Manual SimTK optcntrlmuscle (v2.1)
Friedl De Groote, Maarten Afschrift, Tom Van Wouwe, Antoine Falisse
07/11/2018
Contents
1 Release notes
1.1 Release 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2 Overview
2
3 Installation Instruction
3
4 Main Function
4.1 Using GPOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 With explicit activation dynamics formulation (De Groote et al. (2016))
4.1.2 With implicit activation dynamics formulation (De Groote et al. (2009))
4.2 Using CasADi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 With explicit activation dynamics formulation (De Groote et al. (2016))
4.2.2 With implicit activation dynamics formulation (De Groote et al. (2009))
4.3 Input Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Output arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Using GPOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.2 Using CasADi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
3
3
3
3
4
4
4
4
5
5
6
5 GPOPS-II
5.1 Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
6 CasADi
6.1 Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
8
7 Muscle model
8
8 Tips and Tricks
8
9 Examples
9.1 Walking example De Groote et al. 2016 . . .
9.2 Running example De Groote et al. 2016 . . .
9.3 OpenSim installation example Gait10dof18m
9.4 OpenSim installation example Gait23dof54m
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
10
11
12
1
Release notes
1.1
Release 2.1
CasADi was added as an alternative to GPOPS-II and ADiGator (see section 2 for details).
The reserve actuators (RActivation) were unscaled in the output of the main functions.
The time derivatives of the muscle contraction dynamics states, i.e. normalized muscle
fiber velocities or derivatives of normalized tendon forces, were added to the cost function
with a small weighting factor to prevent spiky outputs.
The tendon stiffness was added as an optional user parameter (see section 9.3 for example).
2
Overview
The provided MATLAB code solves the muscle redundancy problem using direct collocation as
described in De Groote F, Kinney AL, Rao AV, Fregly BJ. Evaluation of direct collocation optimal control problem formulations for solving the muscle redundancy problem. Annals of Biomedical Engineering (2016). http://link.springer.com/article/10.1007%2Fs10439-016-1591-9.
From v2.1, CasADi can be used as an alternative to GPOPS-II and ADiGator. CasADi is
an open-source tool for nonlinear optimization and algorithmic differentiation (https://web.
casadi.org/). Results using CasADi and GPOPS-II are very similar (differences can be attributed to the different direct collocation formulations and scaling). We used CasADi’s Opti
stack, which is a collection of CasADi helper classes that provides a close correspondence
between mathematical NLP notation and computer code (https://web.casadi.org/docs/
#document-opti). CasADi is actively maintained and developed, and has an active forum
(https://groups.google.com/forum/#!forum/casadi-users).
From v1.1, an implicit formulation of activation dynamics can be used to solve the muscle redundancy problem. Additionally, by using the activation dynamics model proposed by Raasch
et al. (1997), we could introduce a nonlinear change of variables to exactly impose activation dynamics in a continuously differentiable form, omitting the need for a smooth approximation such as described in De Groote et al. (2016). A result of this change of variables
is that muscle excitations are not directly accessible during the optimization. Therefore, we
replaced muscle excitations by muscle activations in the objective function. This implicit formulation is described in De Groote F, Pipeleers G, Jonkers I, Demeulenaere B, Patten C,
Swevers J, De Schutter J. A physiology based inverse dynamic analysis of human gait: potential
and perspectives F. Computer Methods in Biomechanics and Biomedical Engineering (2009).
http://www.tandfonline.com/doi/full/10.1080/10255840902788587. Results from both
formulations are very similar (differences can be attributed to the slightly different activation
dynamics models and cost functions). However, the formulation with implicit activation dynamics (De Groote et al., (2009)) is computationally faster. This can mainly be explained by
the omission of a tanh function in the constraint definition, whose evaluation is computationally
expensive when solving the NLP.
Any questions? Please contact us: friedl.degroote@kuleuven.be, maarten.afschrift@kuleuven.be,
tom.vanwouwe@kuleuven.be, and antoine.falisse@kuleuven.be.
2
3
Installation Instruction
Add the main folder and subfolder to your MATLAB path
1
addpath(genpath('C/......./SimTK optcntrlmuscle'))).
Several software packages are needed to run the program
The OpenSim MATLAB interface is used to generate the inputs to the optimal control
problem based on a scaled OpenSim model and the solution of inverse kinematics (providing the solution of inverse dynamics is optional). To this aim, install OpenSim and set
up the OpenSim MATLAB interface (OpenSim: https://simtk.org/frs/?group_id=
91, OpenSim API: http://simtk-confluence.stanford.edu:8080/display/OpenSim/
Scripting+with+Matlab).
Using GPOPS
– GPOPS-II is used to solve the optimal control problem using direct collocation (http:
//www.gpops2.com/). A one-time 30-day trial license is avaiable for all users who
register.
– ADiGator is used for automatic differentiation (https://sourceforge.net/projects/
adigator/).
Using CasADi
– CasADi is used for nonlinear optimization and algorithmic differentiation (https:
//web.casadi.org/).
4
Main Function
SolveMuscleRedundancy is the main function of this program and is used to solve the muscle
redundancy problem. There are eight variants of this function that differ based on the chosen
optimization package (GPOPS or CasADi), the formulation of the contraction dynamics (normalized tendon force or normalized muscle fiber length as a state), and the formulation of the
activation dynamics (explicit or implicit).
4.1
4.1.1
Using GPOPS
With explicit activation dynamics formulation (De Groote et al. (2016))
SolveMuscleRedundancy FtildeState GPOPS uses the normalized tendon force as a state
SolveMuscleRedundancy lMtildeState GPOPS uses the normalized muscle fiber length as
a state
4.1.2
With implicit activation dynamics formulation (De Groote et al. (2009))
SolveMuscleRedundancy FtildeState actdyn GPOPS uses the normalized tendon force as
a state
SolveMuscleRedundancy lMtildeState actdyn GPOPS uses the normalized muscle fiber
length as a state
3
4.2
4.2.1
Using CasADi
With explicit activation dynamics formulation (De Groote et al. (2016))
SolveMuscleRedundancy FtildeState CasADi uses the normalized tendon force as a state
SolveMuscleRedundancy lMtildeState CasADi uses the normalized muscle fiber length as
a state
4.2.2
With implicit activation dynamics formulation (De Groote et al. (2009))
SolveMuscleRedundancy FtildeState actdyn CasADi uses the normalized tendon force as
a state
SolveMuscleRedundancy lMtildeState actdyn CasADi uses the normalized muscle fiber
length as a state
4.3
Input Arguments
Required input arguments for SolveMuscleRedundancy
1. model path: directory and filename of the scaled OpenSim model (.osim file). The code
should work with any OpenSim model with valid muscle-tendon parameters for which
OpenSim’s Inverse Dynamics and Muscle Analysis Tools generate reliable results. Note
that only the muscle-tendon parameters and not the muscle model specified in the osim-file
are used (for details see Muscle model).
2. IK path: directory and filename of the inverse kinematics solution (.mot file).
3. ID path: directory and filename of the inverse dynamics solution (.sto file). If left empty,
the inverse dynamics solution will be computed from the external loads (see Optional input
arguments).
4. time: 1 x 2 MATLAB array with the initial and final time of the analysis in seconds.
Initial and final states influence the optimal controls over a period of about 50 ms at the
beginning and end of the time interval over which the optimal control problem is solved.
Since in practice the initial and final states are generally unknown, problems should be
solved for a time interval containing five additional data points (considering a 100Hz
sampling frequency) at the beginning and end of the motion cycle. Those additional data
points should not be considered in further analyses. The user should thus not be surprised
to observe unrealistically high muscle activation at the beginning of the motion (more
details in companion paper).
5. Out path: directory where you want to store the results from the muscle analysis.
6. Misc: miscellaneous input arguments
DofNames Input is a cell array specifying for which degrees of freedom you want to
solve the muscle redundancy problem. Typically the muscle redundancy problem is
solved for one leg at a time (there are no muscles spanning both legs).
MuscleNames Input is a cell array that specifies the muscles to be included when
solving the muscle redundancy problem. All muscles that actuate (i.e. have a moment
arm with respect to) the degrees of freedom specified in DofNames Input will be
selected by default if this array is left empty.
4
Optional input arguments for SolveMuscleRedundancy
1. Misc.Loads path: directory and filename of the external loads (.xml file). The program
will use the OpenSim libraries to solve the inverse dynamics problem when the required
input argument ID path is empty and Misc.Loads path points to an external loads file.
2. Misc.ID ResultsPath: directory where the inverse dynamics results will be saved when
the input argument ID path is left empty.
3. Misc.f cutoff ID: cutoff frequency for the butterworth recursive low pass filter applied to
the inverse dynamics data (default is 6 Hz).
4. Misc.f order ID: order of the butterworth recursive low pass filter applied to the inverse
dynamics data (default is 6).
5. Misc.f cutoff LMT : cutoff frequency for the butterworth recursive low pass filter applied
to the muscle tendon lengths from the muscle analysis (default is 6 Hz).
6. Misc.f order LMT : order of the butterworth recursive low pass filter applied to the muscle
tendon lengths from the muscle analysis (default is 6).
7. Misc.f cutoff dM : cutoff frequency for the butterworth recursive low pass filter applied to
the muscle moment arms from the muscle analysis (default is 6 Hz).
8. Misc.f order dM : order of the butterworth recursive low pass filter applied to the muscle
moment arms from the muscle analysis (default is 6).
9. Misc.f cutoff IK : cutoff frequency for the butterworth recursive low pass filter applied
to the inverse kinematics data (default is 6 Hz) when performing the muscle analysis to
compute muscle-tendon lengths and moment arms.
10. Misc.f order IK : order of the butterworth recursive low pass filter applied to the inverse
kinematics data (default is 6).
11. Misc.Mesh Frequency: number of mesh interval per second (default is 100, but a denser
mesh might be required to obtain the desired accuracy especially for faster motions).
12. Misc.Atendon: vector with tendon stiffness for the selected muscles. The order should
correspond to MuscleNames Input. The default value is 35 and a lower value corresponds
to a more compliant tendon. The default value will be used when left empty. An example
is provided in section 9.3 to set a different stiffness to the Achilles tendon.
4.4
4.4.1
Output arguments
Using GPOPS
1. Time: time vector.
2. MExcitation: optimal muscle excitation (matrix dimension: number of collocation points
x number of muscles).
3. MActivation: optimal muscle activation (matrix dimension: number of collocation points
x number of muscles).
5
4. RActivation: activation of the reserve actuators (matrix dimension: number of collocation
points x number of degrees of freedom).
5. TForcetilde: normalized tendon force (matrix dimension: number of collocation points x
number of muscles).
6. TForce: tendon force (matrix dimension: number of collocation points x number of muscles).
7. lMtilde: normalized muscle fiber length (matrix dimension: number of collocation points
x number of muscles).
8. lM: muscle fiber length (matrix dimension: number of collocation points x number of
muscles) .
9. MuscleNames: cell array that contains the names of the selected muscles (matrix dimension: number of muscles).
10. OptInfo: output structure created by GPOPS-II.
11. DatStore: data structure with input information for the optimal control problem.
4.4.2
Using CasADi
CasADi uses piecewise-constant controls in the mesh intervals. We therefore distinguish between
collocation points (for the states) and mesh points (for the states and controls) in the output
arguments.
1. Time: time vector
(a) Time.meshPoints: time at mesh points
(b) Time.collocationPoints: time at collocation points
2. MExcitation.meshPoints: muscle excitation (matrix dimension: number of mesh points
points x number of muscles).
3. MActivation: muscle activation
(a) MActivation.meshPoints: muscle activation at mesh points (matrix dimension: number of mesh points x number of muscles).
(b) MActivation.collocationPoints: muscle activation at collocation points (matrix dimension: number of collocation points x number of muscles).
4. RActivation.meshPoints: activation of the reserve actuators (matrix dimension: number
of mesh points x number of degrees of freedom).
5. TForcetilde: normalized tendon force
(a) TForcetilde.meshPoints: normalized tendon force at mesh points (matrix dimension:
number of mesh points x number of muscles).
(b) TForcetilde.collocationPoints: normalized tendon force at collocation points (matrix
dimension: number of collocation points x number of muscles).
6. TForce: tendon force
6
(a) TForce.meshPoints: tendon force at mesh points (matrix dimension: number of mesh
points x number of muscles).
(b) TForce.collocationPoints: tendon force at collocation points (matrix dimension: number of collocation points x number of muscles).
7. lMtilde: normalized muscle fiber length
(a) lMtilde.meshPoints: normalized muscle fiber length at mesh points (matrix dimension: number of mesh points x number of muscles).
(b) lMtilde.collocationPoints: normalized muscle fiber length at collocation points (matrix dimension: number of collocation points x number of muscles).
8. lM: muscle fiber length
(a) lM.meshPoints: muscle fiber length at mesh points (matrix dimension: number of
mesh points x number of muscles).
(b) lM.collocationPoints: muscle fiber length at collocation points (matrix dimension:
number of collocation points x number of muscles).
9. MuscleNames: cell array that contains the names of the selected muscles (matrix dimension: number of muscles).
10. OptInfo: output structure with settings used in CasADi.
11. DatStore: data structure with input information for the optimal control problem.
5
5.1
GPOPS-II
Setup
The GPOPS-II setup is accessible through the function SolveMuscleRedundancy < ... > GPOPS.m under GPOPS setup. The user is referred to the GPOPS-II user guide for setup
options. A higher accuracy can be reached by adjusting, for instance, the number of mesh intervals. This however comes at the expense of the computational time. 100 mesh intervals per
second are used by default.
5.2
Output
The output variable OptInfo contains all information related to the optimal control problem
solution. Convergence to an optimal solution is reached when output.result.nlpinfo is flagged 0
(”EXIT: Optimal solution found” in the command window of MATLAB). The mesh accuracy
can be assessed with output.result.maxerrors. Cost functional, control, state (and costate) can
be accessed in output.result.solution.phase.
To recall, the user should consider extending the time interval by 50-100 ms at the beginning and
end of the motion to limit the influence of the unknown initial and final state on the solution.
Results from those additional periods should not be considered realistic and will typically result
in high muscle activation.
7
6
CasADi
6.1
Setup
The CasADi setup is accessible through the function SolveMuscleRedundancy < ... > CasADi.m
under CasADi setup. The user is referred to the CasADi user guide for setup options.
6.2
Output
The output variable OptInfo contains information related to the optimal control problem settings. As with GPOPS, the user should consider extending the time interval by 50-100 ms at
the beginning and end of the motion to limit the influence of the unknown initial and final state
on the solution. Results from those additional periods should not be considered realistic and
will typically result in high muscle activation.
7
Muscle model
The musculotendon properties are fully described in the supplementary materials of the aforementioned publication. Importantly, only the tendon slack length, optimal muscle fiber length,
maximal isometric muscle force, optimal pennation angle and maximal muscle fiber contraction
velocity are extracted from the referred OpenSim model. Other properties are defined in the code
and can be changed if desired. By default, the activation and deactivation time constants are
15 and 60 ms respectively (see tau act and tau deact in SolveMuscleRedundancy < state >.m).
8
Tips and Tricks
1. We advise users to use the formulations with normalized tendon force as a state. They
appear to have improved convergence properties as compared to formulations with normalized muscle fiber length as a state. This might be due to the more linear relationship
between muscle activation and tendon force than between muscle activation and muscle
length.
2. We advise users to use the formulations with implicit activation dynamics as they are in
most cases computationally more efficient.
3. If you observe spiky output variables (e.g. muscle excitations), try increasing the mesh frequency. This might improve the results although it might also increase the computational
time.
9
Examples
Four examples are provided in the folder examples.
9.1
1
2
3
4
5
6
Walking example De Groote et al. 2016
clear
all ; close
all ; clc
%% Choose o p t i m i z a t i o n framework
% framework = ' GPOPS ' ;
framework = ' CasADi ' ;
8
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
91
92
93
94
95
96
97
98
99
%% Choose c o n t r a c t i o n dynamics f o r m u l a t i o n
% formulation contdyn = ' lMtildeState ' ;
formulation contdyn = ' FtildeState ' ;
%% Choose a c t i v a t i o n dynamics f o r m u l a t i o n
% f o r m u l a t i o n a c t d y n = ' DeGroote2016 ' ;
f o r m u l a t i o n a c t d y n = ' DeGroote2009 ' ;
%% Example
% Add main f o l d e r and s u b f o l d e r t o matlab path ( i n s t a l l a t i o n )
f i l e p a t h=which ( ' W a l k i n g D e G r o o t e e t a l 2 0 1 6 . m ' ) ;
[ DirExample Walking , ¬ ,¬]= f i l e p a r t s ( f i l e p a t h ) ;
[ DirExample , ¬]= f i l e p a r t s ( DirExample Walking ) ;
[ MainDir , ¬]= f i l e p a r t s ( DirExample ) ;
addpath ( g e n p a t h ( MainDir ) ) ;
% Needed I n p u t Arguments
I K p a t h= f u l l f i l e ( MainDir , ' Examples ' , ' W a l k i n g D e G r o o t e e t a l 2 0 1 6 ' , ' WalkingData ' , ' W a l k i n g I K . m o t ' ) ;
I D p a t h= f u l l f i l e ( MainDir , ' Examples ' , ' W a l k i n g D e G r o o t e e t a l 2 0 1 6 ' , ' WalkingData ' , ' W a l k i n g I D . s t o ' ) ;
m o d e l p a t h= f u l l f i l e ( MainDir , ' Examples ' , ' W a l k i n g D e G r o o t e e t a l 2 0 1 6 ' , ' WalkingData ' , ' s u b j e c t 1 . o s i m ' ) ;
t i m e =[0 . 5 1 6 1 . 9 5 ] ; % R i g h t s t a n c e p h a s e (+50ms b e g i n n i n g and end o f t i m e i n t e r v a l , more ...
d e t a i l s s e e manual and p u b l i c a t i o n )
Out path= f u l l f i l e ( MainDir , ' Examples ' , ' W a l k i n g D e G r o o t e e t a l 2 0 1 6 ' , ' R e s u l t s ' ) ;
M i s c . D o f N a m e s I n p u t={ ' a n k l e a n g l e r ' , ' k n e e a n g l e r ' , ' h i p f l e x i o n r ' , ' h i p r o t a t i o n r
M i s c . M u s c l e N a m e s I n p u t ={}; % S e l e c t s a l l m u s c l e s f o r i n p u t DOFs when empty
% O p t i o n a l I n p u t Arguments
%
Misc.f cutoff ID = 6;
Misc.f order ID = 4;
%
Misc.f cutoff lMT = 6;
%
%
Misc.f order lMT = 4;
%
M i s c . f c u t o f f d M= 6 ;
Misc.f order dM = 4;
%
M i s c . f c u t o f f I K= 6 ;
%
Misc.f order IK = 4;
%
cutoff
order
cutoff
order
cutoff
order
cutoff
order
frequency
frequency
frequency
frequency
frequency
frequency
frequency
frequency
f i l t e r i n g ID
f i l t e r i n g ID
f i l t e r i n g lMT
f i l t e r i n g lMT
f i l t e r i n g MA
f i l t e r i n g MA
f i l t e r i n g IK
f i l t e r i n g IK
%% S o l v e t h e problem
s w i t c h framework
c a s e ' GPOPS '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
case
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
end
' CasADi '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
9
'
,
'
hip adduction r
'
};
100
101
102
103
104
105
106
107
108
109
110
111
112
113
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
end
end
9.2
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
Running example De Groote et al. 2016
clear
all ; close
all ; clc
%% Choose o p t i m i z a t i o n framework
% framework = ' GPOPS ' ;
framework = ' CasADi ' ;
%% Choose c o n t r a c t i o n dynamics f o r m u l a t i o n
% formulation contdyn = ' lMtildeState ' ;
formulation contdyn = ' FtildeState ' ;
%% Choose a c t i v a t i o n dynamics f o r m u l a t i o n
% f o r m u l a t i o n a c t d y n = ' DeGroote2016 ' ;
f o r m u l a t i o n a c t d y n = ' DeGroote2009 ' ;
%% Example
% Add main f o l d e r and s u b f o l d e r t o matlab path ( i n s t a l l a t i o n )
f i l e p a t h=which ( ' R u n n i n g D e G r o o t e e t a l 2 0 1 6 . m ' ) ;
[ DirExample Running , ¬ ,¬]= f i l e p a r t s ( f i l e p a t h ) ;
[ DirExample , ¬]= f i l e p a r t s ( DirExample Running ) ;
[ MainDir , ¬]= f i l e p a r t s ( DirExample ) ;
addpath ( g e n p a t h ( MainDir ) ) ;
% Needed I n p u t Arguments
I K p a t h= f u l l f i l e ( MainDir , ' Examples ' , ' R u n n i n g D e G r o o t e e t a l 2 0 1 6 ' , ' RunningData ' , ' Running IK.mot ' ) ;
I D p a t h= f u l l f i l e ( MainDir , ' Examples ' , ' R u n n i n g D e G r o o t e e t a l 2 0 1 6 ' , ' RunningData ' , ' R u n n i n g I D . s t o ' ) ;
m o d e l p a t h= f u l l f i l e ( MainDir , ' Examples ' , ' R u n n i n g D e G r o o t e e t a l 2 0 1 6 ' , ' RunningData ' , ' s u b j e c t 1 . o s i m ' ) ;
t i m e =[0 . 0 5 0 . 9 8 ] ; % R i g h t s t a n c e p h a s e (+50ms b e g i n n i n g and end o f t i m e i n t e r v a l , more d e t a i l s ...
s e e manual and p u b l i c a t i o n )
Out path= f u l l f i l e ( MainDir , ' Examples ' , ' R u n n i n g D e G r o o t e e t a l 2 0 1 6 ' , ' R e s u l t s ' ) ;
M i s c . D o f N a m e s I n p u t={ ' a n k l e a n g l e r ' , ' k n e e a n g l e r ' , ' h i p f l e x i o n r ' , ' h i p a d d u c t i o n r
M i s c . M u s c l e N a m e s I n p u t ={}; % S e l e c t s a l l m u s c l e s f o r i n p u t DOFs when empty
% O p t i o n a l I n p u t Arguments
Misc.f cutoff ID = 10;
%
Misc.f order ID = 5;
%
Misc.f cutoff lMT = 10;
%
Misc.f order lMT = 5;
%
M i s c . f c u t o f f d M= 1 0 ;
%
Misc.f order dM = 5;
%
M i s c . f c u t o f f I K= 1 0 ;
%
Misc.f order IK = 5;
%
cutoff
order
cutoff
order
cutoff
order
cutoff
order
frequency
frequency
frequency
frequency
frequency
frequency
frequency
frequency
f i l t e r i n g ID
f i l t e r i n g ID
f i l t e r i n g lMT
f i l t e r i n g lMT
f i l t e r i n g MA
f i l t e r i n g MA
f i l t e r i n g IK
f i l t e r i n g IK
%% S o l v e t h e problem
s w i t c h framework
c a s e ' GPOPS '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
10
'
,
'
hip rotation r
'
};
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
end
c a s e ' CasADi '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
end
end
9.3
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
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
OpenSim installation example Gait10dof18m
clear
all ; close
all ; clc
%% Choose o p t i m i z a t i o n framework
% framework = ' GPOPS ' ;
framework = ' CasADi ' ;
%% Choose c o n t r a c t i o n dynamics f o r m u l a t i o n
% formulation contdyn = ' lMtildeState ' ;
formulation contdyn = ' FtildeState ' ;
%% Choose a c t i v a t i o n dynamics f o r m u l a t i o n
% f o r m u l a t i o n a c t d y n = ' DeGroote2016 ' ;
f o r m u l a t i o n a c t d y n = ' DeGroote2009 ' ;
%% Example
% Add main f o l d e r and s u b f o l d e r t o matlab path ( i n s t a l l a t i o n )
f i l e p a t h=which ( ' Example Gait10dof18m.m ' ) ;
[ DirExample , ¬ ,¬]= f i l e p a r t s ( f i l e p a t h ) ;
[ DirExample2 , ¬ ,¬]= f i l e p a r t s ( DirExample ) ;
[ MainDir , ¬]= f i l e p a r t s ( DirExample2 ) ;
addpath ( g e n p a t h ( MainDir ) ) ;
% Needed I n p u t Arguments
Datapath= ' C: \ OpenSim 3 . 3 \ Models \ G a i t 1 0 d o f 1 8 m u s c \ O u t p u t R e f e r e n c e ' ;
I K p a t h= f u l l f i l e ( Datapath , ' IK ' , ' s u b j e c t 0 1 w a l k I K . m o t ' ) ;
I D p a t h = [ ] ; % Compute ID from t h e e x t e r n a l l o a d s
m o d e l p a t h= f u l l f i l e ( Datapath , ' s u b j e c t 0 1 . o s i m ' ) ;
t i m e =[0 . 7 1 . 4 ] ; % P a r t o f t h e r i g h t s t a n c e p h a s e
Out path= f u l l f i l e ( MainDir , ' Examples ' , ' O p e n S i m I n s t a l l a t i o n G a i t 1 0 d o f 1 8 m
'
,
'
Results
M i s c . D o f N a m e s I n p u t={ ' a n k l e a n g l e r ' , ' k n e e a n g l e r ' , ' h i p f l e x i o n r ' } ;
M i s c . L o a d s p a t h= f u l l f i l e ( Datapath , ' E x p e r i m e n t a l D a t a ' , ' s u b j e c t 0 1 w a l k g r f . x m l
M i s c . I D R e s u l t s P a t h= f u l l f i l e ( Datapath , ' ID ' , ' i n v e r s e d y n a m i c s . s t o ' ) ;
% O p t i o n a l I n p u t Arguments
% Here i s an example o f how t o a d j u s t t h e A c h i l l e s t e n d o n s t i f f n e s s .
% We f i r s t add t h e i n p u t argument M u s c l e N a m e s I n p u t w i t h ALL m u s c l e s
% that a c t u a t e the d e g r e e s o f freedom l i s t e d i n DofNames Input.
M i s c . M u s c l e N a m e s I n p u t={ ' h a m s t r i n g s r ' , ' b i f e m s h r ' , ' g l u t m a x r ' , . . .
' iliopsoas r ' , ' rect fem r ' , ' vasti r ' , ' gastroc r ' , ' soleus r ' , . . .
' tib ant r ' };
% We t h e n c h a n g e t h e c o m p l i a n c e o f t h e A c h i l l e s t e n d o n by c h a n g i n g t h e
11
'
);
'
);
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
% p a r a m e t e r Atendon o f t h e g a s t r o c n e m i u s and t h e s o l e u s . The d e f a u l t
% v a l u e i s 35 and a l o w e r v a l u e w i l l r e s u l t i n a more c o m p l i a n t t e n d o n .
Misc.Atendon = [ 3 5 , 3 5 , 3 5 , 3 5 , 3 5 , 3 5 , 1 5 , 1 5 , 3 5 ] ;
%% S o l v e t h e problem
s w i t c h framework
c a s e ' GPOPS '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
case
end
' CasADi '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
end
end
9.4
1
2
3
4
5
6
7
8
9
10
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
OpenSim installation example Gait23dof54m
clear
all ; close
all ; clc
%% Choose o p t i m i z a t i o n framework
% framework = ' GPOPS ' ;
framework = ' CasADi ' ;
%% Choose c o n t r a c t i o n dynamics f o r m u l a t i o n
% formulation contdyn = ' lMtildeState ' ;
formulation contdyn = ' FtildeState ' ;
12
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
%% Choose a c t i v a t i o n dynamics f o r m u l a t i o n
% f o r m u l a t i o n a c t d y n = ' DeGroote2016 ' ;
f o r m u l a t i o n a c t d y n = ' DeGroote2009 ' ;
%% Example
% add main f o l d e r and s u b f o l d e r t o matlab path ( i n s t a l l a t i o n )
f i l e p a t h=which ( ' Example Gait23dof54m.m ' ) ;
[ DirExample , ¬ ,¬]= f i l e p a r t s ( f i l e p a t h ) ;
[ DirExample2 , ¬ ,¬]= f i l e p a r t s ( DirExample ) ;
[ MainDir , ¬]= f i l e p a r t s ( DirExample2 ) ;
addpath ( g e n p a t h ( MainDir ) ) ;
% Needed I n p u t Arguments
Datapath= ' C: \ OpenSim 3 . 3 \ Models \ G a i t 2 3 5 4 S i m b o d y \ O u t p u t R e f e r e n c e ' ;
I K p a t h= f u l l f i l e ( Datapath , ' s u b j e c t 0 1 w a l k 1 i k . m o t ' ) ;
I D p a t h= f u l l f i l e ( Datapath , ' R e s u l t s I n v e r s e D y n a m i c s ' , ' i n v e r s e d y n a m i c s . s t o ' ) ;
m o d e l p a t h= f u l l f i l e ( Datapath , ' s u b j e c t 0 1 s c a l e d O n l y . o s i m ' ) ;
t i m e =[0 . 7 1 . 4 ] ; % P a r t o f t h e r i g h t s t a n c e p h a s e
Out path= f u l l f i l e ( MainDir , ' Examples ' , ' O p e n S i m I n s t a l l a t i o n G a i t 2 3 d o f 5 4 m ' , ' R e s u l t s
'
);
M i s c . D o f N a m e s I n p u t={ ' a n k l e a n g l e r ' , ' k n e e a n g l e r ' , ' h i p f l e x i o n r ' } ;
M i s c . M u s c l e N a m e s I n p u t ={}; % S e l e c t s a l l m u s c l e s f o r i n p u t DOFs when empty
%% S o l v e t h e problem
s w i t c h framework
c a s e ' GPOPS '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
case
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn GPOPS ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
end
' CasADi '
switch formulation actdyn
c a s e ' DeGroote2016 '
switch formulation contdyn
case ' lMtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy lMtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time , M E x c i t a t i o n , M A c t i v a t i o n , R A c t i v a t i o n , T F o r c e t i l d e , . . .
TForce , l M t i l d e , lM , MuscleNames , O p t I n f o , D a t S t o r e ]= . . .
SolveMuscleRedundancy FtildeState CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
case
' DeGroote2009 '
switch formulation contdyn
case ' lMtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy lMtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
case ' FtildeState '
[ Time actdyn , M E x c i t a t i o n a c t d y n , M A c t i v a t i o n a c t d y n , . . .
RActivation actdyn , T F o r c e t i l d e a c t d y n , TForce actdyn , . . .
l M t i l d e a c t d y n , lM actdyn , MuscleNames actdyn , . . .
O p t I n f o a c t d y n , D a t S t o r e a c t d y n ]= . . .
SolveMuscleRedundancy FtildeState actdyn CasADi ( . . .
m o d e l p a t h , IK path , ID path , time , Out path , Misc ) ;
end
end
end
13
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : No Page Count : 13 Page Mode : UseOutlines Author : Title : Subject : Creator : LaTeX with hyperref package Producer : pdfTeX-1.40.19 Create Date : 2018:11:07 18:51:52+01:00 Modify Date : 2018:11:07 18:51:52+01:00 Trapped : False PTEX Fullbanner : This is MiKTeX-pdfTeX 2.9.6642 (1.40.19)EXIF Metadata provided by EXIF.tools