Skip to content
Beta.osim@modelscript/opensim 10 diagnostic rules
Parser WASM GLR
Diagnostics 10 rules
DAE Arena Lowering
Simulation Native Solvers
Projections Modelica, DAE
Live ExampleElbowFlexionHill.osim

OpenSim 4.0 Musculoskeletal Elbow Flexion & Hill-Type Muscle

Biomechanical multibody model coupling humerus and radius-ulna rigid bodies via a revolute elbow joint and Thelen2003Muscle actuator.

Playground
Source (29 lines)
1<?xml version="1.0" encoding="UTF-8"?>
2<OpenSimDocument Version="40000">
3  <Model name="ElbowFlexionModel">
4    <gravity>0 -9.80665 0</gravity>
5    <BodySet>
6      <objects>
7        <Body name="humerus"><mass>1.85</mass></Body>
8        <Body name="radius_ulna"><mass>1.12</mass></Body>
9      </objects>
10    </BodySet>
11    <JointSet>
12      <objects>
13        <PinJoint name="elbow_joint">
14          <socket_parent_frame>humerus</socket_parent_frame>
15          <socket_child_frame>radius_ulna</socket_child_frame>
16        </PinJoint>
17      </objects>
18    </JointSet>
19    <ForceSet>
20      <objects>
21        <Thelen2003Muscle name="biceps_brachii">
22          <max_isometric_force>624.3</max_isometric_force>
23          <optimal_fiber_length>0.1157</optimal_fiber_length>
24          <tendon_slack_length>0.1923</tendon_slack_length>
25        </Thelen2003Muscle>
26      </objects>
27    </ForceSet>
28  </Model>
29</OpenSimDocument>
OpenSim Musculoskeletal Joint & Hill Muscle Topology
articulates actuates «opensim body» humerus «parameters» mass = 1.85 kg parent frame «pinjoint (1-dof)» elbow_joint «model» coord = elbow_flexion range = [0, 2.44 rad] «thelen2003muscle» biceps_brachii «verification» Fmax = 624.3 N Lopt = 0.1157 m
Drag to pan · Click % to reset

OpenSim Musculoskeletal Biomechanics (.osim) ​

@modelscript/opensim (languages/opensim) provides native WebAssembly parsing, musculoskeletal kinematic tree and mass/inertia validation, Hill-type muscle-tendon activation and contraction dynamics (Thelen2003Muscle, Millard2012EquilibriumMuscle), DAEBuilder lowering, and Modelica 3.x / ROS URDF projections for OpenSim biomechanical and orthopedic surgical planning models.


Supported Extensions & Standards ​

ExtensionFormatDescription
.osimOpenSim DocumentXML specification of BodySet, JointSet, ForceSet (Hill muscles, ligaments, coordinate actuators), MarkerSet, and WrapObjectSet

Key Capabilities ​

1. Multibody Skeletal Kinematics & Wrapping Surfaces ​

  • Parses OpenSimDocument (versions 3.x & 4.x) including rigid segments (Body), anatomical joints (PinJoint, SliderJoint, CustomJoint, WeldJoint, FreeJoint), generalized coordinates (Coordinate with range-of-motion bounds), motion-capture fiducial markers (MarkerSet), and cylindrical/ellipsoidal muscle wrapping surfaces (WrapCylinder, WrapSphere, WrapEllipsoid).

2. Hill-Type Muscle-Tendon Activation & Contraction Solver ​

  • Integrates first-order neural excitation-to-activation dynamics (u(t)→a(t)) coupled with active force-length fL(l~M), force-velocity fV(v~M), passive parallel elastic fPE(l~M), and pennation angle α tendon equilibrium:dadt=u−aτ(a,u),FT=F0M(afL(l~M)fV(v~M)+fPE(l~M))cos⁡α

3. DAE Lowering & Modelica / URDF Projection ​

  • Lowers skeletal equations of motion and muscle-tendon ODEs into @modelscript/runtime's DAEBuilder arena and projects models to Modelica.Mechanics.MultiBody (openSimToModelica) and ROS 2 URDF (openSimToUrdf).

Pre-Flight Diagnostics ​

10 rules9 error1 warning

CodeRuleSeverityMessage
M9101opensim-unresolved-body-frameerror<componentKind> '<componentName>' references undefined body frame '<frameName>'.
M9102opensim-non-positive-body-masserrorBody '<bodyName>' specifies invalid mass or principal inertia (<detail>).
M9103opensim-kinematic-tree-cycleerrorKinematic tree topology error at joint '<jointName>': <detail>.
M9104opensim-invalid-coordinate-rangeerrorCoordinate '<coordName>' has invalid range ['<rangeMin>', '<rangeMax>'] or default value '<defaultValue>' outside range.
M9105opensim-invalid-muscle-parameterserrorMuscle '<muscleName>' has non-positive Hill parameter (<detail>).
M9106opensim-excessive-pennation-angleerrorMuscle '<muscleName>' has invalid pennation angle '<angleRad>' rad (must be in [0, pi/2)).
M9107opensim-insufficient-muscle-path-pointserrorMuscle '<muscleName>' has invalid geometry path (<detail>).
M9108opensim-unresolved-wrap-objecterrorMuscle '<muscleName>' references undefined WrapObject '<wrapName>'.
M9109opensim-invalid-time-constantswarningMuscle '<muscleName>' has invalid activation/deactivation time constants (tau_act='<tauAct>', tau_deact='<tauDeact>').
M9110opensim-duplicate-component-nameerrorDuplicate <componentKind> name '<name>' declared in OpenSim model.

Generated from languages/opensim/src/lints/rules.ts. All languages →


CLI Usage ​

bash
# Inspect bodies, joints, muscles, and markers in an OpenSim model
msx opensim inspect Arm26.osim

# Validate mass/inertia positivity, kinematic cycles, and Hill muscle parameters
msx opensim validate Arm26.osim

# Simulate Hill-type muscle activation and joint trajectories
msx opensim simulate Arm26.osim

# Project OpenSim model to Modelica 3.x or ROS URDF
msx opensim to-modelica Arm26.osim > Arm26.mo
msx opensim to-urdf Arm26.osim > Arm26.urdf

Open-Core under the GNU AGPL v3 License; Enterprise Edition (ee/) under the ModelScript Enterprise License. • Pricing • Trademark Policy