Vortex Simulation Toolkit - FAQ (Frequently Asked Questions)

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
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:

Because the constraint stabilization algorithm may introduce oscillations or jitter, we use the following parameters by default:

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.

Friction Models.
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).

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 last time step. This seems to be more stable than Vortex' MdtFrictionModelScaledBox.

Using the appropriate options of the Universe class one can toggle between these three friction models.