...
- Common Scripting Commands (a list and description of the most commonly used scripting commands)
- Scripting Versions of OpenSim C++ API Calls (information to help you use what are called "templatized" classes in OpenSim through the scripting interface)
- Scripting with Matlab (set-up instructions, examples and utilities, and other Matlab-specific scripting information)
- Converting C3D Files (a guide to working with C3D files through scripting)
...
Often the best way of figuring out how to code is to use examples from already written scripts or functions. Many example scripts and functions can be found in the OpenSim 4.0 resources directory (Typically /Documents/OpenSim/4.0/Code/Matlab). You can also download some additional example scripts that use the current API. ;
plotMuscleFLCurves.m | Function to compute and plot the active and passive force-length muscle curves |
createActuatorsFile.m | Function to generate a generic OpenSim Actuator File from a Model |
build_and_simulate_simple_arm.m | Demonstrates building and simulating a simple arm model |
pendulum_marker_positions.m | Build, simulate, and generate outputs for a double-pendulum model. Writes the results to .sto and .trc files. |
...
Troubleshooting Tips
In addition to looking at example code, another great way to learn more about scripting in Matlab is to review the OpenSim Doxygen. The doxygen documents all the functionality of the OpenSim API. Guide to Using Doxygen.
...
In this code example, we do XXXXXget a reference to a muscle in the model and return the class name and concrete class name.
Code Block |
---|
>>> model = Model(path2model) >>> muscle = model.getMuscles().get(0); >>> muscle.getClassName() muscle >>> muscle.getConcreteClassName() Thelen2003Muscle |
...
As you look through the OpenSim doxygen or if you look at OpenSim API examples, in C++, you may see objects/classes with names like Array_<double> or Vec<3>. These are called templatized classes; this is another functionality that exists in C++ to help programmers simplify and reuse common code. But this doesn't exist in Matlab. So we have created scripting versions of the most commonly used templatized classes. You can find a list of all of these on the page Scripting Versions of OpenSim C++ API Calls. If you see a class name with angle brackets (< >), you can look it up on this page to find the class name to use in Matlab.
...
Adding Geometry Paths to Matlab
...
Alternatively, a 'workaround' that if you are not visualizing the model is to remove the geometry from the model. This should only be used if you are doing many model instantiations or initSystem() calls and don't need to visualize the model.
...
Outputs
OpenSim 4.0 uses component outputs and reporters to collect variables of interest and print them to file. To display the output names for a component, use the method getOutputNames();
Code Block |
---|
>>> muscle.getOutputNames(); |