Professional Documents
Culture Documents
Tutorial 2013 11 25
Tutorial 2013 11 25
Contents
1 Introduction
2 Installation
2.1 Where To Find the Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
2.2
2.3
Installation Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installation of the Simulation Framework . . . . . . . . . . . . . . . . . . . . . . . .
2.4
4
5
13
3.1
3.2
3.3
Plot Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Examples
28
4.1
4.2
4.3
A Trouble-Shooting
33
A.1 GNU-Build-System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
34
Introduction
MBSim is a simulation tool to analyse the dynamic phenomenons of dynamical systems. Its root is
the modelling of nonsmooth multibody system explaining the program name MBSim. The mathematical background has been developed over years at the Institute of Applied Mechanics of the
Technische Universitat M
unchen. The last summary concerning rigid body dynamics was given
in the PhD thesis and the lecture of Martin Forg [8, 7]. The PhD thesis of Roland Zander [10]
introduces the theory of exible bodies. Ref. [11] shows an overview about the research at the institute in the last decades concerning nonsmooth mechanics. This reference also includes simulation
results of academic and industrial examples. Extensions regarding hydraulics and signal processing
as well as parallelisation and cosimulation are unique in the eld of nonsmooth dynamical systems.
The goal of this introduction is to motivate the use of MBSim. It shows the installation of the
necessary program parts, describes basically its components and program ow and gives some
examples.
Installation
2.1
The source code of MBSim together with some examples, the necessary FMatVec library, a HDF5
wrapper for output and the visualisation program OpenMBV can be found at http://code.google.com
using subversion code administration1 . Further, one needs HDF5 from http://www.hdfgroup.org.
Everything is placed under LGPL2 .
2.2
Installation Procedures
For the installation of the specic projects always the same procedures have to be applied. They
are summarised in the following.
2.2.1
Installation
automake:
aclocal
autoheader
autoconf
libtoolize -c --force
automake -a -c --force
configure:
./configure F77=gfortran
with dening a location for the installation
--prefix=$HOME/.../Install
possibly with FLAGS for debug information
CFLAGS="-g3 -O0" CXXFLAGS="-g3 -O0" F77FLAGS="-g3 -O0" FFLAGS="-g3 -O0"
possibly with project depending FLAGS
install
make
make install
All procedures belong to the GNU-Build-System (cf. Sec. A.1).
It is reasonable to write an executable script le invoking the procedures.
1
2
2.2.2
Reinstallation/Update
Uninstallation
For uninstalling
make uninstall
make clean
has to be called in all directories. If the les created by congure should be deleted too, type
make distclean
in addition.
2.3
In the following it is assumed, that a directory MBSim and a directory MBSim/Install has been
created in the $HOME path of the Linux operating system.
All projects depend on PKG package administration. That is why the le $HOME/.bashrc has to
be extended with
export PKG_CONFIG_PATH=
"$HOME/MBSim/Install/lib/pkgconfig/:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH=
"$HOME/MBSim/Install/lib/:$LD_LIBRARY_PATH"
2.3.1
FMatVec
FMatVec is a library for fast matrix-vector evaluations based on LAPack/Blas, ATLAS or the
IntelMKL in its sequential or parallel version.
For the installation the following instructions have to be completed:
cd $HOME/MBSim
svn checkout http://fmatvec.googlecode.com/svn/trunk/ fmatvec
cd $HOME/MBSim/fmatvec
Continue with the procedure automake.
Then, the procedure configure for dynamic compilation is used with the prex:
--prefix=$HOME/MBSim/Install
By default, Lapack/Blas is used. If Lapack/Blas is not located in a standard search path, the
following FLAGS must be used:
--with-blas-lib-prefix=PFX (prefix, where the BLAS lib is
installed, when ATLAS is not used)
--with-lapack-lib-prefix=PFX (prefix, where the LAPACK lib is
installed, when ATLAS is not used)
If ATLAS should be used instead of Lapack/Blas, the following FLAGS must be used:
--enable-atlas (use ATLAS)
--with-atlas-inc-prefix=PFX (prefix, where the ATLAS includes
are installed, when ATLAS is used)
--with-atlas-lib-prefix=PFX (prefix, where the ATLAS libs are
installed, when ATLAS is used)
If the IntelMKL should be used instead of Lapack/Blas, the following FLAGS must be used:
--enable-intelmkl (use IntelMKL)
--with-intelmkl-inc-prefix=PFX (prefix where IntelMKL includes
are installed, when the IntelMKL is used)
--with-intelmkl-lib-prefix=PFX (prefix where IntelMKL libraries are
installed, when the IntelMKL is used)
By default the sequential version of the IntelMKL is used. For using the parallel version of the
IntelMKL, set the following FLAG:
--enable-parallelIntelMKL
To deactivate the OpenMP pragma omp critical within reference counting use
--disable-pragma_omp_critical
The code can be compiled and installed with a Doxygen HTML class documentation by make doc
and the procedure install.
2.3.2
HDF5
HDF5 is a hierarchical data format enabling the eective administration of plot and visualisation
data. It can be downloaded as source code (ALL Platforms) from http://www.hdfgroup.org/HDF5/
with at least version 1.8.2.
Extract the source archive to $HOME/MBSim/hdf5.
Change to $HOME/MBSim/hdf5.
Use the procedure configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
and the additional FLAG
--enable-cxx
Compilation is done with the procedure install.
A HDF5 wrapper makes it possible to use HDF5 very easily. It is available by
cd $HOME/MBSim
svn checkout http://hdf5serie.googlecode.com/svn/trunk/ hdf5serie
For having MBSim creating HDF5 les invoke
cd $HOME/MBSim/HDF5Serie/hdf5serie
as well as the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install for installation and creation of a Doxygen HTML class documentation.
Last, .bashrc can be extended with
alias h5lsserie="$HOME/MBSim/Install/bin/h5lsserie"
alias h5dumpserie="$HOME/MBSim/Install/bin/h5dumpserie"
to gain overall access to the commands h5lsserie and h5dumpserie.
2.3.3
OpenMBV
OpenMBV visualises MBSim simulations using XML and HDF5 in a coinciding hierarchical structure. The installation for the simulation framework consists of two steps: rst the XML utils have
to be installed, then MBSim needs OpenMBV-C++Interface to create standard data for OpenMBV
using C++ programs. The source code is available by
cd $HOME/MBSim
svn checkout http://openmbv.googlecode.com/svn/trunk/ openmbv
XML Utils
It is assumed that Octave with version 3.0 or newer is installed (cf. Sec. A.2).
Then,
cd $HOME/MBSim/OpenMBV/mbxmlutils
and use the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
and FLAG with-mkoctfile-path (Octave/bin) and install for installation of an independent
XML preprocessor to parse and validate hierarchical XML-les with Octave code.
OpenMBV-C++Interface It is assumed that
hdf5 with version 1.8.2 or newer
HDF5Serie
is installed.
Invoke
cd $HOME/MBSim/OpenMBV/openmbvcppinterface
and the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install for installation and creation of a Doxygen HTML class documentation.
2.3.4
MBSim
mbsimFlexibleBody
mbsimElectronics
mbsimPowerTrain
The installation proceeds as follows:
cd $HOME/MBSim/mbsim/modules/mbsimControl
Invoke the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install to install the signal processing and control module and to create a Doxygen
HTML class documentation. In
$HOME/MBSim/mbsim/modules/mbsimControl/xmldoc
invoke install for an XML documentation in $HOME/MBSim/Install/share/mbxmlutils/doc.
cd $HOME/MBSim/mbsim/modules/mbsimHydraulics
Invoke the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install to install the hydraulics module and to create a Doxygen HTML class
documentation. In
$HOME/MBSim/mbsim/modules/mbsimHydraulics/xmldoc
invoke install for an XML documentation in $HOME/MBSim/Install/share/mbxmlutils/doc.
cd $HOME/MBSim/mbsim/modules/mbsimFlexibleBody
Invoke the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install to install the exible body module and to create a Doxygen HTML class
documentation. In
$HOME/MBSim/mbsim/modules/mbsimFlexibleBody/xmldoc
invoke install for an XML documentation in $HOME/MBSim/Install/share/mbxmlutils/doc.
cd $HOME/MBSim/mbsim/modules/mbsimElectronics
Invoke the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install to install the electronics module and to create a Doxygen HTML class
documentation.
cd $HOME/MBSim/mbsim/modules/mbsimPowerTrain
Invoke the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
make doc and install to install the module for gears and to create a Doxygen HTML class documentation.
Finally mbsimxml has to be installed.
cd $HOME/MBSim/mbsim/mbsimxml
Invoke the procedures automake, configure for dynamic compilation with the prex
--prefix=$HOME/MBSim/Install
and install to install the XML module which contains an executable to invoke the preprocessor
and after that evaluate the resulting at structure. In
$HOME/MBSim/mbsim/mbsimxml/xmldoc
invoke install for an XML documentation in $HOME/MBSim/Install/share/mbxmlutils/doc.
2.3.5
MBSimExamples
The examples are used for testing successful installation. There are two possibilities:
1. Change to the specic directory $HOME/MBSim/mbsim/examples/* and type make to create an
executable. The simulation starts with the command ./main. The results are visualised with
the command openmbv and plotted with h5plotserie after having installed the visualisation
framework (cf. Sec. 2.4 and 3.3).
2. Use the script ./runexamples.sh install in $HOME/MBSim/mbsim/examples to install reference les. Then ./runexamples.sh compiles, runs and tests each example. See ./runexamples.sh
-h for additional information.
2.4
In the following it is assumed, that a directory OpenMBV and a directory OpenMBV/Install has been
created in the $HOME path of the Linux operating system.
Invoke
ssh otto (only at the institute)
export PKG_CONFIG_PATH=/home/OpenMBV/local/lib/pkgconfig:
$HOME/OpenMBV/Install/lib/pkgconfig (only at the institute)
to change to a computer dening minimal requirements for further usage of the executable les and
having installed the necessary software (cf. Sec. A.2).
This subsection describes a static compilation, therefore the additional FLAG have to be used in
each step
--disable-shared --enable-static
10
2.4.1
HDF5
Install HDF5 and the HDF5 wrapper as described in Sec. 2.3 but in the directory OpenMBV and
using a static compilation.
For convenient plotting of HDF5 les it is assumed that Qwt with version 5 or newer is installed.
Invoke
cd $HOME/OpenMBV/HDF5Serie/h5plotserie
as well as the procedures automake, configure for static compilation, make doc and install
for installation and creation of a Doxygen HTML class documentation. Then, .bashrc can be
extended with
alias h5plotserie="$HOME/OpenMBV/Install/bin/h5plotserie"
to gain overall access to the command h5plotserie.
2.4.2
OpenMBV
XML Utils Install XML Utils as described in Sec. 2.3 but in the directory OpenMBV and using a
static compilation.
OpenMBV-C++Interface Install OpenMBV-C++Interface as described in Sec. 2.3 but in the
directory OpenMBV and using a static compilation with the following additional FLAG
--with-qwt-inc-prefix=/home/OpenMBV/local/include
--with-qwt-lib-prefix=/home/OpenMBV/local/lib
OpenMBV There is a static Linux binary available at http://code.google.com being updated
from time to time. For the installation of a static visualisation using always the newest source les
it is assumed that
Coin3d with version 3 or newer
hdf5 with version 1.8.2 or newer
Qt with version 4.4 or newer
HDF5Serie
SoQt with version 1.4.1 or newer
Qwt with version 5 or newer
is installed.
With
cd $HOME/OpenMBV/OpenMBV/openmbv
and the procedures automake, configure for static compilation with the additional FLAG
--with-qwt-inc-prefix=/home/OpenMBV/local/include
--with-qwt-lib-prefix=/home/OpenMBV/local/lib CXXFLAGS="--Wno-non-virtual-dtor"
11
make doc and install a static build of the viewer together with an Doxygen HTML class documentation completes the installation. Then,
exit (only at the institute)
Last, .bashrc can be extended with
alias openmbv="$HOME/OpenMBV/Install/bin/openmbv"
to gain overall access to the command openmbv, which should be used only locally because of
network protocols not providing the necessary X.org requirements.
12
From the software development point of view, [9] proposed a standard structure for multibody
simulation frameworks distinguishing between bodies and interactions. The programs described
in [2] and [3] follow also this approach. It is approved and used in MBSim using object-oriented
C++ programming. The interface of all classes is documented in the source code using Doxygen.
This documentation has been extracted for convenient study together with a class overview during
installation with the command make doc. Just change to $HOME/MBSim/*/doc/html and open
index.html with an appropriate browser. With this class documentation and self-explaining names
in the user interface it is goal of this section to give an overview about the main features of MBSim.
Figure 3 shows the embedding of MBSim in the global simulation and analysing process. MBSim
%&'%
!
"#
$
"
#"
$%
% "
"
'(
##)
&!
*'+
*+
!,
"
-*
!
can handle a set of dynamical systems from various domains not only separated but also exchanging
data of the examplary smooth form
q = Y u ,
M u = h (q, u, t) + W ,
x = f (x) ,
(q, u, , t) N .
Though, the simulation of hydraulics, electronics, control and power train systems is included
within several modules. MBSim is based on the interface FMatVec using either LaPack3 or ATLAS4 for fast evaluation of linear algebra routines. Further, with HDF5Serie it writes simulation
result les in the hierarchical HDF5 le format5 even for large dynamical systems. These les
can be read by H5PlotSerie for plotting or by OpenMBV for visualisation. Thereby, OpenMBV
3
cf. http://www.netlib.org/lapack/
cf. http://www.netlib.org/atlas/
5
cf. http://www.hdfgroup.org/HDF5/
4
13
is based on the Coin implementation6 of the Open Inventor Library7 . Also a co-simulation with
Matlab/Simulink8 , HySim [4] for hydraulic components and KetSim [6] for camshaft timing chains
is possible [5]. MBSim is divided in a modelling part using C++ or XML and a simulation part.
The simulation part is implemented quite modular distinguishing between the update of bodies
and interactions concerning kinematics, kinetics as well as force laws and integration / nonlinear
solution schemes. Also here external libraries are used where it is possible for having always a
state-of-the-art numerical basis. A typical example of a dynamical system only from mechanics is
given by Figure 1. One has the environment and two Objects, in mechanics called Bodys, holding
Contour
KineticExcitation
Contour
Contact
Body
Contour
Frame
Frame
Body
Frame
Frame
Joint
Frame
Contour
Contour
Frame
3.1
The following classes can be used for modelling and simulating dynamical systems in MBSim.
3.1.1
Hierarchically Objects and Links belong to DynamicSystems being explained in the following
(cf. Fig. 2). Shaded one can see interfaces for the dierent components of the e.g. smooth modelling
equations
ExtraDynamicInterface
x = f (x)
(1)
ObjectInterface
q = Y u ,
(2)
cf. http://www.coin3d.org/
http://oss.sgi.com/projects/inventor/
8
cf. http://www.mathworks.de/
7
14
(3)
Element
ExtraDynamicInterface
DynamicSystem
ObjectInterface
LinkInterface
DynamicSystemSolver
Group
Graph
(4)
h (q, u, t) , W (q)
(5)
and Element for a load/save mechanism as well as plot and data administration. Class Graph
is dotted as it is not available for modelling. A graph structure is automatically built during
initialisation for an ecient simulation process evaluating the hierarchical modelling structure.
Though, DynamicSystems can be hierarchically assembled in Groups. The top-most DynamicSystem
is called DynamicSystemSolver. It also represents the interface to the integration schemes and
allows the setting of environment variables like gravitation.
Important settings:
addObject
add an Object, e.g. a Body from mechanics
addLink
add a Link, e.g. a Contact or a Joint from mechanics
addGroup
add a DynamicSystem
addFrame
add a Frame
addContour
add a Contour
readz0
read initial state from HDF5 le
writez
write current state to HDF5 le
setReorganizeHierarchy
enforces the automatic creation of invisible graph structures only for simulation depending
on the hierarchy of frames used for modelling
setConstraintSolver
solver for constraint equations on acceleration level (cf. setImpactSolver )
setImpactSolver
solver for constraint equations on velocity level; available constraint equation solution schemes
are
15
LinearEquations
Cholesky solution scheme for regular linear systems (only bilateral constraints)
GaussSeidel
Gauss-Seidel solution scheme for piecewise linear systems (planar Coulomb friction)
FixedPointSingle
Gauss-Seidel solution scheme with xed point search and relaxation strategy (spatial
Coulomb friction)
RootFinding
damped and globalised Newton scheme (spatial Coulomb friction)
setLinAlg
linear equations solver for RootFinding; available solvers are
LUDecomposition
LU decomposition is only valid for non-singular contact situations
LevenbergMarquardt
regularisation of contact matrix by Levenberg Marquardt factor
PseudoInverse
selecting the norm-minimal solution if there exist several
setStrategy
set relaxation strategy to local (contact wise) or global (all contacts)
setNumJacProj
setMaxIter
set the maximum number of iterations in the contact solver
setStopIfNoConvergence
the integrator stops integration, if there is no convergence in the contact solver
3.1.2
Frames
Frames are a basic concept in the kernel of MBSim to dene an interface for MBSim multibody
components concerning kinematic and kinetic expressions. They specify a unique point including
position and orientation. New Frames can be added arbitrarily and recursively based on a predecessor Frame. That is why there has to be a rst Frame for specic MBSim components, e.g. each
DynamicSystem has got a stationary Frame "I" (inertial frame).
Important settings next to position and Cartesian orientation are dened according to the parametrisation
I aP
IJP
=
u + I P
J
R
I
I R
I
of translational and angular acceleration. This is basically an ane relationship concerning the
appropriate Jacobian matrices J and an additional summand
derivative of generalised velocities u,
with gyroscopic and explicit time dependent contributions. Summarizing
getPosition
getOrientation
16
getVelocity
getAngularVelocity
getJacobianOfTranslation
getJacobianOfRotation
getGyroscopicAccelerationOfTranslation
getGyroscopicAccelerationOfRotation
enableOpenMBV
enabling visualisation for OpenMBV
are important settings.
3.1.3
Bodies
Mechanical Bodys provide their portion of a positive denite mass matrix, a smooth right hand
side, state and energy expressions according to Object, which is e.g. similar for some hydraulic
objects, like pipes (cf. Figure 3). One dierence is the kinematic description which is based on
FlexibleBody
HydraulicObject
RigidBody
Body
Object
Element
ObjectInterface
centre O. Both absolute if the frame of reference belongs to a DynamicSystem and relative if
the frame of reference belongs to another RigidBody kinematic structures are canonically given
by the frame recursion. The motion of the frame for kinematics and so also of the RigidBody with
respect to the frame of reference is dened by the individual generalised coordinates qrel of the
RigidBody or by a time-dependent path. These settings can be dened individually on position,
velocity and acceleration level according to
R r OP
= R r OP (q rel , t) ,
(6)
(7)
(8)
R RK
(9)
(10)
(11)
In the referencing coordinate frame, Eq. (6) describes the translational position of the frame for
kinematics and Eq. (7) its orientation. Then, the velocity level is given by an an relation involving
Jacobian matrices J, generalised velocities urel and explicit time-dependent summands . The
acceleration level can be obtained by dierentiation. Figure 4 shows the Frame recursion also
including the link relationships of frames and contours. In a DynamicSystem two stationary Frames
RigidBody
Link
C
C
B
B
RigidBody
qrel
Link
I
qrel
Link
B
C
qrel RigidBody
DynamicSystem
setMass
setInertiaTensor
is dened with respect to "C", if no other Frame is given as second argument
setFrameOfReference
one possibility to dene initial values
setFrameForKinematics
setOpenMBVRigidBody
enabling visualisation for OpenMBV
Kinematics can be dened individually using the member functions
setTranslation
setRotation
setJacobianOfTranslation
setJacobianOfRotation
setDerivativeOfJacobianOfTranslation
setDerivativeOfJacobianOfRotation
setGuidingVelocityOfTranslation
setGuidingVelocityOfRotation
setDerivativeOfGuidingVelocityOfTranslation
setDerivativeOfGuidingVelocityOfRotation
For convenience it is sometimes not necessary to dene all components. E.g. for a LinearTranslation
as well as RotationAboutFixedAxis and CardanAngles everything else is derived automatically.
Flexible Bodies The equations of motion of a FlexibleBody is at the moment only available
with respect to a stationary Frame. So, for exible bodies the frame of reference must belong to a
DynamicSystem. The following exible bodies are available.
FlexibleBody1s21RCM
planar beam using redundant coordinate methode with three coordinates per nite element
node, translation x, y and rotation , as well as two additional bending deections c1 , c2
FlexibleBody1s33RCM
spatial beam using redundant coordinate methode with six coordinates per nite element
node, translation x, y, z and reversed Cardan rotation , , , as well as four additional
bending deections c1 , c2 , c3 , c4
19
LinkHydraulics
Contact
ExtraDynamicInterface
Joint
LinkMechanics
Link
Element
KineticExcitation
LinkInterface
SpringDamper
LinkMechanicsHydraulics
LinkMechanics
setForce
force excitation function
setMoment
moment excitation function
setFrameOfReference
force / moment direction vectors, if not the connected Frame should be used
20
Joints Joints connect two Frames with the force laws depending on the ideal normal relative
kinematics. The constitutive law has to be chosen for the calculation of the force parameter.
Important settings:
setForceDirection
constraint force directions
setMomentDirection
constraint moment directions
setForceLaw
constitutive law on acceleration level
setImpactForceLaw
constitutive law on velocity level
Contacts and Impacts Contacts and impacts are managed by the class Contact.
Important settings:
setContactForceLaw
constitutive normal law on acceleration level
setContactImpactLaw
constitutive normal law on velocity level
setFrictionForceLaw
constitutive friction law on acceleration level
setFrictionImpactLaw
constitutive friction law on velocity level
setContactKinematics
The relative kinematics is dened between Contour classes. On velocity level the contact
kinematics is independent of the specic contour. For the calculations on position level the
following contours are available.
CircleHollow
one dimensional sphere with contact from inside
CircleSolid
one dimensional sphere with contact from outside
FlexibleBand
exible contour describing a band in a certain distance and direction of a neutral bre
Frustum
frustum with its axis given by the second column of the contour reference frame
Line
ane one dimensional space
Plane
ane two dimensional surface
Point
most primitive rigid contour
21
Sphere
two dimensional sphere
Each contour has a contour xed frame, with the third column of the orientation matrix being
the binormal for planar contours and the rst column being the normal of linear contours.
Sometimes they can be visualised with enableOpenMBV.
Available contact kinematics on position level:
CircleFrustum
CircleSolidLine
PointLine
PointFrustum
PointPlane
PointFlexibleBand
SphereFrustum
SpherePlane
enableOpenMBVContactPoints
enables the visualisation of accompanying contact frames in OpenMBV
setOpenMBVNormalForceArrow
visualisation of the normal force arrow in OpenMBV
setOpenMBVFrictionArrow
visualisation of the friction force arrow in OpenMBV
Constitutive Laws Concerning the constitutive laws it is distinguished between contact laws
on acceleration and impact laws on velocity level. Further, both exible and rigid laws in normal
and tangential direction are available.9
Important possibilities:
UnilateralConstraint
set-valued on acceleration level
BilateralConstraint
set-valued on acceleration level
UnilateralNewtonImpact
set-valued on velocity level
BilateralImpact
set-valued on velocity level
PlanarCoulombFriction
set-valued on acceleration level
SpatialCoulombFriction
set-valued on acceleration level
9
Modelling hint: There are contradictions between energy conservation in normal direction and dissipation due
to friction when combining these features.
22
PlanarStribeckFriction
set-valued on acceleration level
SpatialStribeckFriction
set-valued on acceleration level
PlanarCoulombImpact
set-valued on velocity level
SpatialCoulombImpact
set-valued on velocity level
PlanarStribeckImpact
set-valued on velocity level
SpatialStribeckImpact
set-valued on velocity level
RegularizedUnilateralConstraint
single-valued on acceleration level
RegularizedBilateralConstraint
single-valued on acceleration level
RegularizedPlanarFriction
single-valued on acceleration level
RegularizedSpatialFriction
single-valued on acceleration level
Conventions
important.
For modelling own contact kinematics and constitutive laws some conventions are
contact kinematics
updateg should dene the normal distance, the possible contact locations and trihedral orientations, updatewb are nonlinear kinematic terms on acceleration level
accompanying contour trihedral
the rst column is the outward pointing normal, then the two tangentials follow with only
the rst tangent-pair having opposite sign
3.1.5
Functions
Depending on the number of arguments it is possible to derive new functions from Function1,
Function2 and Function3 by specifying the template parameters. They are used at various places
and are a general way of re-using functional descriptions.
3.1.6
Integration Schemes
RADAU5Integrator
one-step integration scheme of order 5 for sti ODE with step size control
TimeSteppingIntegrator
one-step semi-implicit integration scheme of order 1 for nonsti MDE
ThetaTimeSteppingIntegrator
one-step integration scheme of order 1 for nonsti with = 0 and sti with (0, 1] MDE
3.2
Program Flow
Conceptionally the program ow is dened by the election of the integration scheme. It can always
be stopped using Ctrl-C also enforcing the closing of the plot functionality. With
kill -USR2 <PID of simulation thread>
a ush of the plot routine is asked for.
3.2.1
Timestepping Integration
Timestepping integration solves the whole equations of the system including the contacts on velocity
level with xed time step size. In detail one has the following work ow.
1. DS::plot (t, q, u)
2. q q + DS::deltaq (t, q, u)
3. t t + t
4. DS::update (t, q, u)
DS::updateStateDependentVariables
update variables depending on the generalised state and the structure of the system with
one independent group and several recursive calculation graphs
DS::updateg
update of the relative position kinematics independent of the system structure using
the order
Link LinkMechanics ( ContactKinematics)
several contacts points are possible from the kinematical point of view, whereby the
maximum number is calculated in ContactKinematics
DS::checkActiveg
determine the state of the relative kinematics concerning the activity of links
redene global memory references using indices
DS::updategd
update of the relative velocity kinematics independent of the system structure
can be done in the child classes of LinkMechanics
DS::updateT
updates the linear transformation matrix q = T u independent of the system structure
24
updateJacobians
updates the Jacobians for projecting forces in generalised directions dependent on the
system structure
updateh
updates the right hand sides with the possibility to account for internal forces of objects
and external forces of links independent of the system structure
updateM
updates the mass matrix independent of the system structure
facLLM
computes the Cholesky decomposition of the mass matrix dependent on the system
structure
group calculates the matrix inverse locally per object
graph calculates the matrix inverse globally
updateW
updates the Jacobian between in general set-valued link-force parameters and generalised coordinates
updateV
the decomposition of the in general set-valued link-forces
W = W N N + W T T
in a normal and tangential part allows to separate the single-valued slip case
for aected links it is
T
N .
N = V
= W
N + W
W
altogether this is a reduction of the set-valued equations being expressed by the
projection
V .
updateG
the force action matrix
G = W T M 1 V
must be calculated by the most global view, namely the DynamicSystemSolver
the size of G is reduced due to the introduction of V but is non-symmetric
for a time-stepping scheme it is V = W
5. DS::solveImpacts (t, q, u)
the constrained equations are solved on velocity level using sparse matrix structures
(cf. [1, MKL sparse matrix storage format])
block structures are not evaluated
6. u u + DS::deltau
7. x x + DS::deltax
8. DS::projectGeneralizedPositions
25
3.2.2
Event-Driven Integration
Currently, LSODAR is the only event-driven integrator with automatic switch between sti and
non-sti equations.
1. DS::computeInitialCondition
checks for system conguration and creates the necessary contact container
2. DS::plot (t, q)
3. DLSODAR
DS::zdot (t, q, u) is available for standard and inverse kinetics calculations
wb means w
and describes the acceleration terms in the constraint kinematics
computeConstraintForces uses a least square algorithm to solve the Delassus equations, assume Ax = b with a m n full-rank matrix A, then there are two cases
m n (skinny) can always be solved by Ax b min and so by SVD
1 T
A b
analytically the solution is given by the normal equations x = AT A
m < n (fat) has an innite dimensional solution space, one has to pick one
solution
1
x min, Ax = b which is analytically given by x = AT AT A
b, again
numerically a SVD solves the problem most eciently
DS::getsv the stop vector denes the root function concerning contacts and stick-sliptransitions for the DAE solver
26
3.3
Plot Routines
3.3.1
Usage
The result of a simulation with MBSim are a mbsim.h5 le for plot analysis as well as ombv.h5
and ombv.xml les for visualisation. Additionally there is information concerning the integrator in
*.plt and *.sum les; for visualisation *.iv les might appear.
For getting data from MBSim a HDF5 wrapper is used. Plotting the multibody system data can
be done with
h5plotserie <h5-file>
The usage is quite canonic and documented in the online help. Interesting features are
superimposing graphs by <shift> and left click in the data list ,
change axes by <ctrl> and left click in the curve list ,
disabling graphs by right click in the curve list .
With
h5lsserie <h5-file>
basically the content can be shown. Several possible options are explained by typing -h:
-d shows the description of the data to plot
-l shows the column labels of the data to plot
-f follows external links in a set of HDF5-les to avoid redundant data (HDF5 is possible per
DynamicSystem)
The specic names in HDF5 format are specialised by reading from right to left. The url to specic
data is given by a path and can be used in
h5dumpserie <path>
perhaps also in other tools. The column one is interested in is declared using a colon. Also several
columns can be appended, whereby shorter ones are enlarged by nan entries. Altogether, it is
possible to use the dump by
gnuplot "<dump" u *:* w l
or in MatLab by
h5dump(<path>)
OpenMBV les can be openen by just typing openmbv in the specic directory. The usage should
be quite canonic and is explained in the online help.
3.3.2
Implementation
In MBSim plotting is done using plotFeatures being dened in element.h. They are set in
dynamic system solver.cc. One plot-le comprises time-series of rowvectors with the same data
type in all entries.
27
Examples
4.1
Frame on Environment
4.1.1
Physics - system
Header
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef _ONEMASSOSCILLATOR_H
#define _ONEMASSOSCILLATOR_H
#include "mbsim/dynamic_system_solver.h"
#include <string>
class System : public MBSim::DynamicSystemSolver {
public:
System(const std::string &projectName);
};
#endif
1,2,13
4,5
7
9
Source
1
2
3
4
5
6
7
8
9
10
11
#include
#include
#include
#include
#include
#include
#include
"system.h"
"mbsim/rigid_body.h"
"mbsim/spring_damper.h"
"mbsim/environment.h"
"mbsim/contours/sphere.h"
"mbsim/contact.h"
"mbsim/constitutive_laws.h"
#ifdef HAVE_OPENMBVCPPINTERFACE
#include "openmbvcppinterface/coilspring.h"
#endif
28
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
sphere1->enableOpenMBV();
mass1->addContour(sphere1,Vec(3,INIT,0.),SqrMat(3,EYE));
Sphere *sphere2 = new Sphere("Sphere2");
sphere2->setRadius(0.2);
sphere2->enableOpenMBV();
mass2->addContour(sphere2,Vec(3,INIT,0.),SqrMat(3,EYE));
Contact *contact = new Contact("Contact");
contact->connect(sphere1,sphere2);
contact->setContactForceLaw(new UnilateralConstraint());
contact->setContactImpactLaw(new UnilateralNewtonImpact(0.3));
this->addLink(contact);
// visualisation
#ifdef HAVE_OPENMBVCPPINTERFACE
OpenMBV::CoilSpring* openMBVspring1=new OpenMBV::CoilSpring;
openMBVspring1->setSpringRadius(0.1);
openMBVspring1->setCrossSectionRadius(0.01);
openMBVspring1->setNumberOfCoils(5);
spring1->setOpenMBVSpring(openMBVspring1);
OpenMBV::CoilSpring* openMBVspring2=new OpenMBV::CoilSpring;
openMBVspring2->setSpringRadius(0.1);
openMBVspring2->setCrossSectionRadius(0.01);
openMBVspring2->setNumberOfCoils(5);
spring2->setOpenMBVSpring(openMBVspring2);
#endif
}
4.1.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "system.h"
#include <mbsim/integrators/integrators.h>
using namespace std;
using namespace MBSim;
int main (int argc, char* argv[])
{
// build single modules
DynamicSystemSolver *sys = new System("TS");
// add modules to overall dynamical system
sys->init();
TimeSteppingIntegrator integrator;
integrator.setStepSize(1e-4);
integrator.setEndTime(10.0);
integrator.setPlotStepSize(1e-3);
30
20
21
22
23
24
25
26
27
integrator.integrate(*sys);
cout << "finished"<<endl;
delete sys;
return 0;
}
4.1.3
Makele
4.2
31
4.3
32
Trouble-Shooting
A.1
GNU-Build-System
configure.ac
Makefile.am
libtoolize
aclocal
aclocal.m4
automake
autoconf
Makefile.in
legend
configure
input file
output file
Makefile
program
make
procedure
automake -a -c --force
make
make install
./configure
10
in detail: www.gnu.org/software/[autoconf,automake,libtool]/manual
33
A.2
Necessary for the installation of a static visualisation part are the following preliminary steps with
everything being installed in /home/OpenMBV and with some hints:
export PKG CONFIG PATH=/home/OpenMBV/local/lib/pkgconfig
Coin3d with version 3 or newer (3D scenegraphs)
./configure --prefix=/home/OpenMBV/local --disable-shared --enable-static
hdf5 with version 1.8.2 or newer (le handling)
./configure --prefix=/home/OpenMBV/local --disable-shared --enable-static
--enable-cxx --with-zlib=no
Qt with version 4.4 or newer (2D user interface)
./configure -prefix /home/OpenMBV/local -static -nomake examples -nomake demos
-nomake docs -nomake translations -no-gif -no-libtiff -qt-libpng -no-libmng
-qt-libjpeg -no-openssl -no-glib
HDF5Serie (wrapper for le handling)
./configure --prefix=/home/OpenMBV/local --disable-shared --enable-static
SoQt with version 1.4.1 or newer (e.g. event invocation in coin due to hardware events)
in SoQtComponent.cpp:103 change "unsinged long key" to "uintptr t key"
export QTDIR=/home/OpenMBV/local
export CONFIG QTLIBS="$(pkg-config --libs QtGui QtCore Qt3Support QtOpenGL)"
./configure --prefix=/home/OpenMBV/local --disable-shared --enable-static
Qwt with version 5 or newer (GUI elements)
in qwtconfig.pri change INSTALLBASE=/home/OpenMBV/local
/home/OpenMBV/local/bin/qmake
Octave with version 3.0 or newer (for XML preprocessing)
A.3
Path Information
After recognising diculties concerning path information mistakes in the objects should be ruled
out by make clean. Then, path information in .bashrc and nally in the aected .pc-les should
be checked. The location of the .pc-les can be found by
pkg-config --cflags mbsim
pkg-config --libs mbsim
A.4
After editing $HOME/.bashrc the shell has to be restarted or the command source $HOME/.bashrc
has to be invoked
In the following the Coding standards of MBSim and the associated projects is dened.
34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// General
// -------
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
// Code Style
// ----------
35
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Long comments:
/*
* long comment
* over more than one line
*/
// Short comments:
// short comment only one line
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
float inlineBar() {
foo();
return 5.2;
}
string s;
bool bl;
};
// (Element) Funktion:
void Foo::foo() {
bar();
}
// namespace
namespace Fritz { Oskar; }
namespace Fritz {
Oskar;
}
// short if:
if(i==4) printf("test\n");
// or
if(i==4)
printf("test\n");
// long if:
if(i==4) {
printf("test1\n");
printf("test2\n");
}
// short if else:
if(i==4)
printf("test1\n");
else
printf("test2\n");
// long if else:
if(i==4) {
printf("test1a\n");
printf("test1b\n");
}
else {
printf("test2a\n");
printf("test2b\n");
37
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
}
// short for
for(int i=0;i<5;i++) cout << "bla" << endl;
// or
for(int i=0;i<5;i++)
cout << "bla" << endl;
// long for
for(int i=0;i<5;i++) {
cout << "bla" << endl;
}
// short while:
while(i!=4) printf("test2a\n");
// or
while(i!=4)
printf("test2a\n");
// long while:
while(i!=4) {
printf("test1\n");
printf("test2\n");
}
// short do-while:
do
printf("test\n");
while(i==5);
// long do-while:
do {
printf("test1\n");
printf("test2\n");
}
while(i==5);
// switch-case:
switch(a) {
case 1: printf("test1\n"); break
case 2:
printf("test2a\n");
printf("test2b\n");
break;
default:
printf("test3\n");
38
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
39
References
[1] Intel Math Kernel Library Reference Manual.
http://software.intel.com/en-us/intel-mkl, August 2008.
[2] Vincent Acary and Franck Perignon. An introduction to siconos. Technical report, INRIA,
2007.
[3] Stephan Berard, Je Trinkle, Binh Nguyen, Ben Roghani, Jonathan Fink, and Vijay Kumar.
davinci code: A multi-model simulation and analysis tool for multi-body systems. In 2007
IEEE International Conference on Robotics and Automation ; Roma, Italy, 10th-14th April
2007, pages 25882593. IEEE, 2007.
[4] Fredrik Borchsenius. Simulation
olhydraulischer Systeme, volume 1005 of Fortschrittberichte
VDI : Reihe 8, Me-, Steuerungs- und Regelungstechnik. VDI-Verlag, D
usseldorf, als ms. gedr.
edition, 2003.
[5] Markus Friedrich and Heinz Ulbrich. A parallel co-simulation for multi body systems. In
2nd South-East European Conference on Computational Mechanics , Rhodes , 22nd-24th June
2009, 2009.
[6] Peter Fritz. Dynamik schnellaufender Kettentriebe, volume 253. VDI-Verlag, D
usseldorf, als
ms. gedr. edition, 1998.
[7] Martin Forg. Mehrk
orpersysteme mit mengenwertigen Kraftgesetzen : Theorie und Numerik,
volume 411 of Fortschritt-Berichte VDI : Reihe 20, Rechnerunterst
utzte Verfahren. VDI-Verl.,
D
usseldorf, als manuskript gedruckt. edition, 2007.
[8] Martin Forg. Mehrkorpersimulation. Vorlesungsskript, TU M
unchen, 2009.
[9] Werner Schielen. Multibody system dynamics: Roots and perspectives. Multibody System
Dynamics, 1:149188, 1997.
[10] Roland Zander. Flexible multi-body systems with set-valued force laws, volume 420 of
Fortschritt-Berichte VDI : Reihe 20, Rechnerunterst
utzte Verfahren. VDI-Verlag, D
usseldorf,
als manuskript gedruckt. edition, 2009. http://mediatum2.ub.tum.de/node?id=654788.
[11] Roland Zander, Thorsten Schindler, Markus Friedrich, Robert Huber, Martin Forg, and Heinz
Ulbrich. Non-smooth dynamics in academia and industry: recent work at TU M
unchen. Acta
Mechanica, 195:167183, 2008.
40