Direct dynamics analysis


This tutorial introduces additional features of the Direct Dynamics module in Robotran.

For the basics use of direct dynamics, see the Pendulum-Spring tutorial Getting Started.

The programming language in this tutorial is C.

All the detailed informations is given in the MBsysC documentation. However, this tutorial gives some insights on some specific options.

Time integration

Integrator type

MBsysC comes with different integrators (RK4, Dopri5…). The selection of the integrator is done by setting mbs_dirdyn->options->integrator to the wanted value. The list of the available integrators is in the MBsysC documentation. Some are implicit, multi-step, etc. See their headers for more information (like the Rosenbrock header).


int main(int argc, char const *argv[])

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    /*                      Direct Dynamics                      *
    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    // dirdyn options (see documentations for additional options)
    mbs_dirdyn->options->integrator = "RK4";


Other options have to follow the same syntax as above.


By default, the integrator is Runge Kutta with 4 steps

Integrators parameters

Depending on the integrators, various parameters can be chosen (toler, dt_max, …). See MBsysC documentation.

Force the integrator to pass at specific time values

If you need an adaptive integrator to pass at some fixed time stepped value (for example for a synchronization), you can activate the flag_waypoint in the MbsDirdynOptions structure. Then the step size is defined in the delta_t_wp field. ..

Stiff systems

It is also possible to perform numerical stabilization based on Baumgarte method at the velocities and accelerations levels. See flag_baumgarte_stabilization and baumgarte_alpha baumgarte_beta options.

Jacobian calculation

For the implicit integrators, option n_freeze may stop the computation and compute it only each n_freezetime. For example, if n_freeze = 1, the Jacobian will be computed every two time steps.

Besides, the flag flag_ongoing_jac_computation says when the integrator is computing the Jacobian (==1) or when an internal step is processed (==0). It allows to separate calculation between the two situations. For example, if a FSM is used, it could be better not to change the FSM state during the Jacobian computation.


Various options are available for customizing the animations saving (see resfilename, respath, save_anim, …).


To make the computation time smaller, several flags allow to prevent Robotran from computing useless values.

  • flag_compute_Qc and compute_Qc: computation of the driven joint Lagrange multipliers

  • compute_all_uxd: computation of the user derivative