Professional Documents
Culture Documents
Acknowledgements
MATLAB Simulink
S-function
OpenSim
Pros Worlds leading mathematical computing software Used by engineers and scientists in industry, government, and education Rich resources for numerical integration Simulink extends MATLAB with a graphical environment for rapid design, control, and simulation of complex dynamic systems Con Limited resources for simulating and analyzing neuromusculoskeletal systems
Pros Popular open-source software maintained on SimTK.org Used for simulating and analyzing neuromusculoskeletal systems Offers tracking algorithms (CMC), actuators (muscles), and analyses (muscle-induced accelerations). GUI provides tools for viewing models, editing muscles, generating muscle-actuated simulations, and plotting results Con Limited resources for rapid design and control of dynamic systems
What is an S-function?
S-functions are system-functions that extend the capabilities of Simulink An S-function is a computer language description of a Simulink block written in MATLAB, C, C++, or Fortran and compiled as MEX-files S-functions are dynamically linked subroutines that MATLAB can automatically load and execute The S-function API enables you to interact with the Simulink engine very similar to built-in Simulink blocks By following a set of simple rules, you can implement an algorithm in an S-function (e.g., interface with OpenSim) and use the S-Function block in a Simulink model After you write your S-function, you can customize the user interface using masking
OpenSim Developer Jamboree July 2010
Simulink
(Input)
(States)
(Output)
y = f o (t , x, u ) x = f d (t , x, u )
OpenSim Developer Jamboree July 2010
Simulink
OpenSim Files
EMGs
Forces
Neural Command
Musculotendon Dynamics
Moments
Multibody Dynamics
OpenSim
Observed Movement
model .osim
externalLoads .mot
Simulink
EMGs
Forces
Moments
Neural Command
Musculotendon Dynamics
S-function
model .osim
Musculoskeletal Geometry
Multibody Dynamics
OpenSim MATLAB
Observed Movement
Simulink input
externalLoads .mot
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
statesStore->append(ssGetT(S), ssGetNumContStates(S), x)
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
OpenSim Developer Jamboree July 2010
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
model->setStates(x)
model->set(t, u, x) Time, controls, states model->getDerivCallbackSet()->set(t, u, x) model->getActuatorSet()->computeActuation() Actuation model->getDerivCallbackSet()->computeActuation(t, u, x) model->getActuatorSet()->apply() model->getDerivCallbackSet()->applyActuation(t, u, x) model->getContactSet()->computeContact() Contact model->getDerivCallbackSet()->computeContact(t, u, x) model->getContactSet()->apply() model->getDerivCallbackSet()->applyContact(t, u, x) model->computeDerivatives(dx) Derivatives model->getDerivCallbackSet()->computeDerivatives()
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
OpenSim Developer Jamboree July 2010
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
OpenSim Developer Jamboree July 2010
Update states Calculate derivatives Calculate outputs Calculate derivatives Locate zero crossings End Simulation
model->getDynamicsEngine().convertRadiansToDegrees() statesStore->print() Save results OpenSim Developer Jamboree July 2010
Examples
Falling Cube Tug-of-War Elbow Flexion
Pole Balancing