lvODE is a set wrappers, an interface to ODE (Open Dynamics Engine) library written in C and used to simulate dynamics of rigid body systems, including interactivity and in real time. In the present state lvODE allows you to use almost the full functionality of ODE in the LabVIEW environment using object-oriented programming (LVOOP). Such simulations may be used, among others, for programming the control systems of robots and manipulators (as well as in the control systems themselves, i.e. for trajectory planning), for development and testing of artificial intelligence systems, for modeling of complex mechanisms and other physical systems, etc.
lvODE is not a strict set of ODE wrappers. Although it uses the same concepts, the same terminology and most of the ODE functions are reflected, many of them have been grouped, data structures have been simplified, all in a user-friendly manner and taking into account specifics of LabVIEW environment. There are also few features not present in the original library which greatly facilitate programming – i.e. Object Manager. Further extensions (i.e. 3D Picture Control integration) are planned.
Currently lvODE doesn’t cover all of ODE features. The major differences include: no support for trimesh, heighfield and convex geometries, the lack of a 2D Plane constraint, lack of gyroscopic mode for the bodies, single precision floating point numbers only.
Short preview movie:
Briefly about the ODE
ODE is a
free and widely-known library designed to simulate systems of rigid bodies. The
programmer defines the layout of bodies, their physical parameters and types of
connections between them, the role of the library is to calculate the forces
acting in the system and to determine position and velocity of all bodies in
the next time step, while satisfying all defined relationships. Programmer is
able to interfere in simulation in full range while it goes on. It allows for
the accurate analysis of its results (access to all the physical parameters) as
well as programming any degree of interactivity. ODE is designed specifically
to perform real time simulations – it uses a first order integrator (the
procedure to solve a system of differential equations), which is a compromise
between speed and accuracy. Results generated are not as accurate as they would
be using higher-order integrators, but it is stable, fast and flexible.
The basic features of ODE include:
- Rigid body with arbitrary mass distribution
- Types of kinematic pairs (joints, constraints): ball, slider, hinge, suspension, universal (Cardan), linear and rotary actuators, contact, and combinations that are already listed
- Types of geometry used for collision detection: sphere, cube, cylinder, capsule, plane, ray, any shape in the form of triangle mesh, convex, heightfield
- Three types of spaces for fast collision finding
- Equations of motion derived using Lagrange multipliers
- Choice of integration method: the "full" method – slower, but more accurate, and quick iterative method
- An advanced model of contact and friction
contents of the archive folder ("lvODE") should be extracted to
directory \user.lib. After restarting LabVIEW the sub-palette "lvODE"
appears in the User Libraries section, where all the necessary functions may be
Or use the VIPM package.
The documentation is located in the subdirectory 'doc' and it consists of the following files:
- ODE Manual.pdf - The original guide to the ODE. At least brief knowledge of it is necessary to understand the main concepts and mechanisms of library. Due to the use of the same terminology, it can also be a sufficient source to use the lvODE. The main difference from the original is the simplified naming convention.
- lvODE Class Hierarchy.pdf - graphical representation of a lvODE class hierarchy of classes library - not necessary to start programming, but it may help to understand certain concepts.
- lvODE Function Reference.pdf - a list of all public lvODE functions with descriptions and organized by class. Descriptions of the functions derive much of the original ODE manual, however, cover all the differences of the conventions and LabVIEW specifics. This document is definitely to be polished (better grouping, more detailed descriptions of each section, etc.)
- Files *. png - map of all pallets
An integral part of the documentation are also descriptions in of context help for each VI. In large part they fit the descriptions in the file "lvODE Function Reference". Private functions are documented as well.
Example applications are located in "examples" subdirectory. There are few examples with varying degree of complexity, and with comprehensive comments in the code. These examples, supported by context help and (in difficult cases), reading a few chapters of the original manual should be sufficient to start programming in lvODE.
This work is published under the Creative Commons BY-NC-ND license (description and text of the license here and in license.txt)