A multibody dynamics simulator for biomechanics research and education.
Developed by Dr Gregory Tierney at Ulster University
A general-purpose rigid body simulator designed for biomechanics research, sports science, and mechanical systems analysis.
Full articulated rigid body simulation with revolute, spherical, and free joints.
PHYSICS ENGINEBodies are represented as collections of ellipsoids. Penalty-based contact forces with configurable stiffness curves handle contact and collisions without discontinuities.
CONTACTAAOS-sourced range-of-motion constraints for hips, knees, ankles, shoulders, elbows, wrists, and spine.
BIOMECHANICSA standalone HTML5 model editor lets you inspect and modify body geometry, joint transforms, inertia, and contact force curves without running Python.
TOOLINGAutomatic CSV export of kinematics, contact force history, and a plain-text simulation summary after every run.
ANALYSISEvery simulation automatically captures frame-by-frame renders and stitches them into a GIF on completion.
OUTPUTOpenMBD runs on Python 3.8+ with standard scientific libraries. No compilation, no build system.
Download the full project from GitHub including all model files and the HTML model editor.
OpenMBD has exactly three third-party dependencies. NumPy is used for physics, matrix, and quaternion math. Matplotlib drives the 3D viewport, live rendering, and the analysis tab plots. Pillow creates GIF export after each run.
Run the main entry point. The GUI opens with the Setup tab where you choose a model, set initial conditions, and configure physics parameters.
Select a model file (e.g. openmbd_male.json), set an initial position and velocity, then click Finalize → Run. Results auto-export as CSV and GIF.
Open openmbd_model_editor.html directly in your browser. No Python needed — edit body geometry, joint transforms, and contact force curves, then export a new JSON.
Every model is a self-contained JSON file. Bodies, joints, geometry, and contact properties are all defined in one place. Readable and version-controllable.
{ "bodies": { "pelvis": { "mass": 11.22, "inertia": [0.0955, 0.0594, 0.0914, 0, 0, 0], "center_of_mass": [0, 0, 0.006], "ellipsoids": [ { "name": "pelvis_main", "dimensions": [0.14, 0.10, 0.09], "local_position": [0, 0, 0], "local_orientation": /* 4×4 matrix */, "force_curve": [[0, 0], [0.01, 10000]] } ] } }, "joints": [ { "name": "hipL", "type": "spherical", "parent": "pelvis", "child": "thighL", "T1": /* parent anchor 4×4 */, "T2": /* child anchor 4×4 */, "T2_inv": /* inverse of T2 */ } ] }
OpenMBD auto-exports three files the moment a simulation completes. Everything is timestamped so runs never overwrite each other.
Full time-series state for every rigid body in the model, sampled at the recording interval.
Human-readable run report with all simulation parameters and statistics.
Frame-by-frame capture of the 3D viewport stitched into a shareable animation. Generated automatically with Pillow — no extra steps needed.