Why my articulated bodies fall apart after some time?
Mostly the reason for this behaviour is, that to strong forces occur.
Check wether some solids penetrate each other, because this produces huge
forces. Sometimes actuated joints try to penetrate some solid parts as
well. Use joint limits in this case to restrict the allowed positions of
the joint.
I observe weird collisions of bouncing objects
If the collision velocity of two colliding bodies is large, a large simulation
time step will result in a large "virtual penetration" of the objects. Because
Vortex doesn't compute the actual instant of collision it has to handle this
large penetration. This might result in instant reversal of the objects
velocities (with appropriate damping), i.e. a bounce effect. Try to adjust the
softness parameter for the contacts.
My objects suddenly stop their motion.
If the objects velocities and accelerations become small, the body is
automatically disabled from simulation, i.e. it stops its (small) motion.
If will become activated automatically on a new contact.
With bouncing collisions the bodies usually loose energy,
i.e. speed due to damping. If the velocity after collision is too small, they
will stop due to auto-disabling.
Why my bodies behave different, if I scale the scene?
Eventually you will observe that bodies seemingly move slower or faster
depending on wheather you scale with a factor larger resp. smaller than one.
This is the correct behaviour, because the bodies have to cover actually
different distances until they meet, which naturally takes different times, if
all other parameters are scaled appropriately.
Another difference might occur in collisions of objects. With different scale bodies have different velocities if they actually collide. If the collision velocity is large, they bounce. If the body velocity is too small after collision, the objects might stop.
Limit Stop Parameters ReboundVelocity = -restitution * velocity
hepsilon= 1.0f /((stepsize * stiffness) + damping)
Because the constraint stabilization algorithm may introduce oscillations
or jitter, we use the following parameters by default:
Friction Models.
We developed our own friction model, distinguishing between static and dynamic
friction. Internally we use MdtFrictionModelBox where we adjust the
friction forces according to the normal force of
Using the appropriate options of the Universe class one can toggle
between these three friction models.
Hinge and Prismatic joints can be limited, i.e. one can
specify joint limits (called stops in Vortex). Due to the discrete time step
it may happen, that the joint value overshoots above (or below) a limit stop.
In this case the behaviour is determined by the following logics:
total_epsilon = hepsilon - stepsize*epsilon
total_gamma = hepsilon * stepsize * stiffness - gamma
Because the motor velocity is reset to zero in this case, one has to set the
motor velocity each time step! To avoid overshooting in advance each call of
Limit::SetSpeed() decreases the desired velocity if neccessary,
which successfully avoids jitter.
Vortex comes internally with two friction models: MdtFrictionModelBox
and since version 2.0.1 MdtFrictionModelScaledBox. Both models do not
distinguish between static and dynamic friction. While the first model sets
constant friction forces the latter allows to scale the maximally applied
friction forces by a friction coefficient mu. For this purpose the constraint
solver first computes the normal forces and then adjusts the friction forces
accordingly. Unfortunately this method is very unstable, not allowing an
objects to slide over a plane (
friction example of tutorial).