Home of OMD

Source Code

Source Code on Git

General Description

This website is the home of OMD. OMD is a multi-body dynamics application used to simulate mechanical systems. Unlike most multi-body dynamics applications, OMD was built to accommodate different approaches to solving such problems. There is a frame work to define rigid bodies, joints, forces, integrators and three different models which use different techniques to solve the equations of motion for a set of bodies, joints and forces. The following are the Models or formulations available at this time:

  1. Model1 does not allow joints, it solves unconstrained bodies using their Cartesian Coordinates as states.

  2. Model2 uses Kane's method or a recursive joint formulation. In this method each joint adds degrees of freedom or states to the model. Currently it is only capable of solving open loops.

  3. Model3 uses constrained Cartesian coordinates meaning joints are used to create a set of algebraic differential equations. Coordinate partitioning is used to identify independent and dependent constraints allowing for the use of Ordinary Differential Equation (ODE) solvers.

OMD in Emscripten

Example 1

Hit "GO" in the controls to start the simulation

PID controler of a pendulum. Mass of the pendulum and the slider is 10. Acceleration due to gravity is 9.81. Lenght of the pendulum arm is 10. The force on the slider in the x is a PID of the angle in the z. The force on the slider in the z is a PID of the angle in the x.

Using OMD in C++

You can download the static library and headers and link them into your application. I've got a "Driving Game" on the site as an example. It uses Ogre to animate the simulation.

Using OMD in Python

OMD is written in C++, but I have wrapped it in Python (using swig ). Not everyone likes C++, and there are a ton of tools written in Python that could be used to visualize the results (animation or graphing). The OMD and OMD2 libraries are made accesible using "import", the examples show how it is done.

Using OMD in Simulink

I have also put OMD in Simulink. The "m-function" block is used to access OMD from inside Simulink, and a text file describes the model.