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
| Extension | Format | Description |
|---|---|---|
.osim | OpenSim Document | XML 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 (Coordinatewith 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 (
) coupled with active force-length , force-velocity , passive parallel elastic , and pennation angle tendon equilibrium:
3. DAE Lowering & Modelica / URDF Projection
- Lowers skeletal equations of motion and muscle-tendon ODEs into
@modelscript/runtime'sDAEBuilderarena and projects models to Modelica.Mechanics.MultiBody (openSimToModelica) and ROS 2 URDF (openSimToUrdf).
Pre-Flight Diagnostics
10 rules9 error1 warning
| Code | Rule | Severity | Message |
|---|---|---|---|
M9101 | opensim-unresolved-body-frame | error | <componentKind> '<componentName>' references undefined body frame '<frameName>'. |
M9102 | opensim-non-positive-body-mass | error | Body '<bodyName>' specifies invalid mass or principal inertia (<detail>). |
M9103 | opensim-kinematic-tree-cycle | error | Kinematic tree topology error at joint '<jointName>': <detail>. |
M9104 | opensim-invalid-coordinate-range | error | Coordinate '<coordName>' has invalid range ['<rangeMin>', '<rangeMax>'] or default value '<defaultValue>' outside range. |
M9105 | opensim-invalid-muscle-parameters | error | Muscle '<muscleName>' has non-positive Hill parameter (<detail>). |
M9106 | opensim-excessive-pennation-angle | error | Muscle '<muscleName>' has invalid pennation angle '<angleRad>' rad (must be in [0, pi/2)). |
M9107 | opensim-insufficient-muscle-path-points | error | Muscle '<muscleName>' has invalid geometry path (<detail>). |
M9108 | opensim-unresolved-wrap-object | error | Muscle '<muscleName>' references undefined WrapObject '<wrapName>'. |
M9109 | opensim-invalid-time-constants | warning | Muscle '<muscleName>' has invalid activation/deactivation time constants (tau_act='<tauAct>', tau_deact='<tauDeact>'). |
M9110 | opensim-duplicate-component-name | error | Duplicate <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
